当用户选择的壁纸太亮或太暗时,我想更改文本视图的颜色,基本上充当最新的启动器,例如,如果将其设置为白色墙纸,则将所有文本视图更改为深色,但是我不知道如何检测到。
帮助。预先感谢。
答案 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位)。然后,选择一个阈值,高于该阈值将图像视为亮/暗。