2012-07-22 16 views
6

TImageList'dan TImage ürününe resim (32 bit derinliğinde, saydam) yüklemek istiyorum. Standart yaklaşım ImageList.GetBitmap(Index, Image.Picture.Bitmap); olacaktır. Ancak GetBitmap yöntemi saydamlık ile çalışmaz, bu yüzden her zaman saydam olmayan bir bitmap alırım.ImageList'ten saydam bir görüntü nasıl yüklenir?

+1

gibi [ 'RRUZ suggested'] (http://stackoverflow.com/questions/10972986/png-image-from-imagelist#comment14330479_10973026), bir süre önce ... – TLama

cevap

23

Geçici çözüm oldukça basittir - ImageList, saydamlık ile birlikte çalışan GetIcon başka bir yöntem sunar.

ImageList.GetIcon(Index, Image.Picture.Icon); 

Ve uygun Imagelist özellikleri ayarlamak unutmayın:: Kod şeffaf Görüntü olacağını yüklemek için

ben de bir tImageList gelen görüntülerde geçen çeşitli sorunlar vardı
ImageList.ColorDepth:=cd32bit; 
ImageList.DrawingStyle:=dsTransparent; 
2

. Bu yüzden genellikle işi yapan basit bir sarmalayıcı rutinim var ve şeffaflığı zorluyor. Aşağıdaki kod Delphi 2005 ve imlActiveView, düğme glif imgelerimden oluşan tImageList bileşenidir. İşte

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 görüntü btnNavigate.Glyph geçirilir kullanımına ilişkin bir örnektir.

LoadBitmap (5, btnNavigate.Glyph) 
İlgili konular