计算两个十六进制整数值的混合



我想叠加或更多 根据现有的两种颜色计算新颜色。

我的颜色存储如下:

int color1 = 0xffFF00FF;
int color2 = 0x00FFFFFF;

现在如您所知,这是以十六进制格式分配的。我知道这些将在运行时(或在编译期间)转换为"实数"。

如您所知,这些十六进制"字符串"是用0x后面的前两个符号构造的,代表这种颜色的字母(例如 在这种情况下ff00)。

我现在想覆盖它们,以便我可以获得新的颜色 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) 来说,这应该没问题。我不太确定阿尔法...

相关内容

  • 没有找到相关文章

最新更新