我正在尝试创建包装由 OpenCv 创建的现有图像缓冲区的 QImage 我正在考虑使用以下构造函数来执行此操作。
QImage::QImage ( const uchar * data, int width, int height,
int bytesPerLine, Format format )
所以,我的代码就像
QImage qimage((const uchar*)iplImage->imageData,
iplImage->width, iplImage->height,
iplImage->widthStep,
QImage::Format_Indexed); // image buffer not copied!
qimage.setColorTable(grayScaleColorTable); // color table's item count 256 for grayscale.
// now new image buffer is allocated here.
好的,在调用这个 ctor 时实际上没有完成任何内存复制。但是,我的问题来了。QImage::setColorTable()
是非 const 成员函数,其中 QImage 分配新的图像缓冲区以通过其内部 detach() 函数进行复制。
我发现 Qt3 支持这种问题,其中 ctor 可以接受颜色表作为其 ctor 中的参数,但我在 > Qt4 中没有找到任何此类支持。
如何为现有图像缓冲区创建灰度 QImage?
提前感谢您
[编辑]
感谢 Stephen Chu,我意识到以下构造函数创建了可读写的 QImage 对象
QImage ( uchar * data, int width, int height, Format format )
QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )
即使QImage::setColorTable()
在实例化之后立即调用它,也不会分配新的缓冲区。另一方面,接收“const”数据缓冲区的构造函数创建只读 QImage 对象,当QImage::setColorTable()
调用任何非 const 成员函数(我不想要)时,分配新缓冲区并从原始缓冲区深度复制。
QImage ( const uchar * data, int width, int height, Format format )
QImage ( const uchar * data, int width, int height, int bytesPerLine, Format format )