2012-07-22 34 views
6

Tôi muốn tải ảnh (độ sâu 32 bit, trong suốt) từ TImageList đến TImage. Cách tiếp cận tiêu chuẩn sẽ là ImageList.GetBitmap(Index, Image.Picture.Bitmap);. Tuy nhiên, phương pháp GetBitmap không hoạt động với độ trong suốt, vì vậy tôi luôn nhận được một bitmap không trong suốt.Làm cách nào để tải Ảnh trong suốt từ ImageList?

+1

Giống như ['RRUZ recommended'] (http://stackoverflow.com/questions/10972986/png-image-from-imagelist#comment14330479_10973026) một số thời gian trước ... – TLama

Trả lời

23

Cách giải quyết khá đơn giản - ImageList cung cấp một phương thức khác, GetIcon, hoạt động OK với tính minh bạch. Mã để tải một hình ảnh trong suốt sẽ là:

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

Và đừng quên để thiết lập các thuộc tính ImageList thích hợp:

ImageList.ColorDepth:=cd32bit; 
ImageList.DrawingStyle:=dsTransparent; 
2

tôi cũng đã có nhiều vấn đề với đi qua trong những hình ảnh từ một tImageList. Vì vậy, tôi có một thói quen đóng gói đơn giản mà thường thực hiện công việc và nó thực thi tính minh bạch. Mã dưới đây là Delphi 2005 và imlActiveView là thành phần tImageList có tập hợp các hình ảnh nút glyph của tôi.

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; 

Đây là ví dụ về việc sử dụng hình ảnh imlActiveView thứ 5 được chuyển vào btnNavigate.Glyph.

LoadBitmap (5, btnNavigate.Glyph) 
Các vấn đề liên quan