Qt 从无符号字符*数据构造QImage
我在将图像对象(使用Point Grej FlyCapture2 SDK捕获)传递到QImage对象时遇到问题。我通过函数获取与图像数据关联的指针:Qt 从无符号字符*数据构造QImage,qt,qimage,data-capture,Qt,Qimage,Data Capture,我在将图像对象(使用Point Grej FlyCapture2 SDK捕获)传递到QImage对象时遇到问题。我通过函数获取与图像数据关联的指针: virtual unsigned char* FlyCapture2::GetData ( ) unsigned char *const img = PGRSystem->SnapShot(); QImage Img(img, 1024, 768, QImage::Format_RGB888); QGraphicsScene *Sc
virtual unsigned char* FlyCapture2::GetData ( )
unsigned char *const img = PGRSystem->SnapShot();
QImage Img(img, 1024, 768, QImage::Format_RGB888);
QGraphicsScene *Scene = new QGraphicsScene();
Scene->addPixmap(QPixmap::fromImage(Img));
ui.ImageView->setScene(Scene);
ui.ImageView->fitInView(ui.ImageView->itemAt(100,100));
delete [] Scene;
然后通过以下方式加载数据:
QImage::QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )
两个图像对象的数据格式均为8位单色。BytePerline参数应该等于图像的宽度(我已经通过将FlyCapture2::Image保存到.bmp,然后将其加载到QImage进行了检查)
你认为问题是从unsigned char*强制转换为uchar*吗?
你还有别的想法吗?逐像素复制图像的速度太慢
编辑:我正在将FlyCapture捕获的图像转换为FlyCapture2::PIXEL\u格式\u RGB8
,其中:R=G=B=8位,位于PGR::SnapShot()函数中。SnapShot()返回无符号字符
*常量。
这是我的Qt显示功能的一部分:
virtual unsigned char* FlyCapture2::GetData ( )
unsigned char *const img = PGRSystem->SnapShot();
QImage Img(img, 1024, 768, QImage::Format_RGB888);
QGraphicsScene *Scene = new QGraphicsScene();
Scene->addPixmap(QPixmap::fromImage(Img));
ui.ImageView->setScene(Scene);
ui.ImageView->fitInView(ui.ImageView->itemAt(100,100));
delete [] Scene;
我还试图将Img保存到文件中,但随后出现了未处理的异常。我尝试了其他像素格式对(FlyCapture2::pixel\u format\u RGB
-24位RGB,带QImage::RGB88
8和FlyCapture2::pixel\u format\u RGBU32
带QImage::RGB32
)
还值得一提的是,我正在使用的QImage构造函数没有设置颜色表(当检查QImage是否为灰度时,我会遇到异常)。
我想我还需要一点帮助。首先,QImage不支持本地灰度图像,这听起来就像是输出一样,所以我想知道您使用的是什么格式参数。可能最简单的解决方案是,尽管内存效率低下,但将灰度图像扩展为RGB,方法是将每个值复制三次(复制到新的QByteArray中)
另外一个问题是,您正在使用的特定QImage构造函数不会复制底层数据,因此您需要确保从GetData()返回的指针比QImage更有效,或者使用QImage::copy强制QImage在内部进行复制
看到更多的代码会有所帮助,正如上面提到的其他受访者。非常感谢您的帮助,您对图像格式的看法是正确的。不幸的是,主要问题与在函数之间传递指针有关。在PGR::SnapShot()中,我创建了FlyCapture2::Image,然后得到了指向数据的指针。FlyCapture2::Image在退出函数时被解析,因此返回的指针为BadPtr 您遇到了什么问题?图像传递不正确。在QGraphicsView上设置场景时,我收到一张空白图片。uchar是一个未签名的字符,所以这不应该是问题所在。您可能需要发布一些实际代码,以便进一步确定。我敢打赌,我自己在绘图之前,数据会消失。我使用的是QImage::Format_Indexed8。我昨天发现这不是本地灰度格式。你认为QImage::setColorCount和setColorTable可以解决这个问题吗?你可以创建一个颜色表,将每个色调值映射到一个等效的RGB值,但考虑到RAM便宜,并且索引图像对于系统来说稍微复杂一些,这就是为什么我建议在构建QImage之前将每个像素值扩展为RGB。(QImage确实应该根据需要支持灰度图像,但这是另一个问题)。这两种方法都可以,所以如果填充颜色表对你来说比较容易,那就去吧。我刚刚看了FlyCapture API,它有图像格式转换帮助程序-flycaptureConvertImage-所以如果你能找到一种与QImage格式等效的图像格式,你就完成了。我在我的原始帖子中添加了更多信息。你能看一下它吗,因为它仍然不起作用?