Ok, es gibt auch Pakete, die das Gewünschte können, wie z.B. die
Lead Tools. Da hat man dann alles: Unterstützung sämtlicher Grafikformate, volle Bildmanipulation, alles unabhängig davon ob Raster- oder Vektorgrafik. Nur kostet das Ganze dann auch einen Arm und ein Bein.
Da ich schon vor einem ähnlichen Problem stand, habe ich mir einfach selber Im- und Export-Routinen für die gewünschten Grafikformate gebastelt (und genau dafür ist auch mein Link gedacht, dessen Inhalt auch recht bald klar macht: "Nein, das ist nicht so simpel. Die verschiedenen Garfikformate gibt es nicht nur wegen der lustigen Kürzel hinten dran...") und im Programm intern für die Bildtransformationen dann grundsätzlich Standardbitmaps verwendet. Ist nicht besonders ressourcenschonend, aber wenn ich die Wahl habe zwischen CPU-Zeit (komprimierte Bildformate intern verwenden) oder RAM (unkomprimierte Bitmaps mit vollen 24 Bit im Speicher halten), dann wähle ich immer die Bitmapvariante, weil ich die CPU-Power dann schon noch anderweitig verbrate.
@Threadersteller:
Grundsätzlich:
Die verschiedenen Bildformate handhaben das Speichern der Bilddaten sehr unterschiedlich. Eine unkomprimierte Bitmap schreibt einfach für jedes Pixel das RGB-Tripel raus.
Beim PCX-Format hast du es mit einer mehr (PCX2k) oder weniger (PCX Standard) komplexen RLE-Codierung zu tun.
Ein JPEG verwendet einen ganz anderen Algorithmus um Pixel ähnlicher Färbung zusammen zu fassen.
Eine Vektorgrafik wird wieder vollkommen anders gespeichert.
Und von Layern á la Photoshop etc. sei hier mal gar nicht die Rede.
(Vergleiche auch
hier.)
Prinzipiell liest du natürlich für das Bild die einzelnen Bytes von der Festplatte.
Doch was bedeutet der gelesene Wert 0xFF jetzt?
Ist das ein von Hersteller vordefinierter Wert?
Bedeutet er ein bestimmtes Codierungsformat?
Ist es evtl. die Farbtiefe des Bildes?
Oder bereits der Rot-Wert des ersten Pixels?
Genau
das ist in den verschiedenen Bildformaten überall anders abgelegt. Und nicht nur mit den Farben ist das so, sondern auch mit den Bemassungen.
Ich kenne mich mit Java nicht aus, aber es klingt für mich so, als gäbe es da in den Standardbibliotheken entsprechende Filterklassen, mit denen die verschiedenen Grafikformate erkannt und dann gelesen werden können.
Unter C++ gibt es dafür dreiundrölfzig verschiedene Lösungswege. Du kannst dir entsprechende Bildfilter selbst schreiben oder vorgefertigte Bibliotheken verwenden, von denen es wieder die unterschiedlichsten gibt. Aber generell würde ich dir wirklich sehr raten, dir wenigstens zu den gängigsten Formaten (BMP, JPG, GIF, PCX) mal die Codierungsmethoden anzuschauen, sonst wirst du selbst mit einer Importbibliothek eines Drittanbieters nicht wirklich glücklich werden, da du gar nicht weisst, was du der Filterklasse jetzt aus welchen Gründen als Parameter mitgeben musst.