Mehrere Bilder zusammenfügen (CBitmap)
-
Hallo liebe Community
ich habe ein kleines Problem, was für Euch Profis aber sicher eine Kleinigkeit ist!
Würde gerne 2, oder mehr Bitmaps (aus Dateien) übereinander legen um daraus ein Bild zu machen. Das ganze muss aber intern geschehen, dass heisst es läuft völlig ohne GUI ab.
Habe jetzt auch schon längere Zeit nicht mehr mit der MFC gearbeitet und bin schon etwas sehr eingerostet.
In meinem jugendlichen Wahn stelle ich mir das wie folgt vor:// LADEN DER BITMAPS UND HANDEL ZUWEISEN HBITMAP hBMP1 = (HBITMAP) LoadImage(NULL,(LPCTSTR)"bild1.bmp" , IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); . // ERSTELLEN EINES CDC für jedes Bild HDC hdc1 = CreateCompatibleDC(NULL); // Oder vielleicht besser? HDC hdc1; CreateCompatibleDC(hdc1); // Dann über SelectObject jedem "Device" ein Bitmap zuweisen SelectObject(hdc1,hBMP1); // Einen "Speicher Device" für alle Bilder erstellen HDC hdcSave; CreateCompatibleDC(hdcSave); // und über BitBlt alle Bilder aus ihren Devices in den Speicher Device kopieren BitBlt(hdcSave,0,0,136,145,hdc1,0,0,SRCCOPY); BitBlt(hdcSave,0,0,136,145,hdc2,0,0,SRCCOPY);
Es muss vielleicht noch erwähnt werden, dass alle Bitmaps Deckungsgleich sind (also gleich groß).
Soweit denke ich, dass ich nicht sooooo weit weg von der richtigen Lsg. liege. (Sicherlich werdet Ihr mich aber schnell eines besseren belehren
Falls dies aber richtig sein sollte, geht es jetzt noch darum den Inhalt aus hdcSave unter einem neuen DateiNamen auf Platte zu schreiben.
Deswegen würde ich mich hier über jeden Post sehr freuen, der mir weiter helfen könnte.Vielen Dank und einen schönen Abend
Paulchen26
-
Dazu musst Du eine Farbe bestimmen, die transparaent ist, oder wie stellst Du Dir das vor?
Dann wird die entsprechende Bitmap mit einer ROP-Operation in eine bestehende Bitmap kopiert.Siehe auch:
http://support.microsoft.com/kb/q89375/
-
Mich würde auch interessieren was du mit "übereinander legen" meinst. Ich hab mal ein einem ähnlichen Problem gearbeitet. Da gings um medizinische Bilder (Röntgen, MRT, ...). Da wurde mit Masken gearbeitet. Die Masken wurden über Kantenoperatoren berechnet und die Flächengebilde, die dann da raus kamen, wurden mit dem Bild gemischt. Das war eine reine Mittelwertbildung der RGB-Farbwerte. Man geht das pixelweise vor und ermittelt in jedem Bild den Wert des Pixels (in RGB). Man nimmt den Mittelwert der n Pixel aus n Bildern und schreibt den in eine neue Datei.
Ist es das was du meinst? Oder willst du so eine Arte Layertechnik? Dann brauchst du, wie Martin das schon erwähnte, eine transparente Farbe. Ob es jetzt MFC-Klassen gibt, die diese Funktionalitäten bieten weiß ich allerdings nicht.
-
Hi,
erstmal danke für Eure Antwort! Im Prinzip ist es folgendermaßen:
Ich habe n Bilder jedes dieser Bilder ist Deckungsgleich, dass heißt jedes der Bilder ist gleich groß und die Zeichnungen sind ebenfalls gleich groß und liegen auf den selben X,Y Koordinaten (von der Größe).
Bsp:
1. Bild: Rechteck mit schwarzen Linien und blau "gefüllt"
2. Bild: Rechteck mit schwarzen Linien und blau "gefüllt" und einem gelben Kreis in der Mitte
3. Bild: Rechteck mit schwarzen Linien gefüllt mit blauer Farbe und 3 schwarzen Pfeilen in ihmusw.
Also jedes Bild hat die gleichen Grundinformationen bloß an verschieden Stellen "neue" bzw. andere Infos.
Und daraus sollte dann ein Bild entstehen:
Rechteck mit schwarzen Linien, blau "gefüllt" mit gelben Kreis und 3 schwarzen Pfeilen.
Gruss Paulchen26
-
Dumusst die Bilder einzeln komponieren und dann zusammensetzen. eine entsprechende Farbe wird als Transparent definiert.
Im Endeffekt macht das CImageList auch!
Mach es doch darüber oder verwende Icons.