Delphi XE имеет всю поддержку обработки изображений PNG и 32-разрядных
растровые изображения с альфа-каналом. Вот как добавить png в ImageList:
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);
Вы должны включить
ImgList, PngImage
Если вы сейчас попробуете:
Pngbmp.Draw(Bmp1.Canvas,Rect);
and
ImageList.Draw(Bmp1.Canvas,0,0,0,true);
вы увидите, что изображения одинаковы. На самом деле, есть несколько
\ pm 1 разница в rgb из-за ошибок округления при альфа-смешивании
но вы не можете видеть их невооруженным глазом. Пренебрегая установить
bmp.AlphaFormat: = afIgnored; приведет к тому, что второе изображение будет
намного темнее!
С уважением,
Алекс