2012-07-22 20 views
6

Ich möchte ein Bild (32 Bit-Tiefe, transparent) von einem TImageList zu einem TImage laden. Der Standardansatz wäre ImageList.GetBitmap(Index, Image.Picture.Bitmap);. Die Methode GetBitmap funktioniert jedoch nicht mit Transparenz, daher erhalte ich immer eine nicht transparente Bitmap.Wie lade ich ein transparentes Bild von ImageList?

+1

Wie [ 'RRUZ suggested'] (http://stackoverflow.com/questions/10972986/png-image-from-imagelist#comment14330479_10973026) vor einiger Zeit ... – TLama

Antwort

23

Die Problemumgehung ist ziemlich einfach - ImageList bietet eine andere Methode GetIcon, die mit Transparenz OK funktioniert. Code ein transparentes Bild wäre zu laden:

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

Und vergessen Sie nicht die richtige Abbildungsliste Eigenschaften festlegen:

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

Ich habe zu verschiedenen Themen mit dem Führen in Bildern aus dem einen TImageList hatte. So habe ich eine einfache Wrapper-Routine, die im Allgemeinen die Aufgabe erfüllt und die Transparenz durchsetzt. Der Code unten ist Delphi 2005 und imlActiveView ist die TImageList-Komponente, die meine Gruppe von Button Glyph-Bildern enthält.

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; 

Hier ist ein Beispiel für den Einsatz bei der 5. imlActiveView Bild in den btnNavigate.Glyph geleitet wird.

LoadBitmap (5, btnNavigate.Glyph)