void MixColor(uint clr, uint &addr) { // mix the color in the cell at addr with the color clr and enter the new value in the same cellif (GETRGBA(addr) == 0) {
addr = clr;
return;
}
union argb {
uint clr;
uchar c[4];
} C;
C.clr = clr;
if (C.c[3] == 0) return;
if (C.c[3] == 255) {
addr = clr;
return;
}
argb Bg;
Bg.clr = addr;
float a = C.c[3] / (float)255.0;
float b = Bg.c[3]/ (float)255.0;
float ab = b+a-b*a;
C.c[3]=uchar(ab*255+0.49999);
if (ab>0.002) {
float a0 = a/ab;
float a1 = b*(1-a)/ab;
C.c[2] = uchar(C.c[2]*a0+Bg.c[2]*a1);
C.c[1] = uchar(C.c[1]*a0+Bg.c[1]*a1);
C.c[0] = uchar(C.c[0]*a0+Bg.c[0]*a1);
}
addr = C.clr;
}
彼得,你的图标边缘有问题。非常刺眼。

这是因为你没有将使用阿尔法通道的颜色与背景混合。下面是混合两种使用阿尔法通道的颜色所需的功能。
您还可以查看如何使用 pnghttps://www.mql5.com/en/code/45439
彼得,你的图标边缘有问题。
这很伤眼睛。
这是因为你没有将使用 alpha 通道的颜色与背景混合。以下是混合使用 alpha 通道的颜色的必要功能。
您还可以查看如何使用 pnghttps://www.mql5.com/en/code/45439
你好,尼古拉
现在有很多来源提供透明背景的普通 png 图标。
例如:https://pngtree.com/so/colored-icons
当然,你自己看吧,没有这些边缘伪影,你的图形用户界面看起来会更高质量。
当然,您可以自行查看,但如果没有这种边缘像素化现象,您的图形用户界面会好看得多。
现在有很多来源提供透明背景的普通 png 图标。
例如: https://pngtree.com/so/colored-icons
我不是在争辩。当然会更好看。顺便说一句,我的图标做得很好。请注意任务栏按钮上的阴影。我让背景透明。但像素中存在颜色 "垃圾",很难通过编程识别。比如边缘上的这些斑点。它们并不是严格意义上的一种颜色,很难将它们从图标本身分离出来并去除。这就是问题所在。
透明背景 的正常 png 图标中 没有"垃圾"。 垃圾出现在处理错误时。上面已经给出了正确的功能 。
我以前也是这样处理阴影的。现在我不再这么做了。
没有阴影、渐变和卷发的现代时尚。
简而言之,极简主义有利于提高渲染性能。
在 透明背景 的正常 png 文件中 没有垃圾。垃圾出现在不正确的处理过程中。上面给出了正确的功能 。
...
我说的是透明背景(带 alpha 通道)的 png 图标。
我以前也用过阴影。现在我不这么做了
没有阴影、渐变和卷曲的现代时尚。
简而言之就是极简主义,这有利于提高渲染效果。