首页 > 解决方案 > 使用矩阵改变图像的对比度是否正确?

问题描述

所以我一直在尝试改变图像与矩阵的对比度,这就是我想出的:

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 之间

它给了我次优的结果

标签: flutterdartcolormatrixcolorfiltercolormatrixfilter

解决方案


我刚刚意识到最后一列不是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;

推荐阅读