首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从无符号字符*数据构造QImage

从无符号字符*数据构造QImage
EN

Stack Overflow用户
提问于 2010-10-27 16:45:56
回答 2查看 8.8K关注 0票数 4

我在向QImage对象传递图像对象(使用Point Grej FlyCapture2 SDK捕获)时遇到了一个问题。我正在通过函数获取与图像数据相关联的指针:

代码语言:javascript
复制
virtual unsigned char* FlyCapture2::GetData  (   ) 

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

代码语言:javascript
复制
QImage::QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )

两个Image对象的数据格式都是8位单色。BytesPerLine参数应该等于图像的宽度(我已经通过将FlyCapture2::Image保存到.bmp,然后将其加载到QImage进行了检查)。

您认为问题是从unsigned char*转换为uchar*吗?你还有其他的想法吗?逐个像素复制图像太慢了。

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

代码语言:javascript
复制
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保存到文件中,但得到了未处理的异常。我尝试了其他像素格式对( QImage::RGB888的FlyCapture2::PIXEL_FORMAT_RGB- 24位RGB和QImage::RGB32FlyCapture2::PIXEL_FORMAT_RGBU32 )

值得一提的是,我正在使用的QImage构造器没有设置colorTable (当我检查QImage是否在grayScale中时,我得到了异常)。我想我需要更多的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-28 00:42:31

第一件事- QImage不支持原生灰度图像,这听起来就像你得到的输出-所以我很好奇你使用的是什么格式参数。最简单的解决方案可能是将每个值复制三次(复制到一个新的QByteArray中),将灰度图像扩展到RGB。

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

正如上面提到的其他受访者所指出的,看到更多的代码会有所帮助。

票数 6
EN

Stack Overflow用户

发布于 2010-10-28 23:48:53

非常感谢你的帮助,你对图像格式的看法是正确的。不幸的是,主要问题与在函数之间传递指针有关。在PGR::SnapShot()中,我创建了FlyCapture2::Image,然后我获得了指向数据的指针。FlyCapture2::Image在退出函数时被破坏,因此返回的指针为BadPtr。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4031350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档