Saltar al contenido

Agregue una imagen png a una lista de imágenes en tiempo de ejecución usando Delphi XE

Solución:

Delphi XE tiene todo el soporte para manejar imágenes png y mapas de bits de 32 bits con canal alfa. A continuación se explica cómo agregar png a un ImageList:

uses CommCtrl;

var pngbmp: TPngImage;
    bmp: TBitmap;
    ImageList: TImageList;
begin
  ImageList:=TImageList.Create(Self);
  ImageList.Masked:=false;
  ImageList.ColorDepth:=cd32bit;
  pngbmp:=TPNGImage.Create;
  pngbmp.LoadFromFile('test.png');
  bmp:=TBitmap.Create;
  pngbmp.AssignTo(bmp);
  // ====================================================
  // Important or else it gets alpha blended into the list! After Assign
  // AlphaFormat is afDefined which is OK if you want to draw 32 bit bmp
  // with alpha blending on a canvas but not OK if you put it into
  // ImageList -- it will be way too dark!
  // ====================================================
  bmp.AlphaFormat:=afIgnored;
  ImageList_Add(ImageList.Handle, bmp.Handle, 0);

Debes incluir

ImgList, PngImage

Si lo intentas ahora:

  Pngbmp.Draw(Bmp1.Canvas,Rect);
and
  ImageList.Draw(Bmp1.Canvas,0,0,0,true);

verás que las imágenes son las mismas. En realidad, hay algunas diferencias en pm 1 rgb debido a errores de redondeo durante la combinación alfa, pero no se pueden ver a simple vista. Descuidando establecer bmp.AlphaFormat: = afIgnored; daría como resultado que la segunda imagen fuera mucho más oscura.

Atentamente,

Alex

Según MSDN, una lista de imágenes solo puede contener mapas de bits e iconos. Para agregar una imagen png a una lista de imágenes, primero debe convertirla en un ícono. El código para hacer eso se puede encontrar en el paquete PngComponents. Si solo tiene imágenes PNG en su lista de imágenes, puede, por simplicidad, usar TPngImageList que viene con ese paquete.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *