【Flutter 组件集录】ImageFiltered 图像滤镜

探索Flutter中的模糊毛玻璃滤镜效果:ImageFilter介绍使用和深入解析 在Flutter中,通过`BackdropFilter`和`ImageFilter.blur`实现图像模糊效果简单而高效。本文介绍了如何动态调整模糊程度,以及如何利用`TileMode`参数改变模糊效果的边缘行为,增强用户交互和视觉体验。通过添加滑动条和下拉菜单,用户可以实时调整模糊效果,并选择`clamp`、`mirror`或`repeated`模式以探索不同的视觉效果。这些技术不仅提升了应用的美观性,也增加了应用的互动性,为用户提供了丰富的定制选项,使Flutter应用开发更具创意和灵活性。 阅读详情

ImageFiltered 也是官方之后更新一批组件之一,用于对图像添加滤镜效果,比如图像的颜色矩阵变换、高斯模糊、图像矩阵变换等。注意,这不是仅指 Image 组件,而是对于任何的 Widget 都适用。 在其诞生之前,有一个和其功能类似的组件 BackdropFilter,但该组件的作用于是 背景,如果想对特点的组件进行特效处理,就很不方便 。ImageFiltered 的引入,让这一切变得简单。

FlutterUnit 中滤色效果

一、认识 ImageFiltered 组件

在 ImageFiltered 组件中,只需要传入一个 ImageFilter 对象即可。该类型在就是 BackdropFilter 中的那位,所以 ImageFiltered 入手难度还是非常低的。


先来认识一下 ImageFilter 类,它是一个 抽象类 ,但其中定义了三个 factory 命名构造,分别用于 模糊- blur、矩阵变换 - matrix 和 多效果合成 - compose ,


我们知道,抽象类肯定是不能直接实例化的,在运行时肯定是特定实现类。如下所示,这三个 factory 命名构造,本质上是在构造下面红框中的三个 ImageFiltered 子类。另外注意一点 ColorFilter 也是 ImageFiltered 的实现类,所以我们可以通过它实现滤色效果。


二、ImageFiltered 的模糊效果

通过 ImageFilter.blur 可以构建出 _GaussianBlurImageFilter ,也就是高斯模糊图像过滤器。其中有三个参数,我们下面通过代码测试一下:

代码中的使用是非常简单的,把 ImageFiltered 套在任意目标组件上,提供 imageFilter 入参即可,如下是 _TargetContent 组件。

ImageFiltered(
  imageFilter: ImageFilter.blur(
    sigmaX: _sigmaX,
    sigmaY: _sigmaY,
    tileMode: _tileMode,
  ),
  child: const _TargetContent(),
), 

1. 模糊的方向

下面通过左右两个 Slider 分别控制 sigmaX 和 sigmaY 的值。通过对比可以发现,sigmaX 决定水平方向上的模糊程度;sigmaY 决定竖直方向上的模糊程度:

sigmaX:4.0 sigmaY:0sigmaX:0.0 sigmaY:4.0

2. 模糊程度

如下的两组对比可以看出 sigmaX 和 sigmaY 的值越大,模糊程度就越高:

sigmaX:2.5 sigmaY:2.5sigmaX:4.0 sigmaY:4.0

3.平铺模式

最后还是一个 TileMode枚举 ,有四种元素。在测试中通过点击对应的文字进行效果切换。从表面上似乎很难看出它们是干嘛的,其实打开布局边线就很容易明白。如下,红框是组件实际的占位,但 模糊效果 会有 sigmaX,sigmaY 的溢出,而 TileMode 就是确定溢出区域如何显示。

比如下面的 TileMode.mirror 效果是在溢出区域内,通过原图像进行镜像显示:

TileMode.repeated 效果是在溢出区域内,通过原图像进行重复显示:


另外 TileMode.clamp 是默认的类型,在 溢出区域内 每行的像素都取自边界,产生一直拉伸的效果。


TileMode.decal 效果是在溢出区域内,使用透明色。感觉这个效果是最自然的:

