德尔福。
我有一个 ImageList(TImageList 或 DevExpress 的 TcxImageList),其中包含使用 Alpha channel 的 PNG 图片。图片的RGB部分是一个黑色的方 block 。 Alpha channel 包含真实图片的形状。我想改变黑色方 block 的颜色,同时保持 Alpha channel 的形状。 (所以最终我改变了图片形状图标的颜色。)
尝试了很多方法,都没有成功。我尝试更改列表的属性,并导出 RGB 和 alpha 分离的值。
TImageList: mask 未导出。如果我执行 SaveToFile,它会保存一个 0 字节文件,并且 Replace 还会说掩码的大小不正确(0*0 px)
BMPimg := TBitmap.Create;
BMPmask := TBitmap.Create;
Try
TImageListHack(il1).GetImages(0, BMPimg, BMPmask);
BMPimg.Canvas.Brush.Color := clRed;
BMPimg.Canvas.FillRect(TRect.Create(0, 0, BMPimg.Width, BMPimg.Height));
il1.Replace(i, BMPimg, BMPmask);
End;
Finally
BMPimg.Free;
BMPmask.Free;
End;
TcxImageList:将图片+ mask 加载到BMPimg中, mask 是一个黑色的方 block ,而不是BMPmask中的形状。
BMPimg := TBitmap.Create;
BMPmask := TBitmap.Create;
Try
il1.GetBitmap(i, BMPimg);
il1.GetMask(i, BMPmask);
BMPimg.Canvas.Brush.Color := clRed;
BMPimg.Canvas.FillRect(TRect.Create(0, 0, BMPimg.Width, BMPimg.Height));
il1.Replace(i, BMPimg, BMPmask);
Finally
BMPimg.Free;
BMPmask.Free;
End;
如何更改前景色,同时保留 imagelist 的 PNG 图像中的 Alpha channel ?
最佳答案
呃呃。
我必须手动设置 BMPmask 的大小,然后蒙版才正确。
...
BMPmask.Width := il1.Width;
BMPmask.Height := il1.Height;
TImageListHack(il1).GetImages(0, BMPimg, BMPmask);
...
关于Delphi:ImageList中的PNG,改变颜色同时保持alpha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55274885/