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()QImage が内部の detach() 関数によってコピーするための新しいイメージ バッファを割り当てる非 const メンバー関数です。

ctor がその ctor の引数としてカラー テーブルを受け入れることができるこの種の問題に対する Qt3 サポートがあることがわかりましたが、> 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」データバッファーを受け取る次のコンストラクターは、新しいバッファーが割り当てられ、非 const メンバー関数QImage::setColorTable()が呼び出されたときに元のバッファーからディープコピーされる読み取り専用の QImage オブジェクトを作成します (それは望ましくありません)。

    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