Я хотел рассчитать яркость изображения UintList. Изображение, которое я использовал, выбрано с моего телефона (с помощью плагина image_picker во флаттере) Я попытался для l oop для каждого значения в этом списке и сделал это:
int r = 0, b = 0, g = 0, count = 0;
for (int value in imageBytesList) {
/// The red channel of this color in an 8 bit value.
int red = (0x00ff0000 & value) >> 16;
/// The blue channel of this color in an 8 bit value.
int blue = (0x0000ff00 & value) >> 8;
/// The green channel of this color in an 8 bit value.
int green = (0x000000ff & value) >> 0;
r += red;
b += blue;
g += green;
count++;
}
double result = (r + b + g) / (count * 3);
Я знаю, что результат должен представлять уровень яркости от 0 до 255, где 0 = полностью черный и 255 = полностью яркий. но, что я получаю, это действительно странные значения, такие как 0,0016887266175341332. Какие ошибки в расчетах я делаю? (Я знаю, что мой метод в корне неверен, но я не смог найти способ).
Виджет флаттера действительно конвертирует этот Uint8List из памяти в изображение с правильной высотой и шириной, используя конструктор Image.memory()
. Что такое логика c за ней?