我有一个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。
我的问题是哪一个是正确的?如果代码是正确的,那么佳能相机如何产生非标准图像?如果佳能相机是正确的,那么我们如何修复代码以纠正找到此图像的尺寸?
感谢。
答案 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格式的专家,因此如果您正在开发任务关键代码,可能需要咨询专业论坛。