Jeśli ładuję przez TBitmap obrazy do TImageList, to przykładowo w TImage jeden z obrazów z TImageList jest wyświetlany poprawnie z transparentem.
resourcestring
img_abc = 'check.bmp';
img_fgh = 'check.bmp';
img_xyz = 'check.bmp';
const
ImgType: array[0..2] of string = (img_abc, img_fgh, img_xyz);
var
i: Byte;
Bmp: TBitmap;
Lokalizacja: string;
begin
Lokalizacja := ExtractFilePath(Application.ExeName) + 'Images\';
ImageList.Clear;
Bmp := TBitmap.Create;
for i := Low(ImgType) to High(ImgType) do
if FileExists(Lokalizacja + ImgType[i]) then
begin
Bmp.LoadFromFile(Lokalizacja + ImgType[i]);
ImageList.AddMasked(Bmp, clBlack);
end;
Bmp.Free;
//Przykładowe pobranie
ImageList.GetBitmap(0, Image.Picture.Bitmap);
end;
Natomiast przy ładowaniu do TPngImageList i przykładowym załadowaniu do TImage, obraz także jest wyświetlany ale ma czarną obwódkę (utrata transparentu)
resourcestring
img_abc = 'check.png';
img_fgh = 'check.png';
img_xyz = 'check.png';
const
ImgType: array[0..2] of string = (img_abc, img_fgh, img_xyz);
var
i: Byte;
Png: TPngObject;
Lokalizacja: string;
begin
Lokalizacja := ExtractFilePath(Application.ExeName) + 'Images\';
PngImageList.Clear;
Png := TPngObject.Create;
for i := Low(ImgType) to High(ImgType) do
if FileExists(Lokalizacja + ImgType[i]) then
begin
Png.LoadFromFile(Lokalizacja + ImgType[i]);
PngImageList.InsertPng(i, Png, clNone); //próbowałem też clBlack, clWindow
end;
Png.Free;
//Przykładowe pobranie
PngImageList.GetIcon(0, Image.Picture.Icon, dsTransparent, itImage); //próbowałem też itMask
//lub
//Image.Picture.Assign(PngImageList.PngImages.Items[0]); //------------ w ten sposób nie pobiera wcale obrazu
end;
Ten sposób z konwersją niby działa, ale obraz jest zniekształcany przy konwersji (miejsca transparentne są uszkadzane)
resourcestring
img_abc = 'check.png';
img_fgh = 'check.png';
img_xyz = 'check.png';
const
ImgType: array[0..2] of string = (img_abc, img_fgh, img_xyz);
var
i: Byte;
Png: TPngObject;
Bmp: TBitmap;
Lokalizacja: string;
begin
Lokalizacja := ExtractFilePath(Application.ExeName) + 'Images\';
PngImageList.Clear;
Png := TPngObject.Create;
Bmp := TBitmap.Create;
for i := Low(ImgType) to High(ImgType) do
if FileExists(Lokalizacja + ImgType[i]) then
begin
Png.LoadFromFile(Lokalizacja + ImgType[i]);
Bmp.Assign(Png);
PngImageList.InsertMasked(i, Bmp, clBlack);
//PngImageList.AddMasked(Bmp, clBlack); // takie samo działanie
end;
Png.Free;
Bmp.Free;
//Przykładowe pobranie
PngImageList.GetBitmap(0, Image.Picture.Bitmap);
end;
Wygląda więc na to, że coś jest nie tak z samym TPngImageList ?