c++ - 在 Qt 中显示和调整来自 QImage 的灰度

标签 c++ qt qt4

我已经能够使用类似下面的方法在 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是一个由二维数组imageData映射而来的unsigned char数组,换句话说就是imheight * 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));

但这会导致我的程序“意外结束”,代码为 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));
}

关于c++ - 在 Qt 中显示和调整来自 QImage 的灰度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4727625/

相关文章:

command-line - Qt4 的命令行解析器

c++ - 错误 C2059 : syntax error : ']' , 我无法弄清楚为什么这会出现在 C++ 中

c++ - 数组初始化

使用嵌套函数调用的 C++ 命名返回值优化

c++ - 无法在模板类中使用 typedef 编译示例

python - 获取一个 Qtreewidget 中的位置并将另一个 Qtreewidget 扩展到同一位置

c++ - 如何从 QDateTime 获取时区

linux - 停止 qt 写入/dev/tty0

c++ - 我的 Qt QAbstractProxyModel 使用 ChartView 而不是使用 TableView 崩溃?

c++ - 由 QProcess 启动的嵌套远程进程仍然是僵尸进程