我想叠加或更多 根据现有的两种颜色计算新颜色。
我的颜色存储如下:
int color1 = 0xffFF00FF;
int color2 = 0x00FFFFFF;
现在如您所知,这是以十六进制格式分配的。我知道这些将在运行时(或在编译期间)转换为"实数"。
如您所知,这些十六进制"字符串"是用0x
后面的前两个符号构造的,代表这种颜色的字母(例如 在这种情况下ff
和00
)。
我现在想覆盖它们,以便我可以获得新的颜色 int 值。我希望能够选择哪种叠加算法(屏幕、乘法、加法、减法、除法等)。
我在互联网上做了很多研究,但没有告诉我如何解决我的问题。
我已经尝试了很多东西,并进行了密集的测试和调试,但现在我不再知道该怎么做。
例如:
我尝试做一些简单的数学运算来完成添加方法等,如下所示:
return a + b;
return a - b;
return a * b;
return a / b;
// Even stuff like color burn
return (1 - (1 - a) / b);
我从维基百科上得到了这些,但我想,基于基于 RGBA 格式的输出 (255/255/255/100)
而不是十六进制的东西。
然后我尝试使用 java.awt.Color
类和二进制运算(a && 0xff)
等将十六进制内容转换为 RGBA 值。
真的为此工作了好几天,我不知道我是如何详细完成所有这些事情的,但我知道它们都没有按预期工作(例如,没有考虑 Alpha 值。
也许我只是有一个完全错误的起点,或者只是在寻找并朝着错误的方向努力。到目前为止,所有内容(也在SO上)都不足以满足我的特定情况。我发现的大多数东西都在谈论十六进制字符串到 int 对话和相反的;)
提前感谢,
基督教
我想你需要这些值的加权平均值。像这样:
int color1 = 0xffFF00FF;
int color2 = 0x00FFFFFF;
Color c1 = new Color(color1, true);
Color c2 = new Color(color2, true);
int a1 = c1.getAlpha();
int a2 = c2.getAlpha();
Color result = new Color((c1.getRed() * a1 + c2.getRed() * a2) / (a1 + a2),
(c1.getGreen() * a1 + c2.getGreen() * a2) / (a1 + a2),
(c1.getBlue() * a1 + c2.getBlue() * a2) / (a1 + a2),
(c1.getAlpha() + c2.getAlpha()) / 2);
System.out.println(c1);
System.out.println(c2);
System.out.println(result);
至少对于 3 种颜色 (rgb) 来说,这应该没问题。我不太确定阿尔法...