这就是通过 ImageFilter.blur 实现模糊的效果。


三、ImageFiltered 的矩阵变换效果

ImageFiltered.matrix 构造中,会构造 _MatrixImageFilter 对象,其中需要传入 Float64List 数组,并且长度是 16 。也就是一个 4*4 的矩阵。

![image-20220423084947599](/Users/mac/Library/Application Support/typora-user-images/image-20220423084947599.png)

当然,你可以直接写十六个数组,但通过 Matrix4 对象可以更方便的进行操作,通过 Matrix4 的 storage 可以获取 Float64List 数组。其是 Matrix4 本质上就是对这 16 个数字进行维护而已。


下面通过一个 Slider 控制旋转角度,简单实现一下选择效果。可以看出 变换中心 并不能组件的中心:

ImageFiltered(
  imageFilter: ImageFilter.matrix(
    Matrix4.rotationZ(_sigmaX/180*pi).storage
  ),
  child: const _TargetContent(),
), 

另外,通过两帧的旋转对比,可以推断出变化中心是屏幕的左上角:

如果需要使 变换中心 在组件中心,需要进行额外的偏移处理,但这个尺寸需要进行计算。倒不如直接使用 Transform 组件比较方便,可以指定 变换中心。


四、ColorFilter 与 ImageFiltered

ColorFilter作为 ImageFilter 的实现类,自然也可以在 ImageFiltered 中使用。我们可以通过一个 5*4 的颜色矩阵对图像的色彩进行变换。比如下面的矩阵可以实现色彩的反转:

ColorFilter invert = const ColorFilter.matrix(<double>[
  -1,  0,  0, 0, 255,
  0, -1,  0, 0, 255,
  0,  0, -1, 0, 255,
  0,  0,  0, 1,   0,
]); 


  • 灰色 :
ColorFilter greyscale = const ColorFilter.matrix(<double>[
 0.2126, 0.7152, 0.0722, 0, 0,
 0.2126, 0.7152, 0.0722, 0, 0,
 0.2126, 0.7152, 0.0722, 0, 0,
 0,      0,      0,      1, 0,
]); 


  • 暗色
ColorFilter darken = const ColorFilter.matrix(<double>[
  1, 0, 0, 0, -126.0,
  0, 1, 0, 0, -126.0,
  0, 0, 1, 0, -126.0,
  0, 0, 0, 1, 0
]); 


  • 棕褐色调
ColorFilter sepia = const ColorFilter.matrix(<double>[
 0.393, 0.769, 0.189, 0, 0,
 0.349, 0.686, 0.168, 0, 0,
 0.272, 0.534, 0.131, 0, 0,
 0,     0,     0,     1, 0,
]); 


  • srgbToLinearGamma 和 linearToSrgbGamma

另外 ColorFilter 中还提供了两个命名构造,效果如下,上来看像是对颜色的饱和度进行加重和减弱。

const ColorFilter.srgbToLinearGamma()
const ColorFilter.linearToSrgbGamma() 
srgbToLinearGammalinearToSrgbGamma

五、源码实现简看

感觉 ImageFiltered 可以支持 ColorFilter ,这无疑是在抢 ColorFiltered 的饭碗。就好像在说,你能做的我也能做,你不能做的我还能做。


ImageFiltered 通过 _ImageFilterRenderObject 渲染对象实现功能:

_ImageFilterRenderObject 在绘制方法中,通过添加 ImageFilterLayer 层,为该层进行效果处理:

那么 ImageFiltered 组件的介绍就到这里,谢谢观看 ~

文末

我总结了一些Android核心知识点,以及一些最新的大厂面试题、知识脑图和视频资料解析。

需要的直接点击文末小卡片可以领取哦!我免费分享给你,以后的路也希望我们能一起走下去。(谢谢大家一直以来的支持,需要的自己领取)

Android学习PDF+架构视频+面试文档+源码笔记

