Ich lade die Binärbytes der Image-Datei-Festplatte und lade sie in ein Bitmap-Objekt. Wie finde ich den Bildtyp [JPEG, PNG, BMP usw.] aus dem Bitmap-Objekt?
Sieht trivial aus. Aber ich konnte es nicht herausfinden!
Gibt es einen alternativen Ansatz?
Schätzen Sie Ihre Antwort.
AKTUALISIERTE RICHTIGE LÖSUNG:
@CMS: Danke für die richtige Antwort!
Beispielcode, um dies zu erreichen.
using (MemoryStream imageMemStream = new MemoryStream(fileData))
{
using (Bitmap bitmap = new Bitmap(imageMemStream))
{
ImageFormat imageFormat = bitmap.RawFormat;
if (bitmap.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg))
//It's a JPEG;
else if (bitmap.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Png))
//It's a PNG;
}
}
System.Drawing.Imaging
Namespace zu Ihren using-Anweisungen hinzufügen , um die Formatprüfungen weniger ausführlich zu gestalten ...Antworten:
Wenn Sie das Format eines Bildes kennen möchten, können Sie die Datei mit der Image- Klasse laden und ihre RawFormat- Eigenschaft überprüfen :
quelle
img.RawFormat == ImageFormat.Jpeg
dies nicht funktioniert. Du musst benutzenimg.RawFormat.Equals(ImageFormat.Jpeg)
.==
Verwendet keine Referenzgleichheit, es sei denn, es wird überschrieben oder einer der wenigen integrierten TypenEquals
. Neben der Verwendung vonEquals
sich selbst, können Sie die statische verwendenobject.Equals(obj1, obj2)
(das nenntEquals
) für einfache null Sicherheit.Hier ist meine Erweiterungsmethode. Hoffe das hilft jemandem.
quelle
Hier ist mein Code dafür. Sie müssen zuerst das vollständige Image oder den Header (die ersten 4 Bytes) in ein Byte-Array laden.
quelle
natürlich kannst du.
ImageFormat
bedeutet nicht viel.ImageCodecInfo
hat viel mehr Bedeutung.red_dot.png
Code:
Debug-Ausgabe:
quelle
Einfach gesagt, du kannst nicht. Der Grund dafür ist, dass Bitmap eine Art Bild ist, genau wie JPEG, PNG usw. Sobald Sie ein Bild in eine Bitmap laden, wird das Bild im Bitmap-Format angezeigt. Es gibt keine Möglichkeit, eine Bitmap zu betrachten und die ursprüngliche Codierung des Bildes zu verstehen (wenn sie sich sogar von der Bitmap unterscheidet).
quelle
Basierend auf Alex 'Arbeit oben (die ich tatsächlich als Lösung stimme, da es sich um eine Zeile handelt - aber ich kann noch nicht abstimmen, haha), habe ich die folgende Funktion für eine Bildbibliothek entwickelt. Es erfordert 4.0
quelle
Um mich nicht mit alten Themen zu befassen, sondern um diese Diskussion abzuschließen, möchte ich meinen Weg zum Abfragen aller Bildformate teilen , die Windows bekannt sind.
Jetzt können Sie es wie unten gezeigt als Bilderweiterung verwenden:
quelle
Ein paar saubere Erweiterungsmethoden für den Typ,
Image
um dies zu bestimmen, basierend auf dem Fund von Alex oben (ImageCodecInfo.GetImageDecoders()
).Dies ist nach dem ersten Aufruf stark optimiert, da das statische ImageCodecsDictionary im Speicher gespeichert wird (jedoch nur, nachdem es einmal verwendet wurde).
quelle
Ein seltsames Problem, mit dem ich konfrontiert war, als ich versuchte, den MIME-Typ mithilfe von imagecodeinfo zu ermitteln. Bei einigen PNG-Dateien waren die Anleitungen nicht genau gleich.
Zuerst habe ich mit dem ImageCodecinfo nachgefragt und wenn der Code das Bildformat nicht findet, habe ich das Bildformat mit der Lösung von Matthias Wuttke verglichen.
Wenn beide oben genannten Lösungen fehlgeschlagen sind, verwenden Sie die Erweiterungsmethode, um den MIME-Dateityp abzurufen.
Wenn sich der MIME-Typ ändert, ändert sich auch die Datei. Wir haben die Prüfsumme der heruntergeladenen Dateien so berechnet, dass sie mit der Prüfsumme der Originaldatei auf dem Server übereinstimmt. Für uns war es daher wichtig, die richtige Datei als Ausgabe zu erhalten.
quelle
Agent CK , ich mochte Ihre Erweiterungsmethode und fügte eine Zeichenfolgenüberladung hinzu. Außerdem habe ich den Code für Ihre Methode reduziert:
quelle
Die einfachste Methode wurde von Cesare Imperiali wie folgt angeboten:
Das .ToString () für ein .jpg gibt jedoch "[ImageFormat: b96b3cae-0728-11d3-9d7b-0000f81ef32e]" anstelle von "Jpeg" zurück. Wenn Ihnen das wichtig ist, ist hier meine Lösung:
quelle