在 Qt 中显示来自 unsigned char 的图像**

Posted

技术标签:

【中文标题】在 Qt 中显示来自 unsigned char 的图像**【英文标题】:Display image in Qt that is coming from an unsigned char** 【发布时间】:2011-01-18 14:32:58 【问题描述】:

我正在尝试在 Qt 中显示作为来自另一个函数的数据的图像。

该函数将图像的行存储为无符号字符**

我在某处读到,我可以以某种方式将其存储为 QByteArray,然后创建一个 QPixMap,然后设置标签的 QPixMap 以显示它,但我运气不佳。

这就是我所拥有的:

unsigned char* fullCharArray = new unsigned char[imheight * imwidth];
for (int i = 0 ; i < imheight ; i++)
for (int j = 0 ; j < imwidth ; j++)
fullCharArray[i*j+j] = imageData[i ][j];

QPixmap *p = new QPixmap(reinterpret_cast<const char *>(fullCharArray));
ui->viewLabel->setPixMap(p);

但这似乎给了我一个错误,而且无论如何可能是错误的。当我尝试调用 setPixMap(p[]) 时,错误消失了,但图像没有显示在标签中。

imageData 是由我的其他函数填充的二维数组。最好我想为了创建一个新的 QPixMap 我必须将它转换为一维数组,并在那里手动进行索引计算。这就是双 For 循环的作用。

那么有没有更好的方法在 Qt 中显示这些图像数据?

【问题讨论】:

【参考方案1】:

使用QImage。这个构造函数应该可以帮助你:http://doc.qt.io/qt-5/qimage.html#QImage-4

【讨论】:

【参考方案2】:

像素图不是二维像素数组。它们实际上被定义为描述图像的字符串数组。

例如,一个 4x4 像素的图像,中心 4 个像素为黑色,4 个角落像素为红色:

/* XPM */
static char * sample_xpm[] = 
"4 4 3 1",
"   c #FF0000",
".  c #FFFFFF",
"+  c #000000",
" .. ",
".++.",
".++.",
" .. ";

这是一种方便的文件格式,用于存储小图像(例如工具栏按钮),可以使用标准 #include 指令将其集成到 C 源文件中,与程序的其余部分一起编译。

【讨论】:

【参考方案3】:

如果数据已经是带有标题的PNG或jpeg等图像格式,则使用QPixmap。

要从像素值创建图像,请使用Qimage,然后将其转换为像素图 (Qpixmap.fromImage() - 如果需要保存或显示它。

【讨论】:

以上是关于在 Qt 中显示来自 unsigned char 的图像**的主要内容,如果未能解决你的问题,请参考以下文章

Qt笔记-char[]或unsigned char[]转QByteArray时要注意的地方

字符串怎么转换为unsigned char数组

怎么把unsigned char数组转化为字符串类型

将 unsigned char 转换为 signed char 以获得红黑树

如何将unsigned char数组以十六进制形式显示在CListBox控件中

使用 char 或 unsigned char 数组存储原始数据更好吗?