gpt4 book ai didi

java - 计算两种颜色的组合颜色(Over 运算符)

转载 作者:太空狗 更新时间:2023-10-29 16:23:10 25 4
gpt4 key购买 nike

这是针对 Android 应用程序的。假设我有两种带 alpha 的颜色

int color1 = 0x12345678  // aarrggbb
int color2 = 0x87654321

如何计算 color2 层与 color1 层的组合颜色?

我在这里找到了一个讨论和公式,但在编写我自己的代码之前先在这里检查它是否已经在 Android 和/或 Java 中可用。

http://en.wikipedia.org/wiki/Alpha_compositing#Analytical_derivation_of_the_over_operator

编辑:请注意,问题的目标不是以位图结尾,而是以颜色结尾(例如 aarrggbb int)。

最佳答案

我最终实现了它。直接重写维基百科公式。任何问题实现?

// a2 over a1
private static int compositeAlpha(int a1, int a2) {
return 255 - ((255 - a2) * (255 - a1)) / 255;
}


// For a single R/G/B component. a = precomputed compositeAlpha(a1, a2)
private static int compositeColorComponent(int c1, int a1, int c2, int a2, int a) {
// Handle the singular case of both layers fully transparent.
if (a == 0) {
return 0x00;
}
return (((255 * c2 * a2) + (c1 * a1 * (255 - a2))) / a) / 255;
}

// argb2 over argb1. No range checking.
public static int compositeColor(int argb1, int argb2) {
final int a1 = Color.alpha(argb1);
final int a2 = Color.alpha(argb2);

final int a = compositeAlpha(a1, a2);

final int r = compositeColorComponent(Color.red(argb1), a1,
Color.red(argb2), a2, a);
final int g = compositeColorComponent(Color.green(argb1), a1,
Color.green(argb2), a2, a);
final int b = compositeColorComponent(Color.blue(argb1), a1,
Color.blue(argb2), a2, a);

return Color.argb(a, r, g, b);
}

关于java - 计算两种颜色的组合颜色(Over 运算符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9352124/

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