[c++] als png datei Speichern

Faller

Erfahrenes Mitglied
Ich suche nach einer Möglichkeit ein screenshot denn ich durch c++ aufgenommen habe als png zuspeichern. Bin auf sehr viele unterschidliche Möglichkeiten gestossen Sreenshots zu erstellen aber die Sicherung der Daten erfolge nazu immer als bmp datei.

Kennt jemand einen c++ Quellcode wo ein Png Datei erstellt wurde und Bilddaten abgelegt werden

Oder kennt jemand Internetseiten/Quellcode wo Bilddaten umgefandelt werden (keine fertigen Programme)

Kennt jemand Internet seiten wo der Aufbau von Png Datein aufgelistet werden.

Ich hoffe das mir jemand helfen kann.
Mfg Faller
 
Für welches Betriebssystem? Bei Windows geht's z.B. mit GDI+, ansonsten können entsprechende png-Libs verwendet werden.

Gruß
MCoder
 
Windows mit Visual 6.0

Was für Libs
Und im GDI + Fand ich bis jetze nur eine Funktion die nur als
zitat Dukumentation:
"
Functions that begin with D3DXLoadxxx support all of the formats listed. Functions that begin with D3DXSavexxx support .bmp, .dds, and .dib formats. "
speichern kann.
Also wenn jemand einer andere Funktion kennt.
 
Zuletzt bearbeitet:
Hallo,

bei Windows würde ich dir empfehlen, GDI+ zu nehmen. Ich habe mal ein einfaches Beispiel, das eine Bitmap (*.bmp) lädt und als *.png abspeichert. GDI+ kann (ausser BMP) auch noch die Formate JPG, GIF, TIFF.
C++:
#include <windows.h>

#ifdef _WIN64
typedef unsigned __int64 ULONG_PTR;
#else
typedef unsigned long ULONG_PTR;
#endif
#include "gdiplus.h"                 // ggf. Pfad angeben

#pragma comment (lib, "Gdiplus.lib") // ggf. Pfad angeben

BOOL GetEncoderClsid(wchar_t *wchMimeType, CLSID& clsidEncoder);

int main()
{
    Gdiplus::GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR                    gdiplusToken;
    Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

    HBITMAP hbm = (HBITMAP)LoadImage( NULL,
                                      "bild.bmp",
                                      IMAGE_BITMAP,
                                      0,
                                      0,
                                      LR_LOADFROMFILE );

    if( hbm )
    {
        Gdiplus::Bitmap *pBitmap = Gdiplus::Bitmap::FromHBITMAP(
                                   hbm, (HPALETTE)GetStockObject(DEFAULT_PALETTE) );

        if( pBitmap )
        {
            CLSID clsidEncoder; 

            if( GetEncoderClsid(L"image/png", clsidEncoder) )
            {
                pBitmap->Save(L"bild.png", &clsidEncoder, NULL);
            }

            delete pBitmap;
        }

        DeleteObject(hbm);
    }

    Gdiplus::GdiplusShutdown(gdiplusToken);
    return 0;
}


BOOL GetEncoderClsid(wchar_t *wchMimeType, CLSID& clsidEncoder)
{
    UINT uiNum   = 0;
    UINT uiSize  = 0;
    BOOL bOk     = FALSE;
    
    Gdiplus::ImageCodecInfo* pImageCodecInfo = NULL;
    Gdiplus::GetImageEncodersSize(&uiNum, &uiSize);

    if( uiSize > 0 )
    {
        pImageCodecInfo = (Gdiplus::ImageCodecInfo *)new char[uiSize];
   
        if( pImageCodecInfo )
        {
            Gdiplus::GetImageEncoders(uiNum, uiSize, pImageCodecInfo);

            for( UINT i = 0; i < uiNum; i++ )
            {
                if( wcscmp(pImageCodecInfo[i].MimeType, wchMimeType) == 0 )
                {
                    clsidEncoder = pImageCodecInfo[i].Clsid;
                    bOk = TRUE;
                }
            }
        }
        
        delete pImageCodecInfo;
    }        
   
   return bOk;
}
Gruß
MCoder
 
Thx genau sowas suche man danke
aber diese header datei hab ich noch nie gesehen
gdiplus.h
wo kann man diese downloaden oder herbekommen

thx nochma Mcoder
mfg Faller

OK ich versuche nun seit 2 std dieses sdk gdi pluss zum laufen zu bekommen
ich hab 3 datein gedownloadet von http://www.windoof.com
gdipluss.dll und 2 txt datein
So nun frage ist das das richtige und wie binde ich diese dll ein.
ein Tutorial wäre sehr hilfreich.
thx
 
Zuletzt bearbeitet:
Hallo Faller,

GDI+ ist Bestandteil des MS-Platform-SDK. Wenn du noch mit VS6 arbeitest, wirst du dir wohl mal das aktuelle SDK herunterladen müssen:
http://www.microsoft.com/downloads/...E2-3B89-47E3-8EB7-1F2BE6D7123A&displaylang=en

Gruß
MCoder

//Edit: Hab gerade deine Ergänzung gelesen. Du hast wahrscheinlich das Redistributable herunterladen. Das bracht man nur, wenn das Zeug auf Win 2000 laufen soll. Für die Entwicklung brauchst du das SDK, siehe oben.
 
Zuletzt bearbeitet:
Zurück