.NET TIPS

画像ファイルのフォーマットを知るには?

デジタルアドバンテージ
2003/05/02

 Windowsにおけるファイルの拡張子は、ファイルの種類を分類し、アプリケーションとの関連付けを行うためのものだ。ファイル名はユーザーが自由に変更できるため、正しい拡張子は、ファイル内のヘッダ部分などから判断するしかない。画像ファイルに関しては、WindowsのGDI+に組み込まれているデコーダを利用して、画像フォーマット(ファイル形式)をファイルの内容から判別することができる。

 TIPS:画像を読み込むには? では、ImageCodecInfoクラス(System.Drawing.Imaging名前空間)のGetImageDecodersメソッドを使用し、次のようにしてWindowsのGDI+に組み込まれているデコーダを列挙した。

ImageCodecInfo[] decoders = ImageCodecInfo.GetImageDecoders();

 ImageCodecInfoクラスのFormatIDプロパティからは、コーデックのファイル形式を識別するためのGUIDを取得することができる。このGUIDは、画像フォーマットごとに割り振られたユニークなIDである(つまり、GUIDから画像フォーマットを特定することができる)。

 一方、画像の読み込み時に作成するBitmapオブジェクトのRawFormatプロパティからは、ロードされた画像のフォーマットをImageFormatクラス(System.Drawing.Imaging名前空間)のオブジェクトとして取得することができる。ImageFormatオブジェクトは、画像フォーマットを示すためのオブジェクトで、TIPS:画像をファイルに保存するには? では、画像ファイルの保存時にパラメータとしてこれを使用している。このImageFormatオブジェクトは、その画像フォーマットを識別するGuidプロパティを持っている。よって、このGuidプロパティと、上述したデコーダのGUIDであるFormatIDプロパティを比較することにより、画像ファイルに対応するデコーダを判別でき、画像データのファイル形式を知ることが可能になる。

 次のサンプル・プログラムでは、コマンドラインのパラメータで指定された画像ファイルを読み込み、その画像フォーマットのGUIDをすべてのデコーダのGUIDと順に比較して、一致するものがあればデコーダの説明とその拡張子を表示する。

// getformat.cs

using System;
using System.Drawing;
using System.Drawing.Imaging;

class test {
  public static void Main(string[] args) {

    Bitmap bitmap = new Bitmap(args[0]);
    ImageCodecInfo[] decoders = ImageCodecInfo.GetImageDecoders();

    foreach (ImageCodecInfo ici in decoders) {
      if (ici.FormatID == bitmap.RawFormat.Guid) {
        Console.WriteLine(
            ici.FormatDescription + "\t"
          + ici.FilenameExtension);
      }
    }
  }
}

// コンパイル方法:csc getformat.cs
画像ファイルのファイル形式を表示するC#のサンプル・プログラム(getformat.cs)

 カレント・ディレクトリにJPEGファイル「mypicture.gif」があるとすると、このサンプル・プログラムは次のようにして実行する。

C:\>getformat mypicture.gif
JPEG    *.JPG;*.JPEG;*.JPE;*.JFIF
サンプル・プログラムの実行結果例

 GDI+のデコーダは、ファイル内容から画像フォーマットを判別するので、正しい拡張子を知ることができる。End of Article

カテゴリ:クラス・ライブラリ 処理対象:ビットマップ
使用ライブラリ:ImageCodecInfoクラス(System.Drawing.Imaging名前空間)
使用ライブラリ:ImageFormatクラス(System.Drawing.Imaging名前空間)
関連TIPS:画像を読み込むには?
関連TIPS:
画像をファイルに保存するには?
 
この記事と関連性の高い別の.NET TIPS
画像をファイルに保存するには?
画像を読み込むには?
画像の一部の領域を切り抜くには?
PictureBoxコントロールにWeb画像を表示するには?
画像ファイルを高速に読み込むには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH