gpt4 book ai didi

qt - 从 unsigned char* 数据构造 QImage

转载 作者:行者123 更新时间:2023-12-04 13:27:40 25 4
gpt4 key购买 nike

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

virtual unsigned char* FlyCapture2::GetData  (   ) 

然后通过以下方式加载数据:
QImage::QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )

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

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

编辑:我正在将 FlyCapture 捕获的图像转换为 FlyCapture2::PIXEL_FORMAT_RGB8 ,其中:R = G = B = 8 位,在 PGR::SnapShot() 以内功能。 SnapShot() 返回 unsigned char * 常量。
这是我的 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;

我也尝试将 Img 保存到文件中,但当时遇到了未处理的异常。我尝试了其他像素格式对( FlyCapture2::PIXEL_FORMAT_RGB - 24 位 RGB 与 QImage::RGB88 8 和 FlyCapture2::PIXEL_FORMAT_RGBU32QImage::RGB32 )

还值得一提的是,我正在使用的 QImage 构造函数没有设置 colorTable(检查 QImage 是否为灰度时出现异常)。
我想我需要更多帮助。

最佳答案

首先 - QImage 不支持 native 灰度图像,这听起来好像你是作为输出 - 所以我很好奇你正在使用什么 Format 参数。尽管内存效率低,但最简单的解决方案可能是通过将每个值复制三次(到新的 QByteArray 中)将灰度图像扩展为 RGB。

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

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

关于qt - 从 unsigned char* 数据构造 QImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4031350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com