我有一个JPEG图像,这是JFIF格式。我想解码它并得到它的尺寸。
下面是我的代码:
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图像。
现在,这个特定的图像是由相机拍摄的-“佳能EOS 300D数码”,不支持这段代码。维度的标记是0xFFC2,而不是0xFFC0。
我的问题是哪一个是正确的?如果代码是正确的,那么佳能相机如何产生非标准图像?如果佳能相机是正确的,那么我们如何修复代码来正确地找到这张图像的尺寸?
谢谢。
发布于 2010-11-25 08:29:10
FFC2似乎是渐进式图像的标志。
例如,请参阅http://en.wikipedia.org/wiki/JPEG,它解释了什么是“渐进式”格式(参见"JPEG压缩“部分)。
是的,我认为您可以更改if语句以同时检查0xc0 (SOF0标记)和0xc2 (SOF2标记),因为它们似乎具有相似的结构(请参阅“语法和结构”部分)。另请参阅此处:http://fjcore.googlecode.com/svn/trunk/FJCore/Decoder/JpegDecoder.cs
我不是JPEG格式的专家,所以如果你正在开发一个任务关键型代码,你可能会想要检查专门的论坛。
https://stackoverflow.com/questions/4272699
复制相似问题