掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
gif、pngファイルから透明色を取得するには (ID:150613)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
TListViewとTImageListを組み合わせて、画像リストを表示させています。 画像のリストを選択状態にしたとき、画像の透明色部分がカーソルの色になるようにマスクしているのですが gif、pngファイルから透明色を取得出来ません。 左上のピクセルを透明色として設定する場合は動作しますが 四隅が画像で中央が透明というのもあるので 透明色が取得出来ればと思うのですがうまくいきません。 どのようにすれば取得できるのでしょうか? 透明色の設定方法を参考にしています。 https://fishers.mydns.jp/pc/delphi/transgif.html ファイルを読み込んだ後の gif.Images[0].ColorMap.Count の値は 0になっています。 Windows10 コンパイル環境はDelphiXE5です。 透明の画像データは、何種類かのアプリで作成しています。 アプリで読み込むときは透明色として読み込めています。 uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ImgList, Vcl.ComCtrls, Vcl.ExtCtrls; type TFormMain = class(TForm) ListView1: TListView; ImageList1: TImageList; procedure FormShow(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var FormMain: TFormMain; implementation uses PNGImage,GIFImg; {$R *.dfm} procedure TFormMain.FormShow(Sender: TObject); var item : TListItem; bmp : TBitmap; mask : TBitmap; png : TPngImage; gif : TGIFImage; GCE : TGIFGraphicControlExtension; r : TRect; begin ImageList1.Height := 64; ImageList1.Width := 64; r := Rect(0,0,64,64); bmp := TBitmap.Create; mask := TBitmap.Create; gif := TGIFImage.Create; try bmp.SetSize(64,64); gif.LoadFromFile('imagetest.gif'); GCE := TGIFGraphicControlExtension.Create(gif.Images[0]); bmp.Canvas.StretchDraw(r,gif); mask.Assign(bmp); mask.Mask(GCE.TransparentColor); ImageList1.Add(bmp,mask); finally gif.Free; mask.Free; bmp.Free; end; r := Rect(0,0,64,64); bmp := TBitmap.Create; png := TPngImage.Create; mask := TBitmap.Create; try bmp.SetSize(64,64); png.LoadFromFile('imagetest.png'); bmp.Canvas.StretchDraw(r,png); mask.Assign(bmp); mask.Mask(png.TransparentColor); ImageList1.Add(bmp,mask); finally mask.free; png.Free; bmp.Free; end; ListView1.LargeImages := ImageList1; ListView1.SmallImages := ImageList1; ListView1.ViewStyle := vsList; item := ListView1.Items.Add; item.Caption := 'gif'; item.ImageIndex := 0; item := ListView1.Items.Add; item.Caption := 'img'; item.ImageIndex := 1; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.