Hallo Graphik-Experten!
Irgendwie komme ich gedanklich an folgender Frage nicht weiter -- und das große Internet hat mich jetzt mehr verwirrt als das es geholfen hat. Mein Anliegen:
Die Applikation soll
- Grafiken (BMP, JPG oder PNG) laden
- sie anzeigen
- User kann die Farbe der Grafik ändern können
- die Grafik soll im Ursprungstyp (BMP, JPG oder PNG) gespeichert werden.
Jetzt dachte ich, ich erstelle für jeden Grafik-Typ ein entsprechendes Objekt:
- if graphtype = 'PNG' then myGraph := TPngImage.Create;
- if graphtype = 'BMP' then myGraph := TBitmap.Create;
- if graphtype = 'JPG' then myGraph := TJpeg.Create;
Für das Anzeigen der Grafik, dachte ich, muß ich die Grafik einem TImage übergeben:
- bmp := TBitmap.Create;
- bmp.width := myGraph.width;
- bmp.height:= myGraph.height;
- bmp.canvas.draw(myGraph,0,0);
Nach der Änderung durch den User, speicher ich die Grafik wieder im Ursprungs-Typ:
- myGraphOut : TGraphics
- myGraphOut.width := bmp.width;
- myGraphOut.canvas.draw(bmp);
- myGraphOut.savetofile(whatever)
Jetzt kommen wir zum
Casus-Knacktus:
Wenn ich doch intern Alles, was da kommt in ein BMP verwandle, dann habe ich doch mindestens das Problem, dass z.B. der Alpha-Channel des PNG futsch ist. Das kann also nicht das gelbe vom Ei sein.
Zugegebenermaßen, habe ich in der EmBa-Newsgroup eine hähnliche Frage gestellt, und dort wurde mir dann
GDI+ empfohlen. Ich kenne mich
GDI+ nicht aus, aber wieso sollte das die Lösung sein?
Und vor allem: Die Applikation soll nur auf Win7 laufen -- dann könnte ich ja gleich Direct2D nutzen, oder?
Das alles klingt vielleicht komplizierter als es vielleicht wirklich ist (anzeigen, ändern, speichern) -- aber ich bin nun wirklich verwirrt, was ein gangbarer Weg zu dieser kleinen Applikation ist.
Könnt ihr helfen?
Vielen Dank
Jazzman