2009-07-28 5 views
7

可能であれば、(パフォーマンス上の理由から)可能であれば、イメージを開くことなくイメージの高さ/幅を探したいと思います。cで拡張イメージのプロパティを読み取る

イメージのWindowsプロパティペインには、幅、高さ、ビット深度などの情報が含まれているため、メタデータをどこかのファイルに保存していると考えられます。この情報にはどうすればアクセスできますか?

+0

[C#を使用してファイルからEXIFデータを取得する方法](http:// stackoverflow。com/questions/58649/how-to-get-the-exif-data-from-a-file-using-c) – jgauffin

答えて

3

などの画像からEXIF情報を読み取る方法についていくつかのstackoverflowの質問、あります使用して、画像のEXIF情報を読んで試すことができます:How to get the EXIF data from a file using C#

+0

EXIFデータはファイル内に格納されているため、開く必要があります。 OPの基準を満たしていない - OPの基準が意味をなさないこと: –

+0

OPの要件は、ビットマップデータのイメージと割り当てメモリのスキップをスキップしたいという方向にあると思います。その場合、メタデータへのアクセスは問題ありません。 –

+0

IMO彼は、実際の画像データを読み込んでいないので、メタデータを開いたり読み込んだりするのは大丈夫です。それ以外の場合は、そのファイルを検査する方法はありません。実際のperfボトルネックは、メタデータではなく画像データをロードします。 – huseyint

3

これを達成する最も簡単な方法は、画像が正方形であると仮定すると、ファイルサイズをバイト単位で取り、平方根をとることです。これは幅と高さになります。

256 bytes = 16px x 16px 

:-)

それとも、あなたはこのcodeplex library

+1

画像が正方形であることを前提にしています。 – SteveM

+2

私はいつもWindowsがこれをいかに速く計算したか疑問に思っていました! – Brandon

+2

うわー!画像は正方形ではありません。うーん、これでレンチを投げる! ;) –

2

Windowsは(この)メタデータをファイルシステム内の特別な場所に格納しません。プロパティウィンドウはイメージファイル自体からそれらを読み込むだけです。

.NETは、画像全体を読み込まずに画像からメタデータだけを読み取る機能はありません。限られた数の異なる画像フォーマット(JPEG、PNG、GIFなど)のみを扱う場合は、画像ヘッダからサイズを読み取るのが難しくありません。

一方、多くの画像フォーマットに対処する必要がある場合は、Unix file utilityのソースコードをご覧ください。それは多くの、多くの異なるイメージフォーマットのサイズを検出することを管理し、驚くほど速く起動します。

2

画像の幅と高さを取得するには、にファイルを開き、ヘッダー情報を解析し、そのようにしたいものを取得する必要があります。

すべてのカラー/ビットマップ情報を読み込む必要はなく、ヘッダーのみを読む必要があります。

これは、Windowsがアイコンを実際に実行せずにアプリケーションファイルから読み込むのと同じ方法です。

0

あなたはマイクロソフトシェルコントロールとオートメーションコンポーネントを使用することができますWindowsのエクスプローラで表示されるプロパティを読み取るには。これの利点は、サードパーティのライブラリ(COMオブジェクトは既に存在しています)やイメージヘッダの解析用のコードが不要で、さまざまなフォーマットで動作することです。

サンプルコードは、related questionへの回答に記載されています。

4

System.Drawing.Imageクラスを使用します。

 Image img = Image.FromFile(fileName); 
     ImageFormat format = img.RawFormat; 
     Console.WriteLine("Image Type : "+format.ToString()); 
     Console.WriteLine("Image width : "+img.Width); 
     Console.WriteLine("Image height : "+img.Height); 
     Console.WriteLine("Image resolution : "+(img.VerticalResolution*img.HorizontalResolution)); 

     Console.WriteLine("Image Pixel depth : "+Image.GetPixelFormatSize(img.PixelFormat)); 
     Console.WriteLine("Image Creation Date : "+creation.ToString("yyyy-MM-dd")); 
     Console.WriteLine("Image Creation Time : "+creation.ToString("hh:mm:ss")); 
     Console.WriteLine("Image Modification Date : "+modify.ToString("yyyy-MM-dd")); 
     Console.WriteLine("Image Modification Time : "+modify.ToString("hh:mm:ss")); 
関連する問題