PNGs mit GDI speichern
-
Weiß jmand wie ich PNGs speichern kann, und das mit der GDI, nicht GDI+!?
GDI, weil ich mit GDI+ z.B. keine HBITMAPs behandeln kann, k.p. warum!
-
AFAIK gibts PNG erst bei der GDI+. Nicht bei der GDI ohne +.
HBITMAPs, die nicht funktionieren? Eher unwahrscheinlich, liegt wohl eher daran, dass du einen Fehler gemacht hast. Beschreib mal, wo was nicht funktioniert!
-
Oder wie könnte ich mit GDIplus aus einem HDC ein PNG erstellen und speichern?
EDIT::::::::::::::::::::::::::::::::::::::.
Ich habe bei der MSDN nichts darüber gefunden, darum dachte ich eigentlich das das auch nicht geht!
-
Suchst du vielleicht sowas:
http://msdn.microsoft.com/en-us/library/ms536314(VS.85).aspx
?
-
Ja, das sollte reichen! aber was genau ist jetzt diese HPALETTE? Bzw was mache/verwende ich das/damit?
-
Also, ich habe es mal versucht:
image = Bitmap::FromHBITMAP(hbNewScreen, NULL);
Aber nun sagt er mir das:
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_GdipFree@4" in Funktion ""public: static void __cdecl Gdiplus::GdiplusBase::operator delete(void *)" (??3GdiplusBase@Gdiplus@@SAXPAX@Z)".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_GdipAlloc@4" in Funktion ""public: static void * __cdecl Gdiplus::GdiplusBase::operator new(unsigned int)" (??2GdiplusBase@Gdiplus@@SAPAXI@Z)".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_GdipCreateBitmapFromHBITMAP@12" in Funktion ""public: __thiscall Gdiplus::Bitmap::Bitmap(struct HBITMAP__ *,struct HPALETTE__ *)" (??0Bitmap@Gdiplus@@QAE@PAUHBITMAP__@@PAUHPALETTE__@@@Z)".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_GdipDisposeImage@4" in Funktion ""public: virtual __thiscall Gdiplus::Image::~Image(void)" (??1Image@Gdiplus@@UAE@XZ)".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_GdipCloneImage@8" in Funktion ""public: virtual class Gdiplus::Image * __thiscall Gdiplus::Image::Clone(void)" (?Clone@Image@Gdiplus@@UAEPAV12@XZ)".??
-
hast du die gdiplus auch mitgelinkt?
-
Das war der fehler Danke!
-
So, der letzte Fehler hoffe ich^^
image = Bitmap::FromHBITMAP(hbNewScreen, NULL); GetEncoderClsid("image/png", &encoderClsid); image->Save(L"Bird.png", &encoderClsid, NULL);
Und der meint:
c:\dokumente und einstellungen\dustin\eigene dateien\visual studio 2008\projects\rek04\rek04\main.cpp(163) : error C2664: 'GetEncoderClsid': Konvertierung des Parameters 1 von 'const char [10]' in 'const WCHAR *' nicht möglich
Wenn ich es so mache:
GetEncoderClsid(L"image/png", &encoderClsid);
Dann bekomme ich soger 2 Fehler, darunter ein Linker Error
HEHE, hat sich erledigt, funktioniert jetzt einwand frei!
-
Showball schrieb:
Wenn ich es so mache:
GetEncoderClsid(L"image/png", &encoderClsid);
Dann bekomme ich soger 2 Fehler, darunter ein Linker Error
und die verheimlichst du lieber anstatt sie in deinem Post mitanzugeben?
-
Hab den Fehler bereits gefunde, ich dachte die Funktion währe von GDI+ schon vorgegeben ...
-
Weiß jemand wie ich das Bil Scalieren kann? Also, ich habe das bisher mit StrechBlt gemacht, aber sieht nicht sehr schön skaliert aus. Kann GDI+ schöner Scalieren, so dass mana uch noch erkennt was auf dem Bild ist?
ich habe das mal so probiert:
Graphics * graphics = new Graphics(memoryDC);
graphics->DrawImage(image, 0, 0, 640, 400);Der Grafics Device ist ja auf mein memoryDC gerichtet, das heißt, wenn ich drawImage benutze, sollte es a auch in den memoryDC gemalt werden, aber das tut es nicht, leider
Weiß jemand wie ic das mit dem Scalieren machen kann?