2010-11-25 7 views
1

JFIF形式のJPEG画像があります。私はそれをデコードし、次元を取得したい。C#で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); 
     } 

OK:

は、ここに私のコードです。このコードは一般的なもので、インターネット上のどこにでも見つけることができます。ほとんどのJPEG画像でうまく動作します。

カメラで撮影されたこの特定の画像「Canon EOS 300D DIGITAL」は、このコードをサポートしていません。ディメンションのマーカーは0xFFC0ではなく0xFFC2です。

私の質問は正しいですか?コードが正しければ、Canonカメラはどのように非標準画像を生成できますか? Canonカメラが正しい場合、この画像の寸法を見つけるためにコードを修正するにはどうすればよいですか?

ありがとうございました。

答えて

3

FFC2は、プログレッシブ画像のマーカーと思われる。

例えば「http://en.wikipedia.org/wiki/JPEG」を参照してください。「プログレッシブ」フォーマット(「JPEG圧縮」を参照)を説明します。

はい、私は0xc0(SOF0マーカー)と0xc2(SOF2マーカー)の両方が同じような構造(「構文と構造」のセクションを参照)を持っているように見えるため、ifステートメントを変更できると思います。こちらもご覧ください:http://fjcore.googlecode.com/svn/trunk/FJCore/Decoder/JpegDecoder.cs

私はJPEG形式の専門家ではありませんので、ミッションクリティカルなコードを開発する場合は、専門フォーラムで確認してください。

+0

プログレッシブ画像とは何ですか?プログレッシブJPEG画像を解読する別の方法が必要なのでしょうか? if(marker == 0xc0) if(marker == 0xc0 || marker == 0xc2)を変更して問題を解決できますか? – delpielo

+0

私の回答を更新しました – akonsu

関連する問題