開発ブログ - FireMonkey の TBitmap と VCL の TBitmap
FireMonkey にも VCL にも TBitmap というクラスがあり、
それぞれ VCL.Graphics, FMX.Graphics に入っています。
同じ名前なので同じようなものと思ってしまうのですが、だいぶ違うんです。
FireMonkey の TBitmap はビットマップをカプセル化したものです。
VCL の TBitmap はWindows ビットマップ (HBITMAP) をカプセル化しています。
FireMonkey の TBitmap の親は TInterfacedPersistent です。
VCL の TBitmap の親は TGraphic です。
つまり VCL の TBitmap は、TIcon や TMetafile, TJPEGImageの兄弟です。
FMX.Graphics.TBitmap
FireMonkey の TBitmap は CreateFromStream や CreateFromFile で、ファイルからビットマップデータを読み込むことができます。
(扱うことのできる画像形式は TBitmapCodecManager を参照)。
VCL.Graphics.TBitmap で画像ファイル読み込み?
VCL.Graphics.TBitmap の LoadFromFile は BMPファイルからの読み込みしかサポートしません。
VCL.Graphics.TBitmap に 様々な画像ファイルから画像を読み込みたい場合は TPicture を使います。
var
Picture: TPicture;
Bitmap: TBitmap;
begin
Picture := TPicture.Create;
Picture.LoadFromFile(AFilePath);
Bitmap := TBitmap.Create;
Bitmap.Width := Picture.Width;
Bitmap.Height := Picture.Height;
Bitmap.Canvas.Draw(0, 0, Picture.Graphic);
...
end;
TPicture は TGraphic のコンテナで、グラフィックを保持するために使用されます。
TGraphic はアイコン,ビットマップ,およびメタファイルなどのイメージを格納および表示するオブジェクトの抽象基本クラスですから、TPicture はこれらのグラフィックを統合的に扱うことができます。
なお、TPicture の親は TInterfacedPersistent です。
ちなみに FireMonkey には TPicture や TGraphic はありません。
FireMonkey はマルチプラットフォームですから当然ですが...