部分资料一览:

  • 330页PDF Android学习核心笔记(内含8大板块)

  • Android学习的系统对应视频

  • Android进阶的系统对应学习资料

  • Android BAT大厂面试题(有解析)

领取地址:

Python图像处理之Pillow--ImageFilter ImageFilter:Python中的图像滤波,主要对图像进行平滑、锐化、边界增强等滤波处理。 图像滤波:在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。 存在目的:由于成像系统、传输介质和记录设备等的不完善,数字图像在其形成、传输记录过程中往往会受到多种噪声的污染。另外,在图像处理的某些环... 阅读详情

相关推荐

【python图像处理】图像的滤波(ImageFilter类详解)

在图像处理中,经常需要对图像进行平滑、锐化、边界增强等滤波处理。在使用PIL图像处理库时,我们通过Image类中的成员函数filter()来调用滤波函数对图像进行滤波,而滤波函数则通过ImageFilter类来定义的。

guduruyu的专栏 3万+

Flutter 中的 ImageFiltered 小部件:全面指南

是Flutter的painting库中的一个组件,它通过一个来对图片进行处理。可以定义多种效果,如bluropacity等,使得你可以对图片进行各种创意变换。提供了:定义应用于图片的。Color(0xFF00FF00)), // 绿色滤镜child: YourImageWidget(), // 需要图像处理的图片组件。

smileKH的博客 883

米哈游 AI产品经理面试题精选:10道高频考题+答案解析(附PDF)

米哈游是全球知名游戏开发商,以《原神》《崩坏》系列著称,专注二次元文化与AI技术创新。本文整理了10道AI产品经理面试题,涵盖Transformer架构、智能NPC设计、机器学习应用、AIGC产品规划等核心领域。题目既考察技术理解(如RAG原理、多模态模型),又关注产品落地(游戏平衡性优化、伦理安全),同时强调跨团队协作能力。参考答案均结合米哈游业务场景,体现技术驱动与玩家体验并重的产品思维,展现AI在游戏行业的创新应用前景。

ZHHHHH15的博客 683

Python图像滤镜处理:ImageFilter

由于成像系统、传输介质和记录设备等的不完善,数字图像在其形成、传输记录过程中往往会受到多种噪声的污染。另外,在图像处理的某些环节当输入的像对象并不如预想时也会在结果图像中引入噪声。因此就有了图像滤镜的概念。 图像滤镜:在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制。 Python中常用Pillow库提供的ImageFilter对图像进行滤镜处理, 包含模糊、平滑、锐化、边界增强等滤镜效...

简言 8463

3D医学影像分割实战:从数据预处理到模型训练全流程解析

本文详细解析了3D医学影像分割的全流程,从数据预处理到模型训练,重点介绍了nnUNet框架的应用技巧。通过实战案例,帮助开发者掌握如何处理复杂的.nii.gz文件格式、优化数据预处理流程以及高效训练3D分割模型,特别适合医学影像分析领域的从业者参考。

weixin_29098367的博客 223

SEW MDX61B 变频器调试说明

可手动自由更改时间和地址,时间一般不更改,IP地址使用网络适配器地址(Network adapter),点击进入即可。进入网络适配器(Network adapter)后,选择适配器建议地址,点击OK,更改IP地址后点击OK。点击加载配置文件(Load a configuration),加载已保存的应用模块配置文件, 或者点击“next”,开始重新配置AMA0801模块。满足安全回路后,控制模式选为寻参模式(Reference mode),选中开始(start),即可将机械零点设置为电气零点。

xdpcxq的专栏 4310

【收藏】Flutter组件集录

收藏别人的flutter讲解

qq_44869043的博客 814

当NetApp 7-mode遇到单控制器故障:HA模式手动修复全记录

本文详细记录了NetApp 7-mode存储系统在单控制器故障时的应急修复过程,包括HA配置重建、磁盘初始化和业务恢复等关键步骤。通过实战案例解析如何解决`VIA Interconnect is down`等典型问题,为企业级存储系统的高可用保障提供实用指南。

yolo5detector的博客 247

