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 meinstDANKE!!!!
-
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);