2


0

QBitmapからのQPixmap

代わりに、http://qt.nokia.com/ [qt]ライブラリを使用するようにwin32 APIグラフライブラリを変換しています。 私はXPでのコンパイルに成功しました。新しく改善されたグラフ作成ライブラリの真のクロスプラットフォーム機能をテストするために、Ubuntu(9.10)でビルドしようとしています。

いくつかのクラスはWindows固有であるため、いくつかのコンパイル時エラーが発生しました。コードを再度変更する必要があります。

次のようなコードのセクションがあります。

//original code (compiled succesfully under Windows)
unsigned short fill[4];
fill[0] = (unsigned short)(pattern & 0xF000) >> 8;
fill[1] = (unsigned short)(pattern & 0x0F00) >> 4;
fill[2] = (unsigned short)(pattern & 0x00F0);
fill[3] = (unsigned short)(pattern & 0x000F) >> 4;

HBITMAP hbmp = CreateBitmap(4, 4, 1, 1, fill);
QPixmap texture;
texture.fromWinHBITMAP(hbmp);
DeleteObject(hbmp);
brush1.setTexture(texture);


//Code to compile on Ubuntu
unsigned short fill[4];
fill[0] = (unsigned short)(pattern & 0xF000) >> 8;
fill[1] = (unsigned short)(pattern & 0x0F00) >> 4;
fill[2] = (unsigned short)(pattern & 0x00F0);
fill[3] = (unsigned short)(pattern & 0x000F) >> 4;

QBitmap bmp(4, 4, fill);  //Is this correct ?
QPixmap texture;
texture.fromWinHBITMAP(bmp);   // How to convert QBitmap to QPixmap ?
//DeleteObject(hbmp);          // No longer required (local object scope)
brush1.setTexture(texture);

2 Answer


2


QBitmapはピクセルあたり1ビットの画像で、QPixMapから派生します。 つまり、brush1に直接渡すことができます。 それを使ってこれ以上何もする必要はありません(正しく入力する以外):

QBitmap bmp = QBitmap::FromData( QSize( 4, 4 ), fill );
brush1.setTexture(bmp);

これは、他のプラットフォームと同じようにWindowsでも動作するはずです …​

編集:上記の両方のケースで、4つのショートパンツを持っていることに意味がないことに注意する価値があります。 1ショートは16ビットです。 4 x 4 1ビットピクセルは16ビットなので、とにかく最初のショートのみを読み取ります…​.


1


QBitmapはQPixmapであり、このクラスを継承します。