You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Stack实现图片局部置灰并支持置灰层移动?

Flutter实现可移动的图片局部灰度遮罩

要实现可自由移动的局部灰度遮罩,核心思路是用Stack层叠原图和遮罩层,通过Positioned控制遮罩的位置与尺寸,同时用ColorFiltered给遮罩区域添加灰度滤镜,这样既保证遮罩能独立移动,又不会影响原图整体。

直接替换你代码里的红色块部分,改成带灰度滤镜的容器即可,完整代码如下:

Stack(
  children: [
    Image.asset('bla', fit: BoxFit.contain),
    Positioned(
      // 后续可通过修改这些参数或手势拖动来移动遮罩
      top: 50,
      left: 50,
      right: 50,
      bottom: 50,
      child: ColorFiltered(
        // 灰度转换矩阵,将彩色转为灰度
        colorFilter: 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,
        ]),
        child: Container(
          // 容器设为透明,只保留滤镜效果
          color: Colors.transparent,
        ),
      ),
    )
  ],
)

关键说明:

  • ColorFilter.matrix里的矩阵是标准的灰度转换公式,能让底层图片透过该区域时呈现灰度效果
  • Positioned的top/left/right/bottom参数可以动态修改,搭配GestureDetector就能实现遮罩的拖动移动
  • 容器设为透明是为了只保留滤镜的混合效果,不会额外添加颜色覆盖

内容的提问来源于stack exchange,提问作者Dabbel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 06:30:14