Frage

Ich bin Laden eine Bitmap aus einer jpg-Datei. Wenn das Bild nicht RGB 24bit, würde Ich mag es zu konvertieren. Die Umwandlung sollte ziemlich schnell sein. Die Bilder, die ich Laden bin bis zu großen (9000 * 9000 Pixeln mit einer komprimierten Größe von 40-50MB). Wie kann dies geschehen?

Btw: Ich möchte keine externen Bibliotheken verwenden, wenn möglich. Aber wenn Sie von einer Open-Source-Utility-Klasse kennen die häufigste Imaging-Aufgaben durchführen, würde ich gerne davon hören. Vielen Dank im Voraus.

War es hilfreich?

Lösung

Die jpeg sollte mit 0xFF 0xD8 starten.

: Danach werden Sie verschiedene Felder im Format finden
  1. Feldkennung 2 Bytes
  2. Feldlänge, ohne Feldkennung. 2 Byte.
  3. Variable Daten.

die Felder Parsen durch. Die Kennung Sie werden versuchen, ist 0xFF 0xC0. Dies wird SOF0 genannt und enthält Höhe, Breite, Bittiefe usw. 0xFF 0xC0 wird durch zwei Bytes für die Feldlänge eingehalten werden. Sofort, dass Folgenden wird ein einzelnes Byte zeigt die Bittiefe sein, die in der Regel 8. Dann wird es für die Höhe, zwei für die Breite werden zwei Bytes sein, und ein einzelnes Byte für die Anzahl der Komponenten; dies wird in der Regel 1 sein (Graustufen) oder 3 (für Farbe)

Andere Tipps

Das ist nicht etwas, was ich selber ausprobiert habe, aber ich glaube, Sie könnten das Bild des EXIF-Informationen als Start acccess müssen.

Überprüfen Sie heraus Scott Hanselman Blog-Eintrag auf den Zugriff auf EXIF-Informationen aus Bildern .

Standard .NET System.Drawing Namespace sollten alle, die Sie benötigen, aber es wird wahrscheinlich nicht sehr effizient sein. Es wird die ganze Sache in den Arbeitsspeicher laden, dekomprimieren, konvertieren (wahrscheinlich durch Erstellen einer Kopie) und dann erneut zu komprimieren und speichern. Wenn Sie für hohe Leistung streben, habe ich Angst, Sie könnten in C / C ++ Bibliotheken suchen müssen und .NET-Wrapper für sie zu machen.

Soweit ich weiß, jpg ist immer 24 bpp. Das einzige, was würde ändern könnte sein, dass es CMY (K?) Eher dann RGB. Diese Informationen würden im Header gespeichert werden. Leider ob ich habe keine Mittel, um ein CMYK-Bild erstellen, um in eine Bitmap Laden automatisch konvertiert.

Die folgende Zeile wird die Datei in den Speicher gelesen:

Bitmap image = Image.FromFile(fileName);

image.PixelFormat wird Ihnen sagen, das Bildformat. Allerdings kann ich nicht testen, was die Datei geladen wird mit anderen Dateien als 24bpp RGB JPG-Dateien. Ich kann nur empfehlen, dass Sie es ausprobieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top