Получение HBITMAP из QPixmap в QT5 (Windows)
Теперь, когда QPixmap:: toWinHBITMAP() устарел, я не могу найти способ получить HBITMAP из QPixmap (или QImage).
Googling, я нашел там функцию, называемую qt_pixmapToWinHBITMAP(), которая, похоже, будет делать то, что мне нужно, но я не могу найти, какой модуль я должен включить - в любом случае - в мой .pro файл или какой заголовок, который я должен включить для использования это или, возможно, что-то еще.
Мне нужна HBITMAP, чтобы создать видео с помощью VFW. Конечно, я бы с удовольствием мог это сделать, используя только Qt. Там модуль QtMultimedia, но насколько я могу сказать, он не экспортирует видео, поэтому я думаю, что я застрял с использованием api windows напрямую.
Любая помощь будет оценена.
Ответы
Ответ 1
Я нашел его!
Все, что мне было нужно, это QtWinExtras
http://qt.gitorious.org/qt/qtwinextras
Теперь мой код выглядит примерно так:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <qt_windows.h>
#include <QtWinExtras/QWinFunctions>
...
QPixmap pix(QSize(w,h));
...
HBITMAP hbm = QWinExtras::toHBITMAP(pix);
...
::DeleteObject(hbm);
Я не знаю, нужно ли включать все эти заголовки, но это работает для меня.
Ответ 2
QtWinExtras не требуется.
Просто используйте qt_pixmapToWinHBITMAP(), как это делает QtWinExtras.
Объявите его вскоре после включения:
QT_BEGIN_NAMESPACE
Q_GUI_EXPORT HBITMAP qt_pixmapToWinHBITMAP(
const QPixmap &p, int hbitmapFormat = 0);
и просто используйте его.
Например, если вы хотите извлечь его из ресурсов QRC:
QPixmap pixmap(":/image.bmp");
HBITMAP hBitmap = qt_pixmapToWinHBITMAP(pixmap);