我正在与 一起工作RGB
,但我遇到了这个数学问题。除非我读错了下面的引用,否则我需要取这个结果,这是一个看起来像的值0.01234
并将其反转。bgc = bottom color
和fgc = top color
。我在反转结果时遇到问题。现在的方式我得到了Color Dodge
效果而不是Color Burn
效果。我尝试过乘法、除法、加法、减法,但似乎没有任何效果。我能做些什么来反转结果?
(255f - (float)bgc[0]) / (fgc[0] << 8)
这是完整的方法:
public static int colorBurn(int bg, int fg){
int[] bgc = Colors.getrgba(bg);
int[] fgc = Colors.getrgba(fg);
int r = (bgc[0] == 255 ? bgc[0] : (int)Math.min(0, (255f - (float)bgc[0]) / (fgc[0] << 8)));
int g = (bgc[1] == 255 ? bgc[1] : (int)Math.min(0, (255f - (float)bgc[1]) / (fgc[1] << 8)));
int b = (bgc[2] == 255 ? bgc[2] : (int)Math.min(0, (255f - (float)bgc[2]) / (fgc[2] << 8)));
return Colors.rgba(r, g, b);
}
这是维基百科所说的:
颜色加深模式将反转的底层除以顶层,然后反转结果。这会使顶层变暗,增加对比度以反映底层的颜色。底层越深,使用的颜色越多。与白色混合不会产生任何差异。