Как загрузить прозрачное изображение из 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)
Другие вопросы по тегам