FireMonkeyのTImageは画像変換が超カンタン!

{この記事はDelphi Advent Calendar 2013の参加記事です}

こんにちは太田アベルです。Delphi Advent Calendar に今年も参加中です。

昨日は@uskzさんの「Assertの話(2)」でした。

今日は「FireMonkeyのTImageは画像変換が超カンタン!」と題して、FireMonkeyで画像変換の方法を書いています。ちなみに変換というのはフォーマット変換のことです。エフェクトではありません。

フォームの準備

フォームにはこのようにコンポーネントを貼り付けました。

コンポーネント 個数
TOpenDialog 1
TImage 1
TButton 4

 

Delphi Advent Calender 2013 (4)

 

まずは読み込み

VCLではJPEG、PNG、BMPなどそれぞれのフォーマットで専用のユニットを読み込む必要があり、操作もバラバラでした。
FireMonkeyではTBitmapに画像ユニットが統合されていて、フォーマットを気にせず読み書きが可能です。

読み込みは非常にカンタン。

TOpenDialogをExecuteし、ユーザーに指定されたファイルをLoadFromFileするだけ。JPEG、PNG、BMPを気にせず読み込めます。

if OpenDialog1.Execute then
begin
  Image1.Bitmap.LoadFromFile(OpenDialog1.FileName);
end;

たった一文でJPGでもBMPでもPNGでもTBitmapに変換してくれます。

書き込み

正常に読み込めるとTImageに画像が表示されます。

次は書き込みです。
なんと!FireMonkeyでは保存するファイルの拡張子を変えるだけで、そのフォーマットに変換してくれます!

 

3つのボタンに下記のようにハンドラを作ります。
話を簡単にするために画像はexeの位置へ書き込むようにしました。

procedure TForm1.Button2Click(Sender: TObject);
begin
  image1.Bitmap.SaveToFile(ExtractFileDir(ParamStr(0)) + '\a.bmp');
 end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  image1.Bitmap.SaveToFile(ExtractFileDir(ParamStr(0)) + '\a.png');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  image1.Bitmap.SaveToFile(ExtractFileDir(ParamStr(0)) + '\a.jpg');
end;

それぞれのボタンを押してみましょう。

3つの画像フォーマットで出力されているはずです。

3つの画像フォーマット

確認

ただ単にファイル名が違うだけじゃないの?と思う方もおられると思います。
僕も最初はそう思いました。(笑)

でもそれぞれのファイルをバイナリエディタで開くと・・・

バイナリエディタでファイルを確認

ちゃんと内容も拡張子と同じ内容になっていますね!

素晴らしく便利!

WTS的まとめ

FireMonkeyになってから3D対応や画像対応が非常に使いやすくなってきています。

マルチプラットフォーム対応が進めば、ますますDelphiが最強になっていくことでしょう!