2012-07-22 30 views
6

Quiero cargar una imagen (32 bits de profundidad, transparente) desde TImageList a TImage. El enfoque estándar sería ImageList.GetBitmap(Index, Image.Picture.Bitmap);. Sin embargo, el método GetBitmap no funciona con transparencia, por lo que siempre obtengo un mapa de bits no transparente.Cómo cargar una imagen transparente desde ImageList?

+1

Al igual que [ 'RRUZ suggested'] (http://stackoverflow.com/questions/10972986/png-image-from-imagelist#comment14330479_10973026) Hace algún tiempo ... – TLama

Respuesta

23

La solución es bastante simple: ImageList ofrece otro método, GetIcon, que funciona bien con transparencia. El código para cargar una imagen transparente sería:

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

Y no se olvide de establecer las propiedades adecuadas ImageList:

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

yo también he tenido varios problemas con el paso de las imágenes de la una TImageList. Así que tengo una rutina de envoltura simple que generalmente hace el trabajo e impone la transparencia. El siguiente código es Delphi 2005 e imlActiveView es el componente tImageList que tiene mi conjunto de imágenes de glifos de botón.

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; 

Aquí es un ejemplo de uso donde la imagen imlActiveView quinto se pasa en el btnNavigate.Glyph.

LoadBitmap (5, btnNavigate.Glyph) 
Cuestiones relacionadas