检测背景墙纸是否太亮或太暗

时间:2018-09-06 12:14:13

标签: android android-launcher android-wallpaper android-color

当用户选择的壁纸太亮或太暗时,我想更改文本视图的颜色,基本上充当最新的启动器,例如,如果将其设置为白色墙纸,则将所有文本视图更改为深色,但是我不知道如何检测到。

帮助。预先感谢。

2 个答案:

答案 0 :(得分:1)

这将计算位图图像的(估计)亮度。 参数“ skipPixel”定义了要进行亮度计算要跳过的像素数,因为计算每个像素的亮度可能会占用大量运行时间。值越高,性能越好,但结果值却越估算。 当skipPixel等于1时,该方法实际上是计算实际的平均亮度,而不是估计的平均值。 因此,“ skipPixel”必须为1或更大! 该函数返回的亮度级别在0到255之间,其中0 =完全黑,而255 =完全亮。 因此,您必须自己选择“亮”或“暗”对您意味着什么。

public int calculateBrightness(android.graphics.Bitmap bitmap, int skipPixel) {
    int R = 0; int G = 0; int B = 0;
    int height = bitmap.getHeight();
    int width = bitmap.getWidth();
    int n = 0;
    int[] pixels = new int[width * height];
    bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
    for (int i = 0; i < pixels.length; i += skipPixel) {
        int color = pixels[i];
        R += Color.red(color);
        G += Color.green(color);
        B += Color.blue(color);
        n++;
    }
    return (R + B + G) / (n * 3);
}

为了从设备上获取位图(图像),可以使用以下代码:

final String photoPath = "path to your photo"; // Add photo path here
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(photoPath, options);

答案 1 :(得分:0)

我建议您对每个像素取r,g和b值的平均值(创建单色图片),然后对所有像素取平均值以获得一个全局平均值。该平均值将在0到255之间(如果图像的深度为8位)。然后,选择一个阈值,高于该阈值将图像视为亮/暗。