2

我正在尝试创建包装由 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 )
4

0 回答 0