How to load a transparent Image from ImageList?
Solution 1
The workaround is rather simple - ImageList offers another method, GetIcon
, which works OK with transparency. Code to load a transparent Image would be:
ImageList.GetIcon(Index, Image.Picture.Icon);
And don't forget to set proper ImageList properties:
ImageList.ColorDepth:=cd32bit;
ImageList.DrawingStyle:=dsTransparent;
Solution 2
I too have had various issues with passing in images from the a tImageList. So I have a simple wrapper routine that generally does the job and it enforces the transparency. The code below is Delphi 2005 and imlActiveView is the tImageList component that has my set of button glyph images.
procedure TfrmForm.LoadBitmap (Number : integer; bmp : tBitMap);
var
ActiveBitmap : TBitMap;
begin
ActiveBitmap := TBitMap.Create;
try
imlActiveView.GetBitmap (Number, ActiveBitmap);
bmp.Transparent := true;
bmp.Height := ActiveBitmap.Height;
bmp.Width := ActiveBitmap.Width;
bmp.Canvas.Draw (0, 0, ActiveBitmap);
finally
ActiveBitmap.Free;
end
end;
Here is an example of use where the 5th imlActiveView image is passed into the btnNavigate.Glyph.
LoadBitmap (5, btnNavigate.Glyph)
Martin Melka
Updated on July 09, 2022Comments
-
Martin Melka almost 2 years
I want to load a picture (32 bit-depth, transparent) from a
TImageList
to anTImage
. The standard approach would beImageList.GetBitmap(Index, Image.Picture.Bitmap);
. However theGetBitmap
method doesn't work with transparency, so I always get a non-transparent bitmap. -
Edwin Yip about 2 yearsGreat! Thanks Martin.
TIcon
has built-in transparency support.