TOPページへ戻る  PCページへ戻る  一覧へ戻る

透過GIFの作成方法

Delphi2007以降、Finn TolderlundさんのTGIFImageがDelphiのソースに統合され、DelphiでGIFファイルを扱えるようになっています。ヘルプファイルにも書かれている通り、透過GIFで保存する簡単な方法は次の通りです。



 USES ・・・, Vcl.Graphics, Vcl.Imaging.GIFImg;
              ・
             ・
             ・
 procedure TForm1.ReadAndSaveTransGif;
 var Bitmap: TBitmap;
     GIFImage: TGIFImage;
 begin
 Bitmap := TBitmap.Create;
 GIFImage := TGIFImage.Create;
 try
 Bitmap.LoadFromFile(ビットマップファイルのパス);
 Bitmap.Transparent := True;
 Bitmap.TransparentColor := Bitmap.Canvas.Pixels[0,Bitmap.Height-1];	// ここでは左下の色を透過色に指定
 GIFImage.Assign(Bitmap);
 GIFImage.SaveToFile(GIFファイルのパス);
 finally
     FreeAndNil(GIFImage);
     FreeAndNil(Bitmap);
   end;
 end;


GIFファイルに直接透過色を指定することもできます。とほほさんのGIFフォーマットの詳細W3CのGIF89a仕様書を見ると、透過GIFは「Graphic Control Extension」のTransparentとTranparentColorで指定されます。この拡張(Extension)はDelphiでもサポートされており、これを利用すると、TImageで読み込めるファイル全てに対してビットマップをCreateすることなく透過GIFで保存できます。


 USES ・・・, Vcl.ExtCtrls, Vcl.Imaging.GIFImg;

 type
   TForm1 = class(TForm)
     OpenDialog1: TOpenDialog;
     Image1: TImage;
     procedure FormCreate(Sender: TObject);
              ・
             ・
             ・
 procedure TForm1.ReadAndSaveTransGif;
 var GIFImage : TGIFImage;
     GCE : TGIFGraphicControlExtension;
 begin
 Image1.Picture.LoadFromFile(イメージファイルのパス);
 GIFImage := TGIFImage.Create;
 try
 GIFImage.Assign(Image1.Picture.Graphic);
 GCE := TGIFGraphicControlExtension.Create(GIFImage.Images[0]);
 GCE.Transparent := True;
 GCE.TransparentColor := GIFImage.Bitmap.Canvas.Pixels[0,GIFImage.Bitmap.Height-1];
 GIFImage.SaveToFile(GIFファイルのパス);
 finally
     FreeAndNil(GIFImage);
   end;
 end;

上述のコードで、TGIFGraphicControlExtensionが前述の「Graphic Control Extension」です。TGIFGraphicControlExtensionの使用方法は、Graphic Control Extensionを付けるGIFの画像フレームをOwnerとしてCreateします。GIFは複数の画像をフレームとして保存でき、1つの画像だけを読み込んだ場合はImages[0]が読み込んだ画像になります。TGIFGraphicControlExtensionはGIFフレームが破棄される際に開放されるため、finally節で開放する必要はありません。

GCEを作成した後、そのTransparentプロパティをTrueに、TransparentColorプロパティに透過色を指定すると透過GIFとなります。この手法を使うと、TImageの代わりにTJPEGImage(Vcl.Imaging.JPEG)やPNGImage(Vcl.Imaging.PNGImage)を使ってJPEGファイルやPNGファイルを透過GIFに変換することができます。もちろん、非透過GIFをGIFImageへ直接読み込んで透過GIFに変換する際にも使えます。

TOPページへ戻る  PCページへ戻る  一覧へ戻る