我已经能够使用如下内容在 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 映射而来的无符号字符数组,换句话说,它是 imheight * imwidth 字节。
问题是,标签中似乎只显示了我的图像的一部分。图像非常大。我想显示完整的图像,缩小以适合标签,并保留纵横比。
另外,QImage 格式是我能找到的唯一一种似乎可以近似表示我想要显示的图像的格式,这是我应该期望的吗?我每个像素仅使用一个字节(无符号字符 - 值从 0 到 255),而且看起来 RGB32 对于该数据类型没有多大意义,但其他类型都没有显示任何远程正确的内容
编辑:
按照丹·加拉格尔的建议,我实现了这段代码:
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