CDC als BMP speichern
-
Hi,
ich hab schon vergebens bei google.de gesucht und natürlich auch hier im Forum, doch das was ich suche, habe ich nicht gefunden.
Ich möchte einen CDC "einfach" als bmp speichern.
Doch irgentwie gab es immer nur Beispielcodes für nen "Screenshot".
Ich bin übre jede hilfe dankbar.
Gruß Var.
-
Vielleicht brint dich dieser Beitrag bei CodeProject ein wenig weiter:
http://www.codeproject.com/bitmap/drawing2bitmap.asp
Oder um es einfach zu sage, du nußt dir nur vom CDC die aktuelle Bitmap geben lassen, und kannst dann die OnSave Methoade des Beitrages Modifizieren.
Gruß Matthias
-
jau danke.
Also eine Funktion die mir den CDC in ein BMP kopiert habe ich nun.
Den DC den ich speichern will, ist der Fenster DC. Und diesen wollte ich speichern, wenn mein fenster ausgeblendet ist. Nur wemm das Fenster ausgeblendet ist, dann ist auf dem DC, der inhalt vom Übergeordnetem Fenster.
Frage: Wie komme ich an meinen DC inahlt rozdem dran, wenn das Fenster versteckt ist?
Ich hab schon Probiert, mir einen Kompatiblen DC zu erstellen, aber dann wird alles schwarz.
-
Wenn Du schon den Fensterinhalt als Bitmap speichern willst (warum auch immer?), dann mach das doch bevor dein Window minimiert wird (WM_MINIMIZE). Oder spricht was gegen diese lösung?
Gruß Matthias
-
Das Problem ist denke ich nicht der DC, sondern dass in dem DC keine eigene Bitmap drinnen steckt, sondern die Bitmap vom "Bildschirm" verwendet wird. Normalerweise kann man ein Fenster aber "ausdrucken", guck dir einfach mal die Doku zu WM_PRINT an.
Dazu musst du eben einen eigenen DC anlegen, da eine memory bitmap reinstecken, und dann dem Fenster das WM_PRINT schicken. Danach solltest du in der memory bitmap den Inhalt des Fensters haben, so wie es ihn auch auf den Schirm zeichnen würde.Habs nicht ausprobiert, aber ein Arbeitskollege hat mal was ähnliches mit WM_PRINT gemacht, und das hat damals funktioniert.
-
das mitdem Print ist eine gute Idee, aber irgentwie komme ich damit nicht klar.
Müsste es nicht auch gehen, wenn ich meine OnDraw Funktion mit einem eigenen DC aufrufe?
Ich hab so so etwas mal probiert, aber dann kommt immer ein komplett schwarzes Bitmap raus.
void Screen() { CDC * pDC = GetDC(); CDC memDC; memDC.CreateCompatibleDC(pDC); OnDraw(& memDC, CRect(0,0,0,0), CRect(0,0,0,0)); PrintMyDC(memDC->m_hDC); //diese Funktion speichert des DC als File ReleaseDC(pDC); }Das müsste doch so gehen, oder? Warum ist mein memDC komplett schwarz, was mache ich falsch?
Gruß Var
-
CreateCompatibleDC macht dir nen hübschen DC mit einer 1x1 Pixel monochrom Bitmap

MSDN schrieb:
A memory DC exists only in memory. When the memory DC is created, its display surface is exactly one monochrome pixel wide and one monochrome pixel high. Before an application can use a memory DC for drawing operations, it must select a bitmap of the correct width and height into the DC. To select a bitmap into a DC, use the CreateCompatibleBitmap function, specifying the height, width, and color organization required.
Steht alles in der MSDN. Ich hab ja auch geschrieben...
ich schrieb:
Dazu musst du eben einen eigenen DC anlegen, da eine memory bitmap reinstecken, und dann
Nen?

-
au a, wunderbar, nun funktioniert es.