Chcę załadować obraz (32-bitowy, przezroczysty) z TImageList
do TImage
. Standardowe podejście to ImageList.GetBitmap(Index, Image.Picture.Bitmap);
. Jednak metoda GetBitmap
nie działa z przezroczystością, więc zawsze otrzymuję nieprzezroczystą bitmapę.Jak załadować przezroczysty obraz z ImageList?
6
A
Odpowiedz
23
Rozwiązaniem jest dość prosta - ImageList oferuje inną metodę, GetIcon
, który działa OK z przejrzystości. Kod załadować przejrzysty obraz byłby:
ImageList.GetIcon(Index, Image.Picture.Icon);
I nie zapomnij, aby ustawić odpowiednie właściwości Imagelist:
ImageList.ColorDepth:=cd32bit;
ImageList.DrawingStyle:=dsTransparent;
2
ja też mieli różne problemy z przechodzącą w obrazach z pomocą tImageList. Mam więc prostą procedurę rutowania, która zazwyczaj wykonuje pracę i wymusza przezroczystość. Poniższy kod to Delphi 2005, a imlActiveView to komponent tImageList, który ma mój zestaw obrazów przycisków glifów.
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;
Oto przykład użycia gdzie 5th imlActiveView obraz jest przekazywany do btnNavigate.Glyph.
LoadBitmap (5, btnNavigate.Glyph)
Podobnie jak [ 'RRUZ suggested'] (http://stackoverflow.com/questions/10972986/png-image-from-imagelist#comment14330479_10973026) jakiś czas temu ... – TLama