WorkToolSmith

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

太田アベル

・ 更新 ・ 2分で読めます

当サイトの記事には広告リンクが含まれる場合があります。

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

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

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

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

フォームの準備

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

コンポーネント個数
TOpenDialog1
TImage1
TButton4

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が最強になっていくことでしょう!

太田アベル

太田アベル

パソコンを7歳からいじり始めて40年。とにかくパソコンが好きです。気になった商品をほぼ自腹で買いまくってレビュー中!良かった点、悪かった点をズバズバ書きます。

𝕏 でフォロー プロフィールを見る

こちらもおすすめ