Wie kann ich überprüfen die Farbtiefe der Bitmap?
-
23-09-2019 - |
Frage
Ich arbeite an einer Anwendung, die druckt einen Ordner mit Bilddateien, einschließlich JPEG und TIFF.Die TIFF-Bilder sind in der Regel Schwarz und Weiß (1bpp).
Nach dem laden des Bildes möchte ich bestimmen wenn die Bild ist Farbe oder B&W oder Graustufen so kann ich senden Sie das Bild an den richtigen Drucker (Farbdrucker oder Schwarzweiß-Drucker).
Ich bin mit der Bitmap
Konstruktor image = new Bitmap(filename);
laden Sie das Bild.
EDIT: Die Antwort zu überprüfen, die pixel-Tiefe ist ideal für B&W.Irgendwelche Ideen auf, zu prüfen, ob das Bild in Graustufen, ohne das Durchlaufen jedes pixel?
Lösung
Der richtige Weg, um dies zu überprüfen, ist:
Für JPEG-Dateien sollten Sie die entsprechenden Eigenschaften, die über die PropertyItems Sammlung der Bitmap.Diese können enthalten, die entsprechenden EXIF - tags, um festzustellen, das die bit-Tiefe.Der nächste Schritt wäre dann zu analysieren, die JPEG header und suchen Sie die "start of frame" - Markierung und dann die Anzahl der Komponenten in das Bild.
Die Letzte Methode ist das laden des JPEG in ein Bitmap-Objekt und vergleichen Sie die Anzahl der Pixel mit der Formel (Breite * Höhe * bytes_per_pixel).Also, wenn Sie laden Sie das bitmap und die Anzahl der bytes, die der eigentlichen raw-Daten gleich (Breite * Höhe), dann wissen Sie, es ist eine sichere Wette, dass die Bild hat 1 byte pro pixel und wird als solche in Graustufen.
Das Letzte, was Sie überprüfen möchten, dann ist das PixelFormat der bitmap selbst.
Für die TIFF Datei format sollten Sie tun die gleiche Sache mit die PropertyItems Sammlung und überprüfen Sie das entsprechende tag in der erwähnten spec.Wenn diese fehlschlagen, dann tun Sie das Bild byte-Vergleich und schließlich verwenden Sie die Eigenschaft PixelFormat als letzten Ausweg.
Andere Tipps
Gerade diese Eigenschaft überprüfen
image.PixelFormat
Es wird in einer der Werte entsprechen System.Drawing.Imaging.PixelFormat
Auch wenn Sie mehr als nur Black & White an die B & W Drucker senden wollen, sollten Sie auch auch alle Graustufen dort senden.