2013-07-04 9 views
11

Ora che QPixmap :: toWinHBITMAP() è stato deprecato, non riesco a trovare un modo per ottenere un HBITMAP da un QPixmap (o QImage).Ottenere un HBITMAP da un QPixmap in QT5 (Windows)

Googling, ho trovato una funzione chiamata qt_pixmapToWinHBITMAP() che sembra farebbe quello che mi serve, ma non riesco a trovare quale modulo dovrei abilitare -se qualsiasi- nel mio file .pro o quale header dovrei includere a usalo o forse qualcos'altro

Il motivo per cui ho bisogno di un HBITMAP è di creare un video usando VFW. Certo, mi piacerebbe essere in grado di farlo usando solo Qt. C'è il modulo QtMultimedia, ma per quanto posso dire non esporta video, quindi credo di essere bloccato con l'uso di Windows API direttamente.

Qualsiasi aiuto sarebbe apprezzato.

+0

Ciao, hai trovato qualche alternativa? Ho appena effettuato l'aggiornamento a Qt5 e ho affrontato lo stesso problema con le mie chiamate 'fromWinHICON' e 'fromWinHBITMAP' .. – Dalamber

risposta

10

L'ho trovato!

Tutto quello che serviva era QtWinExtras

http://qt.gitorious.org/qt/qtwinextras

Il mio codice ora simile a questa:

#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); 

Non so se ho bisogno di includere tutte queste intestazioni, ma funziona per me.

4

QtWinExtras non è necessario. Basta usare qt_pixmapToWinHBITMAP(), come fa QtWinExtras.

Dichiarare subito dopo il vostro include:

e basta usarlo. Ad esempio, se si desidera recuperarlo dalle risorse QRC:

QPixmap pixmap(":/image.bmp"); 
HBITMAP hBitmap = qt_pixmapToWinHBITMAP(pixmap);