{この記事はDelphi Advent Calendar 2013の参加記事です}
こんにちは太田アベルです。Delphi Advent Calendar に今年も参加中です。
昨日は@uskzさんの「Assertの話(2)」でした。
今日は「FireMonkeyのTImageは画像変換が超カンタン!」と題して、FireMonkeyで画像変換の方法を書いています。ちなみに変換というのはフォーマット変換のことです。エフェクトではありません。
フォームの準備
フォームにはこのようにコンポーネントを貼り付けました。
コンポーネント | 個数 |
---|---|
TOpenDialog | 1 |
TImage | 1 |
TButton | 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つの画像フォーマットで出力されているはずです。
確認
ただ単にファイル名が違うだけじゃないの?と思う方もおられると思います。
僕も最初はそう思いました。(笑)
でもそれぞれのファイルをバイナリエディタで開くと・・・
ちゃんと内容も拡張子と同じ内容になっていますね!
素晴らしく便利!
WTS的まとめ
FireMonkeyになってから3D対応や画像対応が非常に使いやすくなってきています。
マルチプラットフォーム対応が進めば、ますますDelphiが最強になっていくことでしょう!