dc2bitmap direkt in ein Image bzw. CImage speichern



  • Sorry für die Anfängerfrage, aber in diesem Thread aus der FAQ

    http://www.c-plusplus.net/forum/viewtopic.php?t=39400

    habe ich die Funktion dc2bitmap gefunden, die einen dc als bitmap auf der Festplatte speichert. Nun würde ich den dc gerne direkt in ein Image oder CImage Objekt speichern statt ihn zuerst auf Festplatte zu speichern und dann wieder zu laden.

    Ich habe mich natürlich schon selbst damit versucht, aber bei den ganzen Variablen der Funktion verliere ich als Anfänger den Überlick. 😕

    Welche Variablen muss ich da ansprechen? Meine Vermutung lag beim HBITMAP, aber reicht das allein schon?



  • Mit dem CImage-Objekt kenne ich mich nicht aus.
    Falls du das Image-Objekt von GDI+ meinst, dann nimm einfach das Bitmap-Objekt von GDI+ - die Bitmap-Klasse ist abgeleitet von Image und hat noch Bitmap::FromHBITMAP 😉



  • Danke. Das habe ich sogar schonmal versucht, aber die Bitmap Klasse braucht bei Bitmap::FromHBITMAP noch einen HPALETTE Parameter. Wie bekomme ich die richtige Palette aus dem hdc?

    Ich habe es mal so versucht, aber dies scheint nicht zu klappen:

    CDC* cdc = CDC::FromHandle(hdc);
    CPalette* Palette =cdc->GetCurrentPalette();
    Bitmap Bitmap.fromHBITMAP(aBmp, (HPALETTE) Palette);
    


  • Ich meine man kann für die Palette auch einfach NULL übergeben...



  • Ich habe es jetzt anders gelöst. Langsam beginne ich diesen ganzen Wirrwarr um DCs und Handles zu verstehen. Der ganze Code zum Speichern eines beliebigen Fensterinhalts in ein Image beschränkt sich nun (mit Parametern aus dc2bitmap) auf:

    CImage Test;
    Test.Create(width,height,32);
    HDC hdc3 = Test.GetDC();
    BitBlt(hdc3,0,0,width,height,hdc,0,0,SRCCOPY);
    

Log in to reply