用C#解码JFIF图像文件

时间:2010-11-25 00:13:18

标签: c# image-processing jpeg decode

我有一个JFIF格式的JPEG图像。我想解码它并获得维度。

这是我的代码:

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);
        }

确定。这段代码很常见,你可以通过互联网找到它。它适用于大多数JPEG图像。

现在,相机拍摄的这张特定图像 - “Canon EOS 300D DIGITAL”,不支持这段代码。维度的标记是0xFFC2而不是0xFFC0。

我的问题是哪一个是正确的?如果代码是正确的,那么佳能相机如何产生非标准图像?如果佳能相机是正确的,那么我们如何修复代码以纠正找到此图像的尺寸?

感谢。

1 个答案:

答案 0 :(得分:3)

FFC2似乎是渐进式图像的标记。

请参阅示例http://en.wikipedia.org/wiki/JPEG,其中解释了“渐进式”格式(参见“JPEG压缩”部分)。

是的,我认为您可以更改if语句以检查0xc0(SOF0标记)和0xc2(SOF2标记),因为它们似乎具有相似的结构(请参阅“语法和结构”部分)。另见:http://fjcore.googlecode.com/svn/trunk/FJCore/Decoder/JpegDecoder.cs

我不是JPEG格式的专家,因此如果您正在开发任务关键代码,可能需要咨询专业论坛。