gpt4 book ai didi

java - 如何正确混合两种int颜色

转载 作者:搜寻专家 更新时间:2023-11-01 01:21:47 25 4
gpt4 key购买 nike

我正在尝试混合编码为整数的两种颜色。这是我的小功能:

int blend (int a, int b, float ratio) {
if (ratio > 1f) {
ratio = 1f;
} else if (ratio < 0f) {
ratio = 0f;
}
float iRatio = 1.0f - ratio;

int aA = (a >> 24 & 0xff);
int aR = ((a & 0xff0000) >> 16);
int aG = ((a & 0xff00) >> 8);
int aB = (a & 0xff);

int bA = (b >> 24 & 0xff);
int bR = ((b & 0xff0000) >> 16);
int bG = ((b & 0xff00) >> 8);
int bB = (b & 0xff);

int A = ((int)(aA * iRatio) + (int)(bA * ratio));
int R = ((int)(aR * iRatio) + (int)(bR * ratio));
int G = ((int)(aG * iRatio) + (int)(bG * ratio));
int B = ((int)(aB * iRatio) + (int)(bB * ratio));

return A << 24 | R << 16 | G << 8 | B;
}

似乎一切正常,但某些参数会产生错误的颜色。例如:

    int a = 0xbbccdd;
int b = 0xbbccdd;
int c = blend(a, b, 0.5f); // gives 0xbaccdc, although it should be 0xbbccdd

我的猜测是 float 比率的乘法或转换是这里的罪魁祸首,但我无法弄清楚它们有什么问题......

那么在java中混合两种颜色的正确方法是什么?

最佳答案

我的猜测是转换为 int 应该在添加之后完成。像这样

int a = (int)((aA * iRatio) + (bA * ratio));

我还建议在使用变量时使用 Java 命名约定。只有常量应该是大写的。

关于java - 如何正确混合两种int颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19398238/

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