gpt4 book ai didi

Delphi:ImageList中的PNG,改变颜色同时保持alpha

转载 作者:行者123 更新时间:2023-12-02 02:30:37 24 4
gpt4 key购买 nike

德尔福。

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com