HDC umwandeln



  • Ahoi,

    Wie kann ich einen Speicherkontext in einem Bitmaphandle speichern

    (HDC -> HBITMAP)

    vielen dank !!!



  • Hast du das schon probiert zu casten?

    Mfg Ominion



  • so etwa, sieht ein bisschen zu einfach aus...: 🤡 🤡 🤡

    HDC hdcMem;
    HBITMAP hbmpDest;

    // Ini's....
    // ...
    // ...
    hbmpDest = (HBITMAP)hdcMem;



  • PlzGiveMeAnAnswer schrieb:

    Ahoi,
    Wie kann ich einen Speicherkontext in einem Bitmaphandle speichern
    (HDC -> HBITMAP)
    vielen dank !!!

    Wozu soll der Blödsinn denn gut sein?



  • Ich muss in meiner App die Bitmap immer dem aktuellen Fenster anpassen, das wiederrum Fullscreen läuft, und wenn sich die Auflösung ändert .... du weiß schon



  • PlzGiveMeAnAnswer schrieb:

    so etwa, sieht ein bisschen zu einfach aus...: 🤡 🤡 🤡

    Hast du das schon probiert, oder ist dir das zu einfach?

    Mfg Ominion



  • Bin grad dabei bekommst sofort n Feedback 😉 und danke für dein Hilfe 😉



  • BITMAP und Device-Context (DC) sind völlig unterschiedliche Dinge, da gibt es nichts zu casten. Willst Du ein Bild skaliert ins Fenster zeichnen - oder den aktuellen Inhalt des Fensters speichern?



  • Ich will den Inhalt eines Speicherkontextes in einem BitmapHandle speichern...

    also so in etwa:

    1. Bitmap laden
    2. mit Bitmap arbeiten (also in Kontext einsetzen, dann modifizieren; zB Größe)
    3. zurück in einen Handle (Typ HBITMAP)

    gez verstanden ... 🙄 ...und danke 😉



  • Bitmaps bekommst Du in einen Speicherkontext hinein (und wieder heraus) mit der Funktion SelectObject.



  • hab mal n Code gebastelt der euc das ganze näher bringt....:

    HBITMAP hbmpOldBitsSrc,
    					hbmpNewLayer,
    					hbmpLayer;
    			HDC		hdcBmpMemSrc,
    					hdcBmpMemDest;
    			BITMAP	bmInfo;
    
    			// 1. Bitmap-Resource laden:
    			hbmpLayer = LoadBitmap(g_hInst, MAKEINTRESOURCE(BMP_MAIN_MENU_BAR));
    			// 2. Bitmap-Infos einholen:
    			GetObject(hbmpLayer, sizeof(BITMAP), &bmInfo);
    			// 3. Speicherkontexte erstellen:
    			hdcBmpMemSrc = CreateCompatibleDC(NULL);
    			hdcBmpMemDest = CreateCompatibleDC(NULL);
    			// 4. geladene Bitmap in Speicherkontext einsetzen:
    			hbmpOldBitsSrc = (HBITMAP)SelectObject(hdcBmpMemSrc, hbmpLayer);
    			// 5. Bitmap vergrößern (neue Größe steht in iWndMainXSize und iWndMainYSize):
    			StretchBlt(hdcBmpMemDest, 0, 0, iWndMainXSize, iWndMainYSize,
    					   hdcBmpMemSrc, 0, 0, bmInfo.bmWidth, bmInfo.bmHeight, SRCCOPY);
    
    			/*
    
    				hdcBmpMemDest	->	hbmpNewLayer
    
    			ALSO:
    
    				HDC				->	HBITMAP
    
    			ABER WIE?
    
    			*/
    
    			// Weiter Arbeiten mit dem Bitmaphandle (hbmpNewLayer)
    			//
    			// ...
    			//
    
    			// 6. GDI-Clean Up:
    			DeleteObject(SelectObject(hdcBmpMemSrc, hbmpOldBitsSrc));
    			DeleteDC(hdcBmpMemSrc);
    			DeleteDC(hdcBmpMemDest);
    

    @mgs_
    kannst mir den Code mal vervollständigen ...wüsst nit genau wie du das meinst 😕

    DANKE!!!!



  • Auf die Schnelle, ohne es getestet zu haben:

    HBITMAP hbmpOldBitsSrc, hbmpNewLayer, hbmpLayer;
        HDC hdcBmpMemSrc, hdcBmpMemDest;
        BITMAP bmInfo;
    
        // 1. Bitmap-Resource laden:
        hbmpLayer = LoadBitmap(g_hInst, MAKEINTRESOURCE(BMP_MAIN_MENU_BAR));
    
        // 2. Bitmap-Infos einholen:
        GetObject(hbmpLayer, sizeof(BITMAP), &bmInfo);
    
        // 3. Speicherkontexte erstellen:
        hdcBmpMemSrc = CreateCompatibleDC(NULL);
        hdcBmpMemDest = CreateCompatibleDC(NULL);
    
        // 4. geladene Bitmap in Speicherkontext einsetzen:
        hbmpOldBitsSrc = (HBITMAP)SelectObject(hdcBmpMemSrc, hbmpLayer);
    
        // 4.1. Bitmap passender Größe für Zielkontext erzeugen
        hbmpNewLayer = CreateCompatibleBitmap(hdcBmpMemDest, iWndMainXSize, iWndMainYSize);
    
        // und in Zielkontext bringen
        HBITMAP hbmpDstOld = (HBITMAP) SelectObject(hdcBmpMemDest, hbmpNewLayer);
    
        // 5. Bitmap vergrößern (neue Größe steht in iWndMainXSize und iWndMainYSize):
        StretchBlt(hdcBmpMemDest, 0, 0, iWndMainXSize, iWndMainYSize,
                   hdcBmpMemSrc, 0, 0, bmInfo.bmWidth, bmInfo.bmHeight, SRCCOPY);
    
        // 5.1. neue Bitmap aus Zielkontext holen
        SelectObject(hdcBmpMemDest, hbmpDstOld);
    
        // Weiter Arbeiten mit dem Bitmaphandle (hbmpNewLayer)
        //
        // ...
        //
    
        // 6. GDI-Clean Up:
        DeleteObject(hbmpNewLayer);
        DeleteObject(SelectObject(hdcBmpMemSrc, hbmpOldBitsSrc));
        DeleteDC(hdcBmpMemSrc);
        DeleteDC(hdcBmpMemDest);
    

Anmelden zum Antworten