Как загрузить прозрачное изображение из ImageList?
Я хочу загрузить изображение (32-битная глубина, прозрачный) из TImageList
до TImage
. Стандартный подход будет ImageList.GetBitmap(Index, Image.Picture.Bitmap);
. Однако GetBitmap
метод не работает с прозрачностью, поэтому я всегда получаю непрозрачное растровое изображение.
2 ответов
обходной путь довольно прост - ImageList предлагает другой метод,GetIcon
, который работает нормально с прозрачностью. Код для загрузки прозрачного изображения будет:
ImageList.GetIcon(Index, Image.Picture.Icon);
и не забудьте установить правильные свойства ImageList:
ImageList.ColorDepth:=cd32bit;
ImageList.DrawingStyle:=dsTransparent;
у меня тоже были различные проблемы с передачей изображений из tImageList. Поэтому у меня есть простая процедура обертки, которая обычно выполняет эту работу, и она обеспечивает прозрачность. Код ниже Delphi 2005 и imlActiveView является компонентом tImageList, который имеет мой набор кнопок глиф изображений.
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;
вот пример использования, когда 5-е изображение imlActiveView передается в btnNavigate.Глиф.
LoadBitmap (5, btnNavigate.Glyph)