Feedback

C++ - GDI+: Speichern eines PNG

Veröffentlicht von am 4/6/2008
(1 Bewertungen)
Zeigt wie man GDI+ initialisiert und ein Bitmap als PNG abspeichert
#include <windows.h>
#include <gdiplus.h>
#include <stdio.h>
using namespace Gdiplus;

#pragma comment(lib, "gdiplus.lib")

int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
        UINT  num = 0;          // number of image encoders
        UINT  size = 0;         // size of the image encoder array in bytes

        ImageCodecInfo* pImageCodecInfo = NULL;

        GetImageEncodersSize(&num, &size);
        if(size == 0)
        return -1;  // Failure

        pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
        if(pImageCodecInfo == NULL)
        return -1;  // Failure

        GetImageEncoders(num, size, pImageCodecInfo);

        for(UINT j = 0; j < num; ++j)
        {
                if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
                {
                        *pClsid = pImageCodecInfo[j].Clsid;
                        free(pImageCodecInfo);
                        return j;  // Success
                }
        }

        free(pImageCodecInfo);
        return -1;  // Failure
}

INT main()
{
        GdiplusStartupInput gdiplusStartupInput;
        ULONG_PTR gdiplusToken;
        GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);



        { // Diese Klammer ist erforderlich weil der Destruktor von bmp vor GdiplusShutdown
                // aufgerufen werden muss
                Bitmap bmp(200,200);

                for(int y = 0; y < bmp.GetHeight(); y++)
                for(int x = 0; x < bmp.GetWidth(); x++)
                {
                        bmp.SetPixel(x,y, Color(255, 255,0, 0));
                }



                // Save the altered image.
                CLSID pngClsid;
                GetEncoderClsid(L"image/png", &pngClsid);
                bmp.Save(L"Test.png", &pngClsid, NULL);
        }




        GdiplusShutdown(gdiplusToken);


        return 0;
}
Abgelegt unter PNG.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!