QPixmap из QBitmap - PullRequest
       23

QPixmap из QBitmap

2 голосов
/ 16 февраля 2010

Я конвертирую графическую библиотеку win32 для использования вместо нее библиотеки qt . Мне удалось успешно скомпилировать на 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 ]

2 голосов
/ 16 февраля 2010

QBitmap - это изображение размером 1 бит на пиксель, полученное из QPixMap. Другими словами, вы можете передать его непосредственно в brush1. Больше не нужно ничего делать (кроме правильного заполнения), например:

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

Это должно работать так же хорошо под окнами, как и на любой другой платформе ...

Изменить: Стоит отметить, что в обоих ваших случаях выше нет смысла иметь 4 шорты. 1 короткое - 16 бит. 4 x 4 1-битных пикселя - 16-битные, так что в любом случае он читает только первый короткий ....

1 голос
/ 16 февраля 2010

QBitmap - это QPixmap, он наследует этот класс.

...