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;
}
ピーター、アイコンの端に問題があるね。とても耳障りだ。

これは、アルファチャンネルを使用する色を背景と混ぜていないからです。アルファチャンネルを使用する2つの色を混ぜるために必要な関数はこちらです。
pnghttps://www.mql5.com/en/code/45439 の扱い方もご覧ください。
ピーター、アイコンのエッジに問題があるね。
目にとても負担がかかる。
これは、アルファチャンネルを使う色を背景と混ぜていないからです。アルファチャンネルを使う色を混ぜるために必要な関数はこちらです。
pnghttps://www.mql5.com/en/code/45439 の扱い方もご覧ください。
こんにちは、ニコライ!
現在、背景が透明な普通のpngアイコンのソースはたくさんあります。
例えばhttps://pngtree.com/so/colored-icons
自分の目で確かめてください。もちろん、エッジのアーティファクトがなければ、GUIはずっと高品質に見えます。
もちろん自分の目で確かめてほしいが、GUIの端にこのようなピクセレーションがなければ、もっと見栄えがよくなるはずだ。
現在、透明な背景を持つ通常のpngアイコンを持つ多くのソースがあります。
例:https://pngtree.com/so/colored-icons
議論しているわけではない。もちろん、その方が見栄えはいいだろう。ところで、アイコンはかなりいい仕事をしている。タスクバーのボタンの影に注目してほしい。背景は透明にしている。しかし、ピクセルの中には色の「ゴミ」があり、プログラムで識別するのは難しい。例えば、端にあるこのような斑点だ。これらは厳密には一色ではないので、アイコン自体から分離して取り除くのは難しい。これが問題なのです。
背景が透明 な通常の pngには ゴミはない。 ゴミが出るのは処理が間違っているときだ。正しい機能は上に 書いた 。
以前はシャドウも同じようにしていた。今はもうやっていない。
影もグラデーションもカールもないモダンなファッション。
要するにレンダリングパフォーマンスを重視したミニマリズムだ。
背景が透明 な通常の pngでは ゴミは出ない。 ゴミは不正確な処理で現れる。正しい関数は上記の 通りです 。
...
私は背景が透明 な(アルファチャンネル付きの)pngアイコンについて話しています。