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?
6
A
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)
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