我已经能够使用如下内容在Qt中显示标签中的图像:
transformPixels(0,0,1,imheight,imwidth,1);//sets unsigned char** imageData
unsigned char* fullCharArray = new unsigned char[imheight * imwidth];
for (int i = 0 ; i < imheight ; i++)
for (int j = 0 ; j < imwidth ; j++)
fullCharArray[(i*imwidth)+j] = imageData[i][j];
QImage *qi = new QImage(fullCharArray, imwidth, imheight, QImage::Format_RGB32);
ui->viewLabel->setPixmap(QPixmap::fromImage(*qi,Qt::AutoColor));因此,fullCharArray是从2D数组imageData映射的无符号字符的数组,换句话说,它是不高*不宽的字节。
问题是,我的图像似乎只有一部分显示在标签上。图像非常大。我想要显示完整的图像,缩小到适合标签,与纵横比保留。
此外,QImage格式是我唯一能找到的格式,它似乎给了我一个我想要显示的图像的近距离表示,这是我应该期待的吗?我只使用了每个像素一个字节(从0到255的无符号字符值),看起来liek RGB32对该数据类型没有多大意义,但其他任何一个都没有显示任何远程正确的内容
编辑:遵循dan gallaghers的建议,我实现了以下代码:
QImage *qi = new QImage(fullCharArray, imwidth, imheight, QImage::Format_RGB32);
int labelWidth = ui->viewLabel->width();
int labelHeight = ui->viewLabel->height();
QImage small = qi->scaled(labelWidth, labelHeight,Qt::KeepAspectRatio);
ui->viewLabel->setPixmap(QPixmap::fromImage(small,Qt::AutoColor));但这会导致我的程序“意外结束”,代码为0
发布于 2011-01-19 02:42:23
QImage有一个scaled成员。因此,您希望将setPixmap调用更改为如下所示:
QImage small = qi->scaled(labelWidth, labelHeight, Qt::KeepAspectRatio);
ui->viewLabel->setPixmap(QPixmap::fromImage(small, Qt::AutoColor);请注意,scaled不会修改原始图像qi;它会返回一个新的QImage,它是原始图像的缩放副本。
重新编辑:
要从1字节灰度转换为4字节RGB灰度:
QImage qi = new QImage(imwidth, imheight, QImage::Format_RGB32);
for (int i = 0; i < imheight; i++)
{
for (int j = 0; j < imwidth; j++)
{
qi->setPixel(i, j, QRgb(imageData[i][j], imageData[i][j], imageData[i][j]));
}
}然后缩放qi并将缩放后的副本用作viewLabel的像素图。
发布于 2011-01-19 04:05:09
Qt不直接支持灰度图像构造。您需要使用8位索引的彩色图像:
QImage * qi = new QImage(imageData, imwidth, imheight, QImage::Format_Indexed8);
for(int i=0;i<256;++i) {
qi->setColor(i, qRgb(i,i,i));
}发布于 2011-09-29 22:04:25
我也遇到过类似的问题--QImage::缩放返回的黑色图像。在我的例子中起作用的快速解决办法是将QImage转换为QPixmap,然后缩放并转换回来。如下所示:
QImage resultImg = QPixmap::fromImage(image)
.scaled( 400, 400, Qt::KeepAspectRatio )
.toImage();其中" image“是原始图像。在阅读这篇文章之前,我没有意识到格式问题,但实际上,我的图像是1位黑白的。
你好,Valentin Heinitz
https://stackoverflow.com/questions/4727625
复制相似问题