Flutter 如何在Flatter中创建颜色矩阵?

Flutter 如何在Flatter中创建颜色矩阵?,flutter,Flutter,我希望使用ColorFiltered小部件应用颜色饱和度矩阵,但不知道如何制作矩阵。在我的例子中,我用以下方法解决了这个问题: class CustomSubFilters extends ColorFilter { CustomSubFilters.matrix(List<double> matrix) : super.matrix(matrix); ///defaults to unity matrix when s = 0; factory CustomSubFi

我希望使用ColorFiltered小部件应用颜色饱和度矩阵,但不知道如何制作矩阵。

在我的例子中,我用以下方法解决了这个问题:

class CustomSubFilters extends ColorFilter {
  CustomSubFilters.matrix(List<double> matrix) : super.matrix(matrix);

  ///defaults to unity matrix when s = 0;
  factory CustomSubFilters.saturate(double sat) {
    num x = 1 + sat;
    num lumR = 0.3086;
    num lumG = 0.6094;
    num lumB = 0.0820;

return CustomSubFilters.matrix(<double>[
  lumR * (1 - x) + x,
  lumG * (1 - x),
  lumB * (1 - x),
  0,
  0,
  lumR * (1 - x),
  lumG * (1 - x) + x,
  lumB * (1 - x),
  0,
  0,
  lumR * (1 - x),
  lumG * (1 - x),
  lumB * (1 - x) + x,
  0,
  0,
  0,
  0,
  0,
  1,
  0,
]);
class CustomSubFilter扩展了ColorFilter{
CustomSubFilters.matrix(列表矩阵):super.matrix(矩阵);
///s=0时默认为单位矩阵;
工厂定制副过滤器。饱和(双饱和){
numx=1+sat;
num lumR=0.3086;
num lumG=0.6094;
num lumB=0.0820;
返回CustomSubFilters.matrix([
lumR*(1-x)+x,
lumG*(1-x),
lumB*(1-x),
0,
0,
lumR*(1-x),
lumG*(1-x)+x,
lumB*(1-x),
0,
0,
lumR*(1-x),
lumG*(1-x),
lumB*(1-x)+x,
0,
0,
0,
0,
0,
1.
0,
]);
}


当然,您的实现非常灵活,只是不要忘记扩展ColorFilter类。

在我的例子中,我用以下方法解决了它:

class CustomSubFilters extends ColorFilter {
  CustomSubFilters.matrix(List<double> matrix) : super.matrix(matrix);

  ///defaults to unity matrix when s = 0;
  factory CustomSubFilters.saturate(double sat) {
    num x = 1 + sat;
    num lumR = 0.3086;
    num lumG = 0.6094;
    num lumB = 0.0820;

return CustomSubFilters.matrix(<double>[
  lumR * (1 - x) + x,
  lumG * (1 - x),
  lumB * (1 - x),
  0,
  0,
  lumR * (1 - x),
  lumG * (1 - x) + x,
  lumB * (1 - x),
  0,
  0,
  lumR * (1 - x),
  lumG * (1 - x),
  lumB * (1 - x) + x,
  0,
  0,
  0,
  0,
  0,
  1,
  0,
]);
class CustomSubFilter扩展了ColorFilter{
CustomSubFilters.matrix(列表矩阵):super.matrix(矩阵);
///s=0时默认为单位矩阵;
工厂定制副过滤器。饱和(双饱和){
numx=1+sat;
num lumR=0.3086;
num lumG=0.6094;
num lumB=0.0820;
返回CustomSubFilters.matrix([
lumR*(1-x)+x,
lumG*(1-x),
lumB*(1-x),
0,
0,
lumR*(1-x),
lumG*(1-x)+x,
lumB*(1-x),
0,
0,
lumR*(1-x),
lumG*(1-x),
lumB*(1-x)+x,
0,
0,
0,
0,
0,
1.
0,
]);
}

当然,您的实现是灵活的,只是不要忘记扩展ColorFilter类