0

多かれ少なかれ次のようなコードをいくつか書きました。

QVector<QRgb> colorTable(256);
 QImage *qi = new QImage(lutData, imwidth,imheight, QImage::Format_Indexed8);

 while (index < 256)
 {
         colorTable.replace(index, qRgb(2552,255, 255));
         index++;
 }
 qi->setColorTable(colorTable);


 QPixmap p(QPixmap::fromImage(*qi,Qt::AutoColor));

したがって、lutData (unsigned char) は colorTable へのインデックスです。これはスニペットの最後の行でクラッシュし、実際の行は QX11PixmapData というソースが表示されないライブラリにあります。このクラッシュの原因は何ですか? それとも Qt のバグですか?

問題があれば、CentOS 5.5 を実行しています。

ありがとう!

4

1 に答える 1

3

呼び出したQImageコンストラクターは次のとおりです。

QImage::QImage ( const uchar * data, int width, int height, Format format )

これには、スキャンラインデータを32ビットで整列させる必要があります。したがって、それがあり、十分なバイトが含まれていることを確認してください。または、次を使用できます。

QImage::QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )

これにより、32ビットで整列せずにスキャンラインごとにバイトを指定できます。したがって、次のように呼び出すことができます。

QImage *qi = new QImage(lutData, imwidth, imheight, imwidth, QImage::Format_Indexed8);

インデックスカラー画像の場合、スキャンラインのバイト数は幅と同じです。

于 2011-04-01T17:27:02.903 に答える