Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 使用矩阵改变图像对比度是否正确?_Flutter_Dart_Colormatrix_Colorfilter_Colormatrixfilter - Fatal编程技术网

Flutter 使用矩阵改变图像对比度是否正确?

Flutter 使用矩阵改变图像对比度是否正确?,flutter,dart,colormatrix,colorfilter,colormatrixfilter,Flutter,Dart,Colormatrix,Colorfilter,Colormatrixfilter,编辑:已解决-我在下面的答案中发布了解决方案 所以我一直在尝试改变图像与矩阵的对比度,这就是我想到的: 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&

编辑:已解决-我在下面的答案中发布了解决方案

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

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;
final defaultColorMatrix=const[
1, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0,
];
列表CalculateTrastMatrix(双对比度){
最终m=列表来源(defaultColorMatrix);
m[0]=对比度;
m[6]=对比度;
m[12]=对比度;
m[5]=(1-对比度)/2;
m[10]=(1-对比度)/2;
m[15]=(1-对比度)/2;
返回m;
对比度和可调值介于0和1之间


它给了我次优的结果

我刚刚意识到最后一列不是m[5],m[10],m[15],而是它的m[4],m[9],m[14]忘记了dart的数组索引从0开始…facepalm

并且还忘记了颤振矩阵中的最后一列未标准化为,它期望值在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;
列表CalculateTrastMatrix(双对比){
最终m=列表来源(defaultColorMatrix);
m[0]=对比度;
m[6]=对比度;
m[12]=对比度;
m[4]=((1-对比度)/2)*255;
m[9]=((1-对比度)/2)*255;
m[14]=((1-对比度)/2)*255;
返回m;