CImage Klasse verwenden



  • Hallo,

    ich möchte beginnen mein .NET Bildbearbeitungsprogramm in C++ nachzubilden.
    Mit MFC habe ich schon einen EMF-Betrachter realisiert welcher die GDI+ zum speichern des EMF als BMP verwendet; nun wollte ich die Klasse auch hier einsetzen. Ich versuchte für den Anfang einfach mal ein Bild zu laden und anzuzeigen (was später ja in die OnDraw-Methode kommt) doch es funktioniert irgendwie nicht. Was mache ich da falsch?

    void CmfcBildbearbeitungView::OnFileOpen()
    {CImage img;
    	CFileDialog oeffnenDlg(true, NULL, NULL, NULL, "Alle Dateien|*.*||");
    
    	if (oeffnenDlg.DoModal()==IDOK)
    	{ 
    
    	img.Load((LPCTSTR)oeffnenDlg.GetPathName());
    
    	CRect originalclientrect;
    	GetClientRect(&originalclientrect);
    	HDC dc=::GetWindowDC(CmfcBildbearbeitungView::m_hWnd);
    
    		img.Draw(dc, originalclientrect.Width(), originalclientrect.Height());
    
    	}
    }
    

    Vielen Dank!



  • Was heißt denn "funktioniert irgendwie nicht"?



  • Ja das habe ich ganz vergessen zu beschreiben; das Bild erscheint einfach nicht. Gibt aber keine Exception.



  • Schau mal in die FAQ.



  • Wo steht dort mehr darüber? Habe nichts gefunden (ausser andere Probleme mit CImage).

    Danke



  • Was genau hat denn eigentlich CImage mit GDI+ zu tun? Ich dachte da gäbe es nur die abstrakte Klasse Gdiplus::Image und dann sowas wie Gdiplus::Bitmap.
    Falls du dann GDI+ in deinem Programm einsetzen möchtest, musst du natürlich darauf achten, die Bibliothek zu initialisieren (Gdiplus::GdiplusStartup usw.).

    Grüße,
    Michael


  • Mod

    Decimad schrieb:

    Was genau hat denn eigentlich CImage mit GDI+ zu tun? Ich dachte da gäbe es nur die abstrakte Klasse Gdiplus::Image und dann sowas wie Gdiplus::Bitmap.
    Falls du dann GDI+ in deinem Programm einsetzen möchtest, musst du natürlich darauf achten, die Bibliothek zu initialisieren (Gdiplus::GdiplusStartup usw.).

    1. CImage ist eine ATL Klasse, die einiges aus GDI+ kapselt.
    2. CImage behandelt GDI+ Startup und Release von selbst und man muss sich nicht drum kümmern!



  • Den Wust soll nochmal einer verstehen... Warum kapselt MFC oder ATL nochmal etwas, das schon in Gdi+ gekapselt ist? Oder ist Gdi+'s Image über CImage implementiert? 🙂 Ich blick da echt nicht mehr durch... Oder war CImage früher nicht über Gdi+ implementiert?


  • Mod

    IMHO hat CImage immer schon GDI-Plus mit verwendet.
    Allerdings geht es hier nicht um die Kappselung der GDI+ Image's alleine.

    Dieses Ding ist einfach extrem universell und behandelt fast alles was eben mit Bildchen zu tun hat und das eben als gute Brücke zum guten alten GDI ;).
    GDI+ kommt in dieser Klasse auch gar nicht so oft zum Einsatz... 😉

    Denk Sie Dir als Klasse der Kategorie "Use: Load,Draw,Drop and don't think about how... " 🕶



  • Hrmmm, okay, dankeschön für die Klärung 😉 Ich benutze aus Protest einfach Gdi+ direkt! Hah! 🙂



  • GDI+ direkt ist doch sicherlich, wie GDI, nicht objektorientiert und wird bei MFC darum gekapselt?

    Ich bin auf die Klasse gestossen als ich ein Bildchen speichern wollte aus einem EMF und da kam sie mir so bekannt vor von C#, es lässt sich mit extrem geringem Aufwand fast jedes (wichtigste) Dateiformat - gif, png, emf (natürlich eingebettetes Bitmap und nicht vektorisiert) etc. erstellen.
    Um ein Bild in der Helligkeit zu verändern kenne ich keine Funktion da habe ich einen Code gefunden welcher unsafe verwendet aber sehr schnell ist. Kann GDI+ das gar nicht von sich aus (C# verwendet ja anscheinend genau die selben Methoden).

    Allerdings weiss ich nun noch immer nicht genauer weiter wie man unter C++ diese Klasse verwendet 😉 In der FAQ unter MFC hab ich's nicht gefunden (Grafik...).


  • Mod



  • C. M. Obrecht schrieb:

    Wo steht dort mehr darüber? Habe nichts gefunden (ausser andere Probleme mit CImage).

    Danke

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-54279.html

    😡



  • Martin Richter schrieb:

    Du irrst GDI+ ist objektorientiert:
    http://msdn.microsoft.com/en-us/library/ms533958(VS.85).aspx

    Interessant! Wie geht denn sowas unter C oder Assembler (WinAPI ohne MFC)?

    Unix-Tom schrieb:

    C. M. Obrecht schrieb:

    Wo steht dort mehr darüber? Habe nichts gefunden (ausser andere Probleme mit CImage).

    Danke

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-54279.html

    😡

    // Picture (Implementations) Version 1.00
    Danke, das habe ich schon gefunden; ich fand hier echt nur die Implementation einer eigenen Picture-Klasse aber keine Tips zur Verwendung der CImage! In den msdn suchte ich auch schon (vergeblich, hab's wahrscheinlich einfach nicht gefunden).


Anmelden zum Antworten