Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 从无符号字符*数据构造QImage_Qt_Qimage_Data Capture - Fatal编程技术网

Qt 从无符号字符*数据构造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

我在将图像对象(使用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 *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格式等效的图像格式,你就完成了。我在我的原始帖子中添加了更多信息。你能看一下它吗,因为它仍然不起作用?