Java 如何混合不同体积和化学性质的多种颜色?

Java 如何混合不同体积和化学性质的多种颜色?,java,colors,light,chemistry,Java,Colors,Light,Chemistry,我发现了,并希望能够混合不同体积的多种颜色。专业人士都知道,颜色的混合取决于颜色的体积,但也有一个参数告诉我们颜色是如何混合的。 由于化学反应,两种不同品牌的相同颜色不会以相同的方式混合。分光光度计将显示red1+blue1混合物和red2+blue2混合物之间的差异,这取决于每个组分的颜料性质等。 因此,我们必须使用一个参数“prop”,它给出了每个颜色品牌相对于其他品牌的相对混合能力 String[] colors = {"#BFD000", "#F36285&

我发现了,并希望能够混合不同体积的多种颜色。专业人士都知道,颜色的混合取决于颜色的体积,但也有一个参数告诉我们颜色是如何混合的。 由于化学反应,两种不同品牌的相同颜色不会以相同的方式混合。分光光度计将显示red1+blue1混合物和red2+blue2混合物之间的差异,这取决于每个组分的颜料性质等。 因此,我们必须使用一个参数“prop”,它给出了每个颜色品牌相对于其他品牌的相对混合能力

String[] colors = {"#BFD000", "#F36285", "#F0EBE2" , "#0066c1"};
float[] ratios = {1f, 2f, 3f, 1.5f};
float[] props =  {.7f, .32f, .43f, .15f};
让我们混合这四种颜色,一卷#BFD000和两卷#F36285,依此类推

String blend(String[] colors, float[] ratios, float[] props)) {
    
    int size = colors.length;
    int alpha = 0, red = 0, green = 0, blue = 0;
    float totalRatio = 0f;
    
    for(int i = 0; i < size; i++) totalRatio = totalRatio + ratios[i];
            
    for(int i = 0; i < size; i++) {
        Color strColor = Color.decode(colors[i]);
        alpha = (int)(alpha + (strColor.getRGB() >> 24 & 0xff) * (ratios[i]/totalRatio) * props[i]);
        red = (int)(red + ((strColor.getRGB() & 0xff0000) >> 16) * (ratios[i]/totalRatio)* props[i]);
        green = (int)(green + ((strColor.getRGB() & 0xff00) >> 8) * (ratios[i]/totalRatio)* props[i]);
        blue = (int)( blue + (strColor.getRGB() & 0xff) * (ratios[i]/totalRatio)* props[i]);
    }
    
    Color color = new Color( alpha << 24 | red << 16 | green << 8 | blue );
    String hex = String.format("#%02x%02x%02x", color.getRed(), color.getGreen(), color.getBlue());  
    
    return hex;
}   
字符串混合(字符串[]颜色、浮动[]比率、浮动[]道具)){
int size=colors.length;
int alpha=0,红色=0,绿色=0,蓝色=0;
浮动总比率=0f;
对于(inti=0;i>24&0xff)*(比率[i]/totalRatio)*道具[i]);
红色=(int)(红色+((strColor.getRGB()&0xff0000)>>16)*(比率[i]/totalRatio)*道具[i]);
绿色=(int)(绿色+((strColor.getRGB()&0xff00)>>8)*(比率[i]/totalRatio)*道具[i]);
蓝色=(int)(蓝色+(strColor.getRGB()&0xff)*(比率[i]/totalRatio)*道具[i]);
}
颜色=新颜色(alpha)