5
我正在將我的代碼升級到Delphi XE(來自Delphi 7),並試圖消除所有不必要的庫。我已經使用過PNGComponents很久了,但現在是時候繼續使用本地TImageList和TPNGImage了。如何使用Delphi XE從資源加載時保存PNGImage掩碼
我的代碼的一部分在運行時從鏈接的資源中加載圖像列表。爲此我的工作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;
在this question使用一個答案,現在我想下面的代碼,它顯示了圖像,但與黑色的背景,大概是因爲面具丟失。我想我需要一個掩碼位圖傳遞給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;
ColorDepth to cd32Bit做到了。很好,謝謝。 – 2011-05-04 15:48:07