2012-07-22 20 views
6

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?

+1

Podobnie jak [ 'RRUZ suggested'] (http://stackoverflow.com/questions/10972986/png-image-from-imagelist#comment14330479_10973026) jakiś czas temu ... – TLama

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)