Frage zu Image objekt und GDI+
-
Hallo,
ich bastle gerade an einem simplen Mal-PRG wo man einen
markierten Bereich unter Angabe des Drehpunkts frei
(360 Grad) drehen lassen kann.Zu diesem Zwecke ist die Gdiplus::Graphics::DrawImage Methode
(die wo man die Eckpunkte angibt) sehr nützlich.
Diese Methode braucht aber ein Objekt vom Typ Gdiplus::Image.
Ich habe folgendes Problem, die Klasse Gdiplus::Image hat
zwei Konstruktoren die beide die Angabe eines Pfads be-
nötigen.
Momentan mache ich das so, ich mache aus dem markierten
Bereich ein Bitmap und speichere es. Dann lade ich das
Bitmap mittels des erwähnten Konstruktors und stelle es
verdreht dar. Nun möchte ich mein 'temp.bmp' löschen,
doch das geht nicht, weil 'ein anderes Prg das nutzt'.
Selbst wenn ich mein Visual C++ 2003 schliesse kann ich
die erwähnte 'temp.bmp' nicht löschen, erst ein Neustart
macht das möglich.Meine Frage daher, wie kann ich die daten eines CBitmap's
in einem Gdiplus::Image kopieren, ohne den umständlichen Weg
'Datei speichern/laden'?????????????????????????????????????

Im vorraus vielen Rank
Rob
-
Es gibt mehrere Image-Klassen, schau mal welche spezialisierten es da noch gibt:
Bitmap und CachedBitmap.
Image und Bitmap sind für deine Zwecke nicht geeignet, da sie zu viel des Guten können. CachedBitmap hat den Vorteil das es sehr schnell ist, weil es sich nicht um Screen-Umstellungen durch den User kümmert.
Was ich nicht ganz verstehe, ist warum du überhaupt eine Image-Klasse benutzen willst? Image-Klassen sind eigentlich nur dafür da, um diese Daten persistent zu machen oder halt persistente Daten in den Speicher zu laden. Aber für reine Laufzeitarbeiten eher nicht.
Geht es dir nur um das Zeichnen im Speicher ohne diese auf Festplatte speichern/laden zu wollen? Dann brauchst du doch nur einen Gdiplus::Graphics-Kontext bzw. du kannst mehrere solcher Kontexte instanzieren und frei auf einem anderen HDC platzieren.
-
Hi,
es geht mir um die Gdiplus::Graphics Methode DrawImage. Diese lässt
sich super für die Rotation nutzen. Im Prinzip geht es mir um
Rotation. Danke für deine Antwort.//- Gdiplus::Point destPoints[3]; Gdiplus::Point* pdestPoints; Gdiplus::Image image(L"temp.bmp"); Gdiplus::Graphics g(m_hWnd); ErrechneWinkel(); m_dWinkel+=270; if(m_dWinkel>=360) m_dWinkel-=360; ErrechneKoordinaten(destPoints); g.DrawImage((Gdiplus::Image *)&image, pdestPoints, 3);
-
Image lädt bei _jedem_ Zeichenvorgang die Daten deiner BMP-Datei neu. Das ist sehr uneffektiv, wenn du Performance haben willt.
Ich habe dich so verstanden, das du nur wegen der Rotation deine Grafik als Datei speicherst? Finde ich irgendwie sinnlos... kann aber sein, das ich dich total falsch verstanden habe.
Gut, zu deinem eigentlichen Problem: die Datei wird nicht geschlossen, wenn sich deine Anwendung beendet? Eine Hintergrund wäre das du vielleicht die GDI+ nicht deinitialisiert hast?
GdiplusShutdown(gdiplusToken);