我有下面的代码片段,我想使图像褪色,这样它就不会干扰容器中的其他项目。有没有一种过滤器可以做到这一点?
child: new Card(
child: new Container(
decoration: new BoxDecoration(
color: const Color(0xff7c94b6),
image: new DecorationImage(
image: new ExactAssetImage('lib/images/pic1.jpg'),
)
)
)
)
字符串
5条答案
按热度按时间xnifntxz1#
你可以给予你的
DecorationImage
一个ColorFilter
来使背景图像变灰(使用saturation
颜色滤镜)或半透明(使用dstATop
颜色滤镜)。的数据
这个例子的代码如下。
字符串
Opacity
小部件是另一种选择。也可以将效果预先应用于资源。
t3irkdon2#
您可以简单地使用
字符串
4dbbbstv3#
对于那些想知道性能是否还可以 *(因为图像和不透明性都是资源密集型的东西)的人,这里是我对文档和源代码的挖掘和答案。
结论:使用
DecorationImage(colorFilter: ...)
将与官方文件建议的速度一样快。(但Opacity
、ColorFilter
小工具不支持)首先,我们不应该使用
Opacity
或ColorFilter
小工具,因为它可能会触发saveLayer
,而且很昂贵(根据官方文件)。相反,我们应该
请仅在必要时使用“不透明度”Widget。有关直接将不透明度应用于图像的示例,请参阅“不透明度API”页面中的“透明图像”部分,该示例比使用“不透明度”Widget更快。
查看建议的方法,我们可以看到以下示例:
字符串
现在,问题是,是高投票的答案,即。下面的代码,就像官方文档中提到的
Image
小部件一样快?型
为了回答这个问题,让我们看看
Image.network
的源代码。此构造函数将直接填充Image
的colorBlendMode
字段。在
Image
的build
中,它将被 * 直接 * 传递到RawImage
的colorBlendMode
字段。然后,
RawImage
将创建RenderImage
(这是一个渲染对象)并更新RenderImage._colorBlendMode
。接下来,请注意RenderImage是如何处理此问题的-
型
对
rendering/image.dart
的深入研究将表明,colorBlendMode
(和_colorBlendMode
将不会用于其他地方,除了创建这个_colorFilter
。因此,我们知道
Image.network
的两个自变量最终将进入RenderImage._colorFilter
。实际上,该
_colorFilter
将在RenderImage.paint
中用作型
所以我们知道了!它将在与本机方法通信的
paintImage
中使用。难怪它比Opacity
快。没有回到我们的
DecorationImage
。在painting/decoration_image.dart
内部,我们可以看到DecorationImagePainter
:型
嘿,那完全一样!
xriantvc4#
您可以简单地使用一个堆栈小部件,并在图像上方使用一个简单的彩色容器,降低不透明度。
例如:
字符串
这是一个完全实际实现的示例。你可以在这里增加不透明度,使背景更加褪色,第四个参数是不透明度:
型
该方法还提供了选择渐变滤波器的颜色的能力。
mwngjboj5#
使用Opacity class。使其子部分透明的小部件。
字符串