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?
6
A
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)
Come [ 'RRUZ suggested'] (http://stackoverflow.com/questions/10972986/png-image-from-imagelist#comment14330479_10973026) qualche tempo fa ... – TLama