ローディング アニメーション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ファイルが保存され、プレビューが表示されます。
