2014-07-20 16 views
0

J'ai donc besoin de mélanger 2 couleurs avec des valeurs alpha différentes. L'une ou l'autre couleur peut avoir une couleur alpha de 0-255. Voici l'algorithme que j'utilise maintenant et ça ne marche pas. Si l'alpha est supérieur à 1 pour l'une ou l'autre couleur, alors la couleur entière devient solide. Sur une échelle de 0-255, 1 devrait être presque entièrement transparent. Que dois-je changer pour y parvenir?Fusionner 2 couleurs en Java

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

Double vérifiez que 'ratio' est dans la plage de 0.0-1.0 – vandale

+0

Juste une note: Dans Java, vous devez déclarer vos tableaux avec les parenthèses avec le type:' float [] rgb1 = new float [3] '. – Keppil

+0

@vandale Il est défini sur 0,5 – user3140916

Répondre

0

Si tout ce que vous devez faire est d'avoir la valeur alpha soit dans la gamme de 0-255 au lieu de 0,0-1,0, puis prendre la valeur alpha et le diviser par 255:

public void blend(Color color1, Color color2, int alpha) { 
    float r = alpha/255.0f; 
    float ir = 1.0f - alpha/255.0f; 
    ... 
}