ローディング アニメーションGIFファイルを作成するアプリを作る ~Delphiソースコード集
IDE上でフォームにコンポーネントをドラッグ&ドロップし、プロパティを設定し、ソースコードを入力して、ローディングGIFアニメーションファイルを作成する本格的なアプリケーションを作成します。
画面設計
Delphi IDEを起動し、「ファイル」⇒「Windows VCLアプリケーション -Delphi」をクリックしてプロジェクトと初期フォームを作成します。
右下ペインにある「パレット」から以下コンポーネントをドラッグ&ドロップします。
- TComboBox ×1個
- TColorBox ×1個
- TButton ×1個
- TSaveDialog ×1個
- TImage ×1個
フォームにドラッグ&ドロップした「ComboBox1」をクリックして選択します。
左下ペインの「オブジェクトインスペクタ」の「プロパティ」タブをクリックして選択します。
ComboBox1の「Items」プロパティの右にある「...」ボタンをクリックします。
「文字列リストの設定」ウィンドウが表示されますので、以下のように
16と改行、24と改行、32と改行、40と改行、48と改行、56と改行、64と改行
を入力し、「OK」ボタンをクリックしてウィンドウを閉じます。
ComboBox1の「Style」プロパティの右にある「v」ボタンをクリックし、「csDropDownList」をクリックして選択します。
ComboBox1の「ItemIndex」プロパティの値を「1」に設定します。
フォームにドラッグ&ドロップした「SaveDialog1」をクリックして選択します。
左下ペインの「オブジェクトインスペクタ」の「プロパティ」タブをクリックして選択します。
SaveDialog1の「Filter」プロパティの右にある「...」ボタンをクリックします。
「フィルタの設定」ダイアログが表示されますので、以下のように
フィルタ名に「GIF」、フィルタに「*.gif」を入力し「OK」ボタンをクリックしてダイアログを閉じます。
SaveDialog1のプロパティ「Options⇒efOverwritePrompt」プロパティをクリックして「true」に設定します。
ソースコードの記述
「Button1」をダブルクリッククリックします。
コード入力画面に切り替わります。
以下のソースコードを記述します。
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.ActnMan, Vcl.ActnColorMaps; type TForm1 = class(TForm) ComboBox1: TComboBox; ColorBox1: TColorBox; Button1: TButton; SaveDialog1: TSaveDialog; Image1: TImage; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} uses VCL.Imaging.GIFImg; procedure TForm1.Button1Click(Sender: TObject); var bmp:TBitmap; gif:TGIFImage; gifFrame:TGIFFrame; gifGCE:TGIFGraphicControlExtension; i,j:Integer; rad:Integer; r,g,b:byte; TransparentColor:TColor; begin if SaveDialog1.FileName<>'' then begin SaveDialog1.InitialDir:=ExtractFileDir(SaveDialog1.FileName); SaveDialog1.FileName:=ExtractFileName(SaveDialog1.FileName); end else begin SaveDialog1.FileName:='Default,gif'; end; if not SaveDialog1.Execute then exit; //透過色(絶対使われないような色を設定) TransparentColor:=rgb($F1,$F2,$F3); bmp:=TBitmap.Create; gif:=TGIFImage.Create; try bmp.Width:=StrToInt(ComboBox1.Items[ComboBox1.ItemIndex]); bmp.Height:=bmp.Width; rad:=bmp.Width div 2; r:=($FF-GetRValue(ColorBox1.Selected)) div 15; g:=($FF-GetGValue(ColorBox1.Selected)) div 15; b:=($FF-GetBValue(ColorBox1.Selected)) div 15; bmp.Canvas.Pen.Width:=bmp.Width div 16; for i := 0 to 15 do begin bmp.Canvas.Brush.Color:=TransparentColor; bmp.Canvas.FillRect(bmp.Canvas.ClipRect); for j := 0 to 15 do begin bmp.Canvas.Pen.Color:=rgb($FF-r*j,$FF-g*j,$FF-b*j); bmp.Canvas.MoveTo( rad+Round(cos(Pi/8*(j+i))*rad*0.6), rad+Round(sin(Pi/8*(j+i))*rad*0.6) ); bmp.Canvas.LineTo( rad+Round(cos(Pi/8*(j+i))*rad), rad+Round(sin(Pi/8*(j+i))*rad) ); end; gifFrame:=gif.Add(bmp); gif.OptimizeColorMap; gifGCE:=TGIFGraphicControlExtension.Create(gifFrame); gifGCE.TransparentColor:=TransparentColor; gifGCE.Transparent:=True; gifGCE.Disposal:=dmBackground; gifGCE.Delay:=5; // 1/100秒単位なので 0.05秒/フレーム end; //無限ループ再生に設定する TGIFAppExtNSLoop.Create(gif.Images[0]).Loops:=0; //最適化 gif.Optimize( [TGIFOptimizeOption.ooCrop, TGIFOptimizeOption.ooMerge, TGIFOptimizeOption.ooCleanup, TGIFOptimizeOption.ooColorMap], TColorReduction.rmQuantize, TDitherMode.dmNearest, 8 ); image1.Picture.Assign(gif); TGIFImage(Image1.Picture.Graphic).Animate := True; gif.SaveToFile(SaveDialog1.FileName); finally bmp.Free; gif.Free; end; end; end.
実行する
IDEの実行ボタンをクリックして実行します。
ご参考:右下の「コード」「デザイン」タブをクリックして切り替えできます。
作成したアプリケーションがコンパイルされ、実行します。
コンボボックスでGIFファイルのサイズを設定できます。
カラーボックスでGIF画像の色を設定できます。
「Button1」をクリックするとGIFファイルの保存先ダイアログが開きますので、保存先フォルダを選択して、ファイル名を設定して「保存(S)」ボタンを押します。
生成されたアニメーションGIFファイルが保存され、プレビューが表示されます。