我正在尝试创建包装由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?
提前致谢
[EDITED]
感谢Stephen Chu,我意识到跟随contstructors创建可读/写的QImage对象
QImage ( uchar * data, int width, int height, Format format )
QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )
即使在实例化之后立即调用QImage::setColorTable()
,也不会分配新的缓冲区。另一方面,以下构造函数接收'const'ed数据缓冲区创建只读QImage对象,当调用任何非{const}成员函数QImage::setColorTable()
时,新缓冲区被分配并从原始缓冲区深度复制(我这样做)不想要。)
QImage ( const uchar * data, int width, int height, Format format )
QImage ( const uchar * data, int width, int height, int bytesPerLine, Format format )