我能够使用以下内容在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));
Run Code Online (Sandbox Code Playgroud)
所以fullCharArray是一个已经从2D数组imageData映射的无符号字符数组,换句话说,它是imighight*imwidth字节.
问题是,似乎我的图像中只有一部分显示在标签中.图像非常大.我希望显示完整的图像,按比例缩小以适应标签,并保留纵横比.
另外,那个QImage格式是我能找到的唯一一个似乎能让我近距离展示我想要展示的图像的格式,这是我应该期待的吗?我只使用每个像素一个字节(无符号字符 - 从0到255的值),似乎谎言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));
Run Code Online (Sandbox Code Playgroud)
但这导致我的程序"意外地完成"代码0
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));
}
Run Code Online (Sandbox Code Playgroud)
QImage有一个scaled成员.所以你想把你的setPixmap电话改成:
QImage small = qi->scaled(labelWidth, labelHeight, Qt::KeepAspectRatio);
ui->viewLabel->setPixmap(QPixmap::fromImage(small, Qt::AutoColor);
Run Code Online (Sandbox Code Playgroud)
请注意,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]));
}
}
Run Code Online (Sandbox Code Playgroud)
然后缩放qi并使用缩放副本作为像素图viewLabel.
| 归档时间: |
|
| 查看次数: |
11186 次 |
| 最近记录: |