所以我需要将2种颜色与不同的alpha值混合。两种颜色都可以具有0-255的alpha颜色。这是我现在使用的算法,它不起作用。如果任一颜色的alpha值大于1,则整个颜色变为实心。在0-255 1的范围内,应该几乎完全透明。为了达到这个目的,我需要改变什么?
public void blend(Color color1, Color color2, double ratio) {
float r = (float) ratio;
float ir = (float) 1.0 - r;
float[] rgb1 = new float[3];
float[] rgb2 = new float[3];
color1.getColorComponents(rgb1);
color2.getColorComponents(rgb2);
Color color = new Color(rgb1[0] * r + rgb2[0] * ir, rgb1[1] * r + rgb2[1] * ir, rgb1[2] * r + rgb2[2] * ir);
this.color = color;
}
答案 0 :(得分:0)
如果你需要做的就是让alpha值在0-255而不是0.0-1.0的范围内,那么取alpha值并除以255:
public void blend(Color color1, Color color2, int alpha) {
float r = alpha/255.0f;
float ir = 1.0f - alpha/255.0f;
...
}