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!





  • 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?


Anmelden zum Antworten