QImage от HBITMAP

В моей программе только для Windows я использую стороннюю библиотеку, которая возвращает HBITMAP,

Есть ли способ инициализировать QImage из его содержимого, то есть преобразовать его в QImage?

4 ответа

Решение

Это способ сделать это для Qt 4 (QtGui):

QImage image(QPixmap::fromWinHBITMAP(hBitmap).toImage());

Это способ сделать это для Qt 5 (QtWinExtras):

QPixmap pixmap = QtWin::fromHBITMAP(hBitmap);
QImage image = pixmap.toImage();

// or

QtWin::imageFromHBITMAP(hdc, hBitmap, width, height)

ОК, это похоже на работу для меня:

QImage image(QPixmap::fromWinHBITMAP(hBitmap).toImage());

Qt5 без дополнений: поставьте перед вашим кодом

#include <QPixmap>
Q_GUI_EXPORT QPixmap qt_pixmapFromWinHBITMAP(HBITMAP bitmap, int hbitmapFormat=0);

и в вашей функции, например

QPixmap pixmap = qt_pixmapFromWinHBITMAP(LoadBitmap(uiID));

ура

Начиная с Qt 6.0, вы можете использовать статический QImage::fromHBITMAP(HBITMAP hbitmap):

Возвращает QImage , эквивалентный данному hbitmap.

HBITMAP не хранит информацию об альфа-канале.

В стандартном случае альфа-канал игнорируется и создается полностью непрозрачное изображение (обычно >format QImage::Format_RGB32).

Однако есть случаи, когда альфа-канал используется, например, для значков приложений или значков на панели задач. В этом случае следует вызвать reinterpretAsFormat(QImage::Format_ARGB32) для возвращаемого изображения, чтобы убедиться в правильности формата.

Эта функция была введена в Qt 6.0.

Другие вопросы по тегам