flutter - 使用矩阵改变图像的对比度是否正确?
问题描述
所以我一直在尝试改变图像与矩阵的对比度,这就是我想出的:
final defaultColorMatrix = const <double>[
1, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0,
];
List<double> calculateContrastMatrix(double contrast) {
final m = List<double>.from(defaultColorMatrix);
m[0] = contrast;
m[6] = contrast;
m[12] = contrast;
m[5] = (1 - contrast) / 2;
m[10] = (1 - contrast) / 2;
m[15] = (1 - contrast) / 2;
return m;
是对比度和可调节值,介于 0 和 1 之间
它给了我次优的结果
解决方案
我刚刚意识到最后一列不是m[5]
, m[10]
,m[15]
而是m[4]
, m[9]
, m[14]
。我忘记了 dart 的数组索引从 0 开始。
我还忘记了颤振矩阵中的最后一列未标准化为它期望值在 0-255 之间,因此正确的解决方案是:
List<double> calculateContrastMatrix(double contrast) {
final m = List<double>.from(defaultColorMatrix);
m[0] = contrast;
m[6] = contrast;
m[12] = contrast;
m[4] = ((1 - contrast) / 2) * 255;
m[9] = ((1 - contrast) / 2) * 255;
m[14] = ((1 - contrast) / 2) * 255;
return m;
推荐阅读
- json - Terraform aws_dynamodb_table_item - 将多行 JSON 插入属性
- numpy - Numpy 将“2D 多列”重塑为“2D 单列的 3D”
- r - 使用 R 更改 Excel 工作表中的变量名称
- vue.js - 如何使用 Cloud Native Buildpacks 构建服务 Vue SPA 的容器
- powershell - PowerShell - 为什么在这行代码中使用数组?
- c - K&R 第 8.7 节 for free() 中的循环
- flutter - Flutter:默认值的好做法是什么(关于 shared_preferences)
- c# - 是否可以在文件中保存/存储数组中的对象?
- r - 如何在 R 中编写简单的循环来更新 URL 中的数字?
- java - Java“tasklist.exe /fo csv /nh”命令在等待过程中永远加载