Определить, фоновые обои слишком светлые или слишком темные - PullRequest
0 голосов
/ 06 сентября 2018

Я хотел бы изменить цвет моих текстовых представлений, когда обои, выбранные пользователем, слишком светлые или слишком темные, действуя в основном как последние средства запуска, которые, например, если установлены белые обои, меняют все текстовые представления на темный цвет, ноЯ не знаю, как это обнаружить.

Помощь.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Рассчитывает (оценочную) яркость растрового изображения. Аргумент "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 голосов
/ 06 сентября 2018

Я хотел бы предложить, чтобы вы взяли среднее значение r, g и b для каждого пикселя (создает монохромное изображение), а затем усреднили все пиксели, чтобы получить одно глобальное среднее. Это среднее значение будет между 0 и 255 (если изображение имеет глубину 8 бит). Затем выберите порог, выше которого изображение будет считаться светлым / темным.

...