首页| 论坛| 消息

回复: 使用Qt的QLabel获取绘图句柄问题!
#16 回 xuang 的帖子 [nuanbing222 09-24 14:56]
xuang:如果你不是一定要对采集卡的原始内存数据进行操作,我建议你先new一个QImage,然后用QImage的bits()获取这个QImage的图像数据指针,然后用for循环或者memcpy将原始的图像数据拷贝过来。 (2014-09-24 13:03) 
非常感谢,我试了一下,好像也不行,我是这样写的:
QImage* image = new QImage(768, 576, QImage::Format_RGB888);
memcpy(image->bits(), (uchar*)pLinearAddr, 768*576*3);
最后采用QPixmap的fromImage()转化一下,使用QLabel的setPixmap()函数进行显示,没有显示。。。。
#17 回 nuanbing222 的帖子 [xuang 09-24 15:23]
nuanbing222:非常感谢,我试了一下,好像也不行,我是这样写的:
        QImage* image = new QImage(768, 576, QImage::Format_RGB888);
        memcpy(image->bits(), (uchar*)pLinearAddr, 768*576 .. (2014-09-24 14:56) 
你可以试试memcpy是不是真的从pLinearAddr处将数据拷贝至image的bits中了,我觉得很可能是因为pLinearAddr处的图像数据不是按照每个像素BGR三字节的顺序排列的。你可以试试这么写:
QImage* image = new QImage(768, 576, QImage::Format_RGB888);
int bytePerLine = image->bytesPerLine();
int imageWidth = image->width();
int imageHeight = image->height();
unsigned char* imageData = image->bits();
for (int i=0;i
#18 回 xuang 的帖子 [dbzhang800 09-24 15:37]
xuang:
你可以试试memcpy是不是真的从pLinearAddr处将数据拷贝至image的bits中了,我觉得很可能是因为pLinearAddr处的图像数据不是按照每个像素BGR三字节的顺序排列的。你可以试试这么写:
QImage* image = new QImage(768, 576, QImage::Format_RGB888);
int bytePerLine = image->bytesPerLine();
int imageWidth = image->width();
.......
你考虑的太复杂了。有时候考虑问题从简单角度的考虑会更容易解决问题。
其实楼主要测试的话:创建一个新的小工程,分配一个的w*h*3的 uchar * 数组,里面随机值都不怕,然后直接构建一个QImage,然后直接QImage::save() 保存成图片文件 。 总共也就10行左右的代码,一切问题都说明了。
#19 回 xuang 的帖子 [nuanbing222 09-24 15:47]
xuang:你可以试试memcpy是不是真的从pLinearAddr处将数据拷贝至image的bits中了,我觉得很可能是因为pLinearAddr处的图像数据不是按照每个像素BGR三字节的顺序排列的。你可以试试这么写:
QImage* image = new QImage(768, 576, QImage::Format_RGB888);
int bytePerLine = image->b .. (2014-09-24 15:23) 
非常感谢您详细的回复,我按照您的代码试了一下,还是不能显示。不过,我需要问一下,如果每行都要4字节对齐,得改成pLinearAddr,其中的K是什么?
另外,我做的工程有点特殊,我们是使用QML作为前台界面,QT做后台数据处理,所以基本上没法调试,只能够靠结果或者打印LOG的方式来查看运行情况。
还好,我能保证分配的pLinearAddr的地址长度为768*576*3,格式为RGB888. 所以有个问题,为什么您的代码中要说明是BGR而不是RGB呢?
#20 回 nuanbing222 的帖子 [xuang 09-24 16:03]
nuanbing222:非常感谢您详细的回复,我按照您的代码试了一下,还是不能显示。不过,我需要问一下,如果每行都要4字节对齐,得改成pLinearAddr,其中的K是什么?
另外,我做的工程有点特殊,我们是使用QML作为前台界面,QT做后台数据处理,所以基本上没法调试,只能够靠结果或者打印LOG的方式 .. (2014-09-24 15:47) 
k表示通道数,这里就是0、1、2三个取值,刚才图个方便就没有展开写。
我记得QImage中的RGB888是按照BGR的顺序反向排列的,这一点你可以自己确认一下,无非就是显示彩色图像时颜色花了,但是内容是正确的。我之前用QImage::Format_ARGB32格式的QImage中四位字节顺序也是BGRA的反向排列。这个只是小问题,关键还是不能显示的问题。
你可以先不用你的pLinearAddr数据作为图像数据,直接对QImage的bits进行赋值,做一张全白或者全红的图像出来看看能不能显示,如果这都不能显示那就得找别的问题了。

<< 2 3 4 5 6 >> (4/6)

回复 发表
主题 版块