Flutter图片处理之高斯模糊

ImageFilter 在Flutter中,使图片模糊有2种方式,这2种方式都需要配合ImageFilter.blur()使用。 factory ImageFilter.blur({ double sigmaX = 0.0, double sigmaY = 0.0, TileMode tileMode = TileMode.clamp }) sigmaX:以x轴方向模糊,值越大越模糊 sigmaY:以Y轴方向模糊,值越大越模糊 TileMode:不需要设置,使用默认值就行 原图 横向模糊 ImageF

adojayfan的博客 7793

基于 OpenCVSharp 的晶圆缺口自动检测与旋正方案

在半导体制造过程中,晶圆(Wafer)需要精确定位才能进行后续加工。每个晶圆边缘都有一个特定的缺口,这个缺口就像 "箭头" 一样,帮助机器确定晶圆的方向。我们的任务就是通过摄像头拍摄的图片,自动找到这个缺口的位置,计算出需要旋转多少角度才能让晶圆对准正确方向。简单来说,这个技术就像给晶圆 "找方向",确保它在生产线上始终保持正确的姿态。

品质生活,极致编程。 1211

HMC7044调试指南与FPGA开发

最后,我们介绍了在FPGA开发中使用HMC7044的几个常见应用场景,包括时钟分配、时钟同步、高精度时钟生成和时钟域交叉。根据您的应用需求,您可以选择不同的时钟分配方案,例如使用PLL生成特定频率的时钟信号,或者通过分频器生成较低频率的时钟信号。HMC7044可以提供精确的时钟同步功能,确保各个FPGA板之间的时钟信号保持一致,从而实现可靠的数据传输和协同操作。HMC7044可以实现时钟域之间的交叉,通过生成和分配不同频率的时钟信号,使得不同时钟域的模块能够协同工作。FPGA开发中的HMC7044应用。

CqpFsharp的博客 3619

Python图像处理库PIL的ImageFilter模块介绍

ImageFilter模块提供了滤波器相关定义,这些滤波器主要用于Image类的filter()方法。 一、ImageFilter模块所支持的滤波器 当前的PIL版本中ImageFilter模块支持十种滤波器: 1、BLUR方法 ImageFilter.BLUR为模糊滤波,处理之后的图像会整体变得模糊。 例子: from PIL import ImageFilter,Image im...

黑色五叶草的博客 4465

VMware16虚拟机:下载和安装教程

VMware16 虚拟机 下载和安装教程

MQ0522的博客 20万+

Flutter ImageFilter 所使用的模糊算法(高斯模糊)简单研究

简介 Flutter 中使用 BackdropFilter 配合 ImageFilter.blur 产生模糊效果,相关代码如下: ClipRect( child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 15.0, sigmaY: 15.0), child: child, ), ) 此处所用的 sigmaX 与 s...

Hustlion 的技术博客 8182

PCL 八叉树的使用

八叉树(Octree)是一种空间划分的数据结构,广泛应用于三维点云的处理和分析。八叉树通过将空间递归地划分为八个子区域,可以有效地组织和索引三维点数据,提升点云的查询、降采样和配准等操作的效率。

纵马踏花向自由 1659

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

PIL中ImageFilter模块几种图片滤波处理和使用方法

PIL是Python的一个图像处理库,支持多种文件格式;PIL提供强大的图像处理和图形处理能力;可完成对图像的缩放、裁剪、叠加以及图像添加线条、图像和文字等操作。

虫无涯的博客 1028

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Image Filter 图像滤波

高斯核是对高斯函数进行离散化,在离散空间坐标上取值,并形成一个离散的权重矩阵(卷积核),再进行归一化。然后用生成的卷积核对图像进行卷积这就是高斯滤波。

qq_46019910的博客 1175

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

flutter系列之:做一个图像滤镜

