检测背景墙纸是太亮还是太暗

问题描述 投票:1回答:2

当用户选择的壁纸太亮或太暗时,我想改变我的文本视图颜色基本上作为最新的发射器,例如如果设置了白色壁纸,将所有文本视图更改为深色但我不知道如何检测。

救命。提前致谢。

android android-launcher android-wallpaper android-color
2个回答
2
投票

这计算位图图像的(估计的)亮度。参数“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);

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.