在 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 转换为 signed char 以获得红黑树