コードをDelphiXE(Delphi 7から)にアップグレードし、不要なライブラリをすべて削除しようとしています。私は長年PNGComponentsを使用してきましたが、次に進んでネイティブのTImageListとTPNGImageを使用します。
私のコードの一部は、リンクされたリソースから実行時に画像リストをロードします。このための私の作業中のPNGComponentsコードは次のとおりです。
function CreateAndLoadImageList( ASize : integer ) : TPngImageList;
var
PngObject : TPngObject;
I : integer;
begin
Result := TPngImageList.Create( nil );
Result.BeginUpdate;
try
Result.Width := ASize;
Result.Height := ASize;
PngObject := TPngObject.create;
try
For I := 0 to Length( ArtImageNames ) -1 do
begin
PngObject.LoadFromResourceName( hInstance, Format( 'AImg%d_%d', [ASize, I]));
Result.PngImages.Add( False).PngImage := PngObject;
end;
finally
PngObject.Free;
end;
finally
Result.EndUpdate;
end;
end;
この質問の答えを使用して、おそらくマスクが失われたために、画像を表示しているが背景が黒である以下のコードを試しています。ImageList_Addに渡すためにマスクビットマップが必要だと思います。ここで「0」はありますが、私はこのようなものが苦手です。誰かが私がこれを機能させる方法を知っていますか?
function CreateAndLoadImageList( ASize : integer ) : TImageList;
var
PngImage : TPngImage;
bmp : TBitmap;
I : integer;
begin
Result := TImageList.Create( nil );
Result.Masked := False;
Result.DrawingStyle := dsTransparent;
Result.BeginUpdate;
try
Result.Width := ASize;
Result.Height := ASize;
Result.Masked := False;
PngImage := TPngImage.create;
try
For I := 0 to Length( ArtImageNames ) -1 do
begin
PngImage.LoadFromResourceName( hInstance, Format( 'AImg%d_%d', [ASize, I]));
bmp:=TBitmap.Create;
PngImage.AssignTo(bmp);
bmp.AlphaFormat:=afIgnored;
ImageList_Add( Result.Handle, bmp.Handle, 0);
Bmp.Free;
end;
finally
PngImage.Free;
end;
finally
Result.EndUpdate;
end;
end;