ホーム 上へ 進む

イメージコントロールに拡張子が .dib のイメージファイルを読み込みたい

Tip

Imageコントロールにファイルを実行時に読み込む場合

  Image1.Picture.LoadFromFile('XXXX.bmp');

などとすれば、Imageコントロールはファイルの拡張子からグラフィックファイルの形式を自動的に判断して読み込んでくれます。ところが、たまにビットマップファイルの中に拡張子が .dib のものが有りますが、これを読み込むことはできません。

しかし、以下のようにすれば読み取れるようになります。

 

1) アプリケーション開始時に読み取れる拡張子を追加する

procedure TForm1.FormCreate(Sender: TObject);
begin
  TPicture.RegisterFileFormat('dib', 'ビットマップ', TBitmap);
end;

2) ユニットの初期化部に読み取れる拡張子を追加する

initialization
  TPicture.RegisterFileFormat('dib', 'ビットマップ', TBitmap);

こうすると

  Image1.Picture.LoadFromFile('xxxx.dib');

で拡張子が '.dib'のビットマップファイルが読めるようになります。

また、適当な設計時パッケージのユニットの初期化部に上のコードを加えると、設計時にImageコントロールのコンポーネントエディタ(Imageコントロールをダブルクリックした時表示されるダイアログ)で拡張子が '.dib'のビットマップファイルを読み込むこともできるようになります。

解説

Imageコントロールがファイルを読むとき、TPicture.LoadFromFile メソッドが使われます。このメソッドは Graphics Unit 内の FileFormatList (実装部に宣言されているので、アプリケーションからは見えない変数)を見て、 ファイルの拡張子から、そのファイルを読み込むことができるクラスを決定します。

TPicture はファイルを読み込むのに TGraphic から派生したクラスを使います。デフォルトでは FileFormatList は以下のように設定されています。
拡張子 ファイルを読むクラス 備考
wmf  TMetafile Windows Metafile形式
emf TMetafile Enhanced Metafile 形式
ico TIcon アイコンファイル
bmp TBitmap WIndows Bitmap


設計時、及び 実行時にJPeg ユニットを uses 節に加えたときは

拡張子 ファイルを読むクラス 備考
jpg TJpegImage JPEG
jpeg TJPegImage JPEG

が加わります。

TPictureクラスのRegisterFileFormatクラス メソッドは FileFormatList に新しい拡張子と クラスを登録します。個別の拡張子の削除はできません。但し、UnRegisterGraphicClass を使えば、ファイルを読み込むクラス単位で拡張子を削除することはできます。

TGif, TJpeg 等、様々なファイルフォーマットをサポートする TGraphic から派生するクラスを自作して拡張子とともに登録すれば、 イメージコントロールが読み込むことのできるファイルの種類を いくらでも増やすことができます。

 

ホーム 上へ 進む inserted by FC2 system