Aus HANDLE hBitmap GDI+ Image
-
Hallo,
über eine Twainschnittstelle bekomme ich ein Handle (HANDLE) auf ein Bitmap zurückgeliefert. Ich möchte das Bild über ein GDI+ Image in verschiedenen Formaten speichern. Das Speichern selbst ist kein Problem, nur wie macht man aus einem HANDLE ein GDI+ Image? Danke.
gruss
-
Für HBITMAP
Gdiplus::Bitmap::FromHBITMAP
für HICON
Gdiplus::Bitmap::FromHICON
-
Danke.
So hatte ich es schon einmal versucht. Allerdings funktioniert das Speichern dann nicht (egal wie ob über pbmp oder bmp)
Bitmap *pbmp = Bitmap::FromHBITMAP((HBITMAP)hBitmap, NULL); Bitmap bmp((HBITMAP)hBitmap, NULL); CLSID pngClsid; GetEncoderClsid(L"image/jpeg", &pngClsid); Status s = bmp.Save(L"c:\\bild.jpeg", &pngClsid, NULL); ASSERT( s == Ok); // Fehler
-
Was hat denn s für einen Wert?
Was bekommst du für einen Fehler?
-
Es könnte auch schon beim Erstellen der
Bitmap
was schief gegangen sein.GDI+ wirft nämlich keine Exceptions wenn was schief geht.
Check mal direkt nach dem Konstruktor obbmp.GetLastStatus() == Ok
.
-
@Hustbaer
Hier liegt der Hund begraben. GetLastStatus() hat einen Win32-Error. GetLastError() bringt 0. Vermutlich kann man dieses HANDLE des Twaintreibers nicht 1:1 zu einem HBITMAP machen?@Source2702
s ist "InvalidParameter: Indicates that one of the arguments passed to the method was not valid.". Ist dann wohl aber die Konsequenz des Win32-Errors oben.In einem anderen Modul hatte ich das mal mit CXImage und CxImage::CreateFromHANDLE() gemacht. Das funktionierte. Hier möchte ich aber auf CXImage verzichten und komplett auf GDI+ setzen.
Gruss
-
Kannst du ein MFC-CBitmap mit diesem Handle erstellen?
Eventuell testweise auch in einen DC zeichnen.
-
Hallo,
CBitmap *pBitmap = CBitmap::FromHandle((HBITMAP)hBitmap); Bitmap bmp (*pBitmap, NULL); Status status = bmp.GetLastStatus();
pBitmap ist ein gültiger Pointer.
status ist immer noch Win32-Error.Auf Codeproject ( http://www.codeproject.com/KB/GDI-plus/GdiPThumbnailsViewer.aspx?msg=926539 ) habe ich zumindest ein Beispiel gefunden. Mal sehen ...
Gruss