Натуральное смешивание цветов java

svk

1,185
3
Вот сделал метод для натурального смешивания цветов.

Код вроде полезный, много кому пригодится :)

Код:
public static int[] compoundRgb(int[] colorRgb1, int[] colorRgb2)
    {
        float[] colorCmyk1 = rgbConvertToCmyk(colorRgb1);
        float[] colorCmyk2 = rgbConvertToCmyk(colorRgb2);
                                
        float[] colorCmykR = new float[4];
        for(int i = 0; i < 4; i++)
        {
            colorCmykR[i] = (colorCmyk1[i] + colorCmyk2[i])/2;
        }
                
        return cmykConvertToRgbInt(colorCmykR);
    }
    
    public static float[] rgbConvertToCmyk(int[] color)
    {
        float max = getMaxRGB(color);
        float k = 1.0F - (max/255);

        if(k != 0)
        {
            float c = (1-color[0]/255.0F-k) / (1-k);
            float m = (1-color[1]/255.0F-k) / (1-k);
            float y = (1-color[2]/255.0F-k) / (1-k);
            
            return new float[]{c, m, y, k};
        }
        else
        {
            float c = (1-color[0]/255.0F);
            float m = (1-color[1]/255.0F);
            float y = (1-color[2]/255.0F);
            
            return new float[]{c, m, y, k};
        }    
    }
    
    public static int[] cmykConvertToRgbInt(float[] color)
    {
        int r = (int) (255 * (1-color[0]) * (1-color[3]));
        int g = (int) (255 * (1-color[1]) * (1-color[3]));
        int b = (int) (255 * (1-color[2]) * (1-color[3]));
        
        return new int[]{r, g, b};
    }
    
    public static int getMaxRGB(int[] color)
    {
        int max = 0;
        
        for(int i : color)
        {
            if(i > max)
            {
                max = i;
            }
        }
        
        return max;
    }
[merge_posts_bbcode]Добавлено: 05.01.2016 23:35:06[/merge_posts_bbcode]

Знаю что можно было через Match сделать поиск наивысшего числа, но велик первый пришел на ум :)
 
Назад
Сверху