Подтвердить что ты не робот

Получение HBITMAP из QPixmap в QT5 (Windows)

Теперь, когда QPixmap:: toWinHBITMAP() устарел, я не могу найти способ получить HBITMAP из QPixmap (или QImage).

Googling, я нашел там функцию, называемую qt_pixmapToWinHBITMAP(), которая, похоже, будет делать то, что мне нужно, но я не могу найти, какой модуль я должен включить - в любом случае - в мой .pro файл или какой заголовок, который я должен включить для использования это или, возможно, что-то еще.

Мне нужна HBITMAP, чтобы создать видео с помощью VFW. Конечно, я бы с удовольствием мог это сделать, используя только Qt. Там модуль QtMultimedia, но насколько я могу сказать, он не экспортирует видео, поэтому я думаю, что я застрял с использованием api windows напрямую.

Любая помощь будет оценена.

4b9b3361

Ответ 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);