Как загрузить прозрачное изображение из 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.Glyph.
LoadBitmap (5, btnNavigate.Glyph)