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.