2012-07-22 7 views
6

TImageList에서 TImage으로 그림 (32 비트 깊이, 투명)을로드하려고합니다. 표준 방식은 ImageList.GetBitmap(Index, Image.Picture.Bitmap);입니다. 그러나 GetBitmap 메서드는 투명도와 함께 작동하지 않으므로 항상 투명하지 않은 비트 맵을 얻습니다.ImageList에서 투명한 이미지를로드하는 방법은 무엇입니까?

+1

처럼 ['RRUZ suggested'] (http://stackoverflow.com/questions/10972986/png-image-from-imagelist#comment14330479_10973026) 몇 시간 전에 ... – TLama

답변

23

해결 방법은 매우 간단합니다. ImageList는 다른 방법 인 GetIcon을 제공합니다.이 방법은 투명하게 작동합니다.

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

을 그리고 적절한의 ImageList 속성을 설정하는 것을 잊지 마세요 : 코드는 투명한 이미지가 될 것로드

나도는 A TImageList의에서 이미지 전달과 함께 다양한 문제를 가지고있다
ImageList.ColorDepth:=cd32bit; 
ImageList.DrawingStyle:=dsTransparent; 
2

. 그래서 나는 일반적으로 작업을 수행하고 투명성을 강화하는 간단한 래퍼 루틴을가집니다. 아래의 코드는 Delphi 2005이고 imlActiveView는 버튼 그림 문자 이미지가있는 tImageList 구성 요소입니다. 여기

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 화상이 btnNavigate.Glyph로 전달되는 사용의 일례이다.

LoadBitmap (5, btnNavigate.Glyph)