2012-01-13 13 views
6

生のバイトとして持つ画像が破損しているかどうかをどうやって判断するのですか? C#で複数のフォーマットのこの問題を処理するオープンソースライブラリはありますか?画像を読み込み、破損していないかどうかを確認するC#

ありがとう

+0

どのような画像フォーマットをサポートする必要がありますか?そのちょうど基本的な4(bmp/png/gif/jpg)の場合は、ビットマップクラスを使用して、それらをロードしようとすることができます。 – Will

+0

[C#でJPEG画像を検証する方法/ .Netが壊れていない方法](http://stackoverflow.com/questions/1173349/how-do-i-validate-a-jpeg-image-in- c-sharp-net-is-not-corrupted) – V4Vendetta

+0

私は質問を編集しました。 –

答えて

11

ファイルからGDI +ビットマップを作成してみてください。 Bitmapオブジェクトの作成に失敗した場合、イメージが破損していると見なすことができます。 GDI +はfile formats:BMP、GIF、JPEG、Exif、PNG、TIFFの数をサポートしています。

この機能のようなものが動作するはずです:

public bool IsValidGDIPlusImage(string filename) 
{ 
    try 
    { 
     using (var bmp = new Bitmap(filename)) 
     { 
     } 
     return true; 
    } 
    catch(Exception ex) 
    { 
     return false; 
    } 
} 

あなただけArgumentExceptionExceptionを制限することができるかもしれないが、私は、スイッチを行う前に、最初のを試します。あなたはbyte[]を持っている場合は

EDIT
が、これは動作するはずです:

public bool IsValidGDIPlusImage(byte[] imageData) 
{ 
    try 
    { 
     using (var ms = new MemoryStream(imageData)) 
     { 
      using (var bmp = new Bitmap(ms)) 
      { 
      } 
     } 
     return true; 
    } 
    catch (Exception ex) 
    { 
     return false; 
    } 
} 
+0

さて、私は生のバイトを持っています...だから、質問 –

+0

OKを編集しました。それは私が必要としているものです。ありがとう。 –

+0

これは注意して使用してください。 * using *で作成したビットマップをリリースすることが重要です。それ以外の場合は、システムにリソースがなくなったため、イメージが破損しているためではなく、多数のファイルをチェックしている間にOutOfMemory例外が発生する可能性があります。 – Indy9000

0

あなたはアイデアを取るためにこれらのリンクを見ることができます。 最初のものがここにあります。 Validate Images

もう1つはここにあります。 How to check corrupt TIFF images

申し訳ありませんが、私はこれのための外部ライブラリを知りません。

関連する問題