2012-07-22 6 views
6

Desidero caricare un'immagine (profondità a 32 bit, trasparente) da TImageList a TImage. L'approccio standard sarebbe ImageList.GetBitmap(Index, Image.Picture.Bitmap);. Tuttavia il metodo GetBitmap non funziona con la trasparenza, quindi ottengo sempre una bitmap non trasparente.Come caricare un'immagine trasparente da ImageList?

+1

Come [ 'RRUZ suggested'] (http://stackoverflow.com/questions/10972986/png-image-from-imagelist#comment14330479_10973026) qualche tempo fa ... – TLama

risposta

23

La soluzione alternativa è piuttosto semplice: ImageList offre un altro metodo, GetIcon, che funziona correttamente con la trasparenza. Codice per caricare un'immagine trasparente potrebbe essere:

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

E non dimenticare di impostare le proprietà ImageList corrette:

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

Anche io ho avuto diversi problemi con il passaggio nelle immagini dal un TImageList. Quindi ho una semplice routine wrapper che generalmente fa il lavoro e impone la trasparenza. Il codice di seguito è Delphi 2005 e imlActiveView è il componente tImageList che ha il mio set di immagini di glifo pulsante.

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; 

Ecco un esempio di utilizzo in cui l'immagine imlActiveView 5 ° è passato nella btnNavigate.Glyph.

LoadBitmap (5, btnNavigate.Glyph)