Ich habe ein JPEG-Bild, das JFIF-formatiert ist. Ich möchte es entschlüsseln und die Dimension bekommen.Eine JFIF-Bilddatei in C# decieren
Hier ist mein Code:
while (binaryReader.ReadByte() == 0xff)
{
byte marker = binaryReader.ReadByte();
ushort chunkLength = binaryReader.ReadLittleEndianInt16();
if (marker == 0xc0)
{
binaryReader.ReadByte();
int height = binaryReader.ReadLittleEndianInt16();
int width = binaryReader.ReadLittleEndianInt16();
return new Size(width, height);
}
binaryReader.ReadBytes(chunkLength - 2);
}
Ok. Dieses Stück Code ist üblich und Sie können es überall im Internet finden. Es funktioniert gut für die meisten JPEG-Bilder.
Nun, dieses spezielle Bild, das von der Kamera aufgenommen wurde - "Canon EOS 300D DIGITAL", unterstützt dieses Stück Code nicht. Der Marker für die Dimension ist 0xFFC2 anstelle von 0xFFC0.
Meine Frage ist welche ist richtig? Wenn der Code korrekt ist, wie kann dann eine Canon-Kamera ein nicht standardmäßiges Bild erzeugen? Wenn die Canon-Kamera korrekt ist, wie können wir den Code korrigieren, um die Dimension dieses Bildes zu finden?
Danke.
Was ist ein progressives Bild? Bedeutet das, dass wir eine andere Methode brauchen, um progressives JPEG-Bild zu dekodieren? Kann ich if (marker == 0xc0) zu if (marker == 0xc0 || marker == 0xc2) ändern, um das Problem zu lösen? – delpielo
Ich habe meine Antwort aktualisiert – akonsu