很多时候,我们需要一些特效功能,比如给图片做个滤镜什么的,如果是h5页面,那么我们可以很容易的通过css滤镜来实现这个功能。那么如果在flutter中,如果要实现这样的滤镜功能应该怎么处理呢?一起来看看吧。到目前为止,一切看起来都很好。但是如果你仔细研究的话可能会产生一个疑问。?0).round();if (page!= _page) {那么这个page是如何变化的呢?什么时候从0变成1呢?除了初始化的initialPage之外,还有一个viewportFraction。

程序那些事 1501

Flutter 3.29.0 修改 ImageFilter.blur 的默认模糊效果在图像边缘的填充方式

现在,默认值为null,并指定自动选择,除非指定了特定的磁贴模式。​仅填充原始区域:超出原始范围的部分会被透明填充(如果图像有透明度),否则显示未定义行为。例如:A-B-C 会变成 A-B-C-B-A-B-C…,避免重复时的生硬接缝。例如:如果渐变的最后一个颜色是红色,超出渐变范围的区域会全部填充红色。​重复平铺:将渐变或图像从头到尾无限重复,不进行任何镜像处理。​镜像重复:每次重复时,渐变或图像会反向排列,形成镜像效果。​边缘颜色延伸:将渐变边缘的颜色无限延伸到剩余区域。​适合创建无缝重复的图案。

代码小疯子 653

PIL之ImageFilter下的基本操作

目录 1.模糊滤镜  BLUR 2.轮廓滤镜 CONTOUR 3.细节滤镜 DETAIL 4.边界增强滤镜 EDGE_ENHANCE 5.边界增强加强版滤镜 EDGE_ENHANCE_MORE 6.浮雕滤镜 EMBOSS 7寻找边界滤镜 FUND_EDGES 8.平滑滤镜 SMOOTH 9.平滑滤镜加强版  SOOTH_MORE 10.锐化滤镜 SHARPEN 11.核滤镜 ...

qq_37385726的博客 8377

【Flutter 组件集录】 ImageFiltered 与 ColorFiltered

前言: 这是我参与8月更文挑战的第 29 天,活动详情查看:8月更文挑战。为应掘金的八月更文挑战,我准备在本月挑选 31 个以前没有介绍过的组件,进行全面分析和属性介绍。这些文章将来会作为 Flutter 组件集录 的重要素材。希望可以坚持下去,你的支持将是我最大的动力~ | 本系列 |...

张风捷特烈的博客 356

Python图像处理库PIL的滤波_ImageFilter

            Python图像处理库PIL的滤波_ImageFilter ImageFilter模块提供了滤波器相关定义;这些滤波器主要用于Image类的filter()方法。 一、ImageFilter模块所支持的滤波器 当前的PIL版本中ImageFilter模块支持十种滤波器: 1、  BLUR ImageFilter.BLUR为模糊滤波,处理之后的图像会整体变得模糊。 ...

AcceptedLin的博客 5380

3、Flutter Widget - ImageFilter;

  Flutter对图像处理的功能特别棒,你可以将图像以资源形式或者网络进行加载。   如果想对图片进行旋转、倾斜、模糊的操作,可以使用ImageFilter类和BackdropFilter控件组合来实现: class ImageFilterDemo extends StatelessWidget{ @override Widget build(BuildContext context) ...

weixin_34032827的博客 323

Constraintlayout 新特性:Barrier、Group、Layer、Flow、ImageFilterView等

1.官方文档   https://developer.android.com/reference/androidx/constraintlayout/classes  android系统中定义了一系列类,辅助ConstraintLayout 完成较复杂功能,如定边界线、分组、分层、排列等等。它们大多数都是直接继承ConstraintHelper,间接继承View,它们大多数都是不不完整的view. 不绘制onDraw为空 默认大小为0(mUseViewMeasure默认为fasle,自定义的时候可.

chuyouyinghe的专栏 2934
上一篇: 【Flutter 组件集录】Autocomplete 自动填充
下一篇: 【Flutter 问题系列第 8 篇】在 Flutter 中如何截取屏幕并显示到页面中,以及如何将截图保存到相册
不秃头de程序猿
博客等级 码龄5年 4089粉丝 1478原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值