十六进制颜色的变体

时间:2019-05-07 05:23:21

标签: android

鉴于其变种百分比,我正在尝试获取十六进制颜色的变种。例如,我的十六进制颜色是#FFFFFF,我需要找到五个变体,其中95%是#F2F2F2,85%是#D9D9D9,75%是#BFBFBF,65%是#A6A6A6,50%是#808080。我如何以编程方式计算这个?如何根据百分比提高或降低颜色代码的亮度?

尝试了代码段:

void brighten(int color, float fraction) {

    int r = Color.red(color);
    int g = Color.green(color);
    int b = Color.blue(color);

    r += (int) (fraction * (255 - r));
    g += (int) (fraction * (255 - g));
    b += (int) (fraction * (255 - b));

    if (r < 0) {
        r = 0;
    }
    if (r > 255) {
        r = 255;
    }
    if (g < 0) {
        g = 0;
    }
    if (g > 255) {
        g = 255;
    }
    if (b < 0) {
        b = 0;
    }
    if (b > 255) {
        b = 255;
    }

    String resultColor = "#" + Integer.toHexString(Color.rgb((int) r, (int) g, (int) b) & 0x00ffffff);    

}

此功能在某种程度上适用于颜色,因为它仅以给定的百分比变暗。但这不适用于所有颜色统一(例如:#000000)。

1 个答案:

答案 0 :(得分:0)

使用以下方法解决您的问题。

// Function Calling
brighten(0x00FFFFFF, 65); //Para 1 : color code  // Para 2 : percentage of color code that what you want.

void brighten(int color, int persontage) {

            double r = Color.red(color);
            double g = Color.green(color);
            double b = Color.blue(color);

            r = Math.ceil((r*persontage) / 100);
            g = Math.ceil((g*persontage) / 100);
            b = Math.ceil((b*persontage) / 100);


            String resultColor = "#" + Integer.toHexString(Color.rgb((int) r, (int) g, (int) b) & 0x00ffffff);
            Log.i(TAG, "brighten: resultColor : " + resultColor);
        }