[英]Delphi: PNG in ImageList, change color while keep alpha
德尔福。
我有一个ImageList(TImageList或DevExpress的TcxImageList),其中包含使用alpha通道的PNG图片。 图片的RGB部分是黑色正方形。 Alpha通道包含真实图片的形状。 我想更改黑色正方形的颜色,同时将形状保留在alpha通道中。 (所以最终我改变了图片形状图标的颜色。)
我尝试了很多方法,但都没有成功。 我试图更改列表的属性,并导出RGB和alpha分隔。
TImageList:不导出遮罩。 如果我执行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:它将图片+蒙版加载到BMPimg中,并且蒙版是黑色正方形,而不是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;
当在图像列表的PNG图像中保留Alpha通道时,如何更改前景色?
Ehhhh。
我必须手动设置BMPmask的大小,然后掩码正确。
...
BMPmask.Width := il1.Width;
BMPmask.Height := il1.Height;
TImageListHack(il1).GetImages(0, BMPimg, BMPmask);
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.