从unsigned char*数据构造QImage

Mar*_*cin 4 qt data-capture qimage

我遇到了将Image对象(使用Point Grej FlyCapture2 SDK捕获)传递给QImage对象的问题.我按功能得到一个与图像数据相关的指针:

virtual unsigned char* FlyCapture2::GetData  (   ) 
Run Code Online (Sandbox Code Playgroud)

然后通过以下方式加载数据:

QImage::QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )
Run Code Online (Sandbox Code Playgroud)

两个Image对象的数据格式都是8位单色.BytesPerLine参数应该等于Image的宽度(我已经通过将FlyCapture2 :: Image保存到.bmp并将其加载到QImage来检查它).

你问题是从unsigned char*转换为uchar*吗?你还有其他建议吗?逐像素复制图像太慢了.

编辑:我正在将FlyCapture捕获的图像转换FlyCapture2::PIXEL_FORMAT_RGB8为:R = G = B = 8位,在PGR::SnapShot()函数内.SnapShot()返回unsigned char*const.这是我的Qt显示功能的一部分:

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;
Run Code Online (Sandbox Code Playgroud)

我也尝试将Img保存到文件中,但是后来遇到了未处理的异常.我尝试过其他像素格式对(FlyCapture2::PIXEL_FORMAT_RGB- 24位RGB与QImage::RGB888和FlyCapture2::PIXEL_FORMAT_RGBU32QImage::RGB32)

还值得一提的是,我正在使用的QImage构造器没有设置colorTable(我在检查QImage是否为grayScale时遇到异常).我想我还需要一些帮助.

Jam*_*ner 5

第一件事 - QImage不支持原生灰度图像,这听起来好像你正在获得输出 - 所以我很好奇你正在使用什么格式参数.可能最简单的解决方案,虽然内存无效,但是通过将每个值复制三次(进入新的QByteArray)将灰度图像扩展为RGB.

另一个问题是您正在使用的特定QImage构造函数不会复制底层数据,因此您需要确保从GetData()返回的指针超过QImage - 或强制QImage在内部进行复制,使用,比如说,QImage :: copy.

正如其他受访者所述,看到更多代码会有所帮助.