【发布时间】:2020-10-14 18:50:29
【问题描述】:
我正在构建一个内置摄像头的应用程序。
拍完照片后,我想分析一下这张照片的亮度,如果不好就重新拍照。
这是我现在的代码,它是我在 Dart 中找到并编写的一个 javascript 函数:
感谢@Abion47
编辑 1
for (int i = 0; i < pixels.length; i++) {
int pixel = pixels[i];
int b = (pixel & 0x00FF0000) >> 16;
int g = (pixel & 0x0000FF00) >> 8;
int r = (pixel & 0x000000FF);
avg = ((r + g + b) / 3).floor();
colorSum += avg;
}
brightness = (colorSum / (width * height)).floor();
}
brightness = (colorSum / (width * height)).round();
// I tried with this other code
//brightness = (colorSum / pixels.length).round();
return brightness;
但我的白色亮度比黑色低,数字有点奇怪。
你知道知道亮度的更好方法吗?
解决方案:
经过进一步调查,我们找到了解决方案,我们在进行图像解码时出错,但我们使用了 Image 函数。
这是我们的最终代码:
Image image = decodeImage(file.readAsBytesSync());
var data = image.getBytes();
var colorSum = 0;
for(var x = 0; x < data.length; x += 4) {
int r = data[x];
int g = data[x + 1];
int b = data[x + 2];
int avg = ((r + g + b) / 3).floor();
colorSum += avg;
}
var brightness = (colorSum / (image.width * image.height)).floor();
return brightness;
希望对你有帮助。
【问题讨论】:
-
图像对象的宽度和高度是多少,你是如何得到它们的?
-
此外,通过将 int 转换为十六进制字符串然后解析子字符串来检索颜色通道 A) 可能不像您认为的那样工作,因为这些奇怪的子字符串范围和 B)这是一种极其缓慢的方法。
-
我用image_size_getter计算图片和高度。
-
是的,我知道这不是最好的方法,但不幸的是我没有找到更好的方法:(
-
为什么?您正在使用
image包。image对象已经具有width和height属性。
标签: image flutter dart camera brightness