学习一些常用的混合模式之BlendMode.srcOut

1 SrcOut

用途:

Keeps the source pixels that do not cover destination pixels. Discards source pixels that cover destination pixels. Discards all destination pixels.

计算公式:

测试代码:

js 复制代码
 @override
  void paint(Canvas canvas, Size size) {
    var width = size.width;
    var height = size.height;

    canvas.saveLayer(Rect.fromLTWH(0, 0, width, height), Paint());
    canvas.drawRect(
      Rect.fromLTWH(0, 0, width, height),
      Paint()..color = Colors.red.withOpacity(1), // 半透明红色
    );

    var srcPath = Path();
    srcPath.addRect(Rect.fromLTWH(width/2 - 30, height/2 - 30, 60, 60));
    var srcPaint = Paint()
      ..color = Colors.blue // 源颜色:蓝色
      ..style = PaintingStyle.stroke // 填充模式
      ..strokeWidth = 10
      ..blendMode = BlendMode.srcOut; // 混合模式
    canvas.drawPath(srcPath, srcPaint);
    canvas.restore();
  }

第一个矩形就是dst 第二个边框就是src

参考上面的公式可以得出

a = (1 - dst.a) * src.a = (1-1)*1 = 0

c = (1 - dst.a) * src.c = 0

所以混合的结果就是"00000000" 就是透明的。所以效果如下

通过修改src的alpha(透明度)属性,也可以实现不同的效果。比如改成0.7就是下面的效果。按公式计算混合区的透明度就是0.3,色值就是 blue * 0.3

相关推荐
木子雨廷5 小时前
Flutter 使用 flutter_flavorizr 多渠道打包
前端·flutter
G_dou_6 小时前
# Flutter+OpenHarmony 实战:note_app 笔记应用
flutter·harmonyos
西西学代码6 小时前
Flutter---侧边栏会话列表
flutter
G_dou_6 小时前
Flutter+OpenHarmony实战:Calculator 计算器项目
flutter
小小小小小鹿7 小时前
# Vibe Coding 实战:Flutter 滑动列表上的花式动效
flutter·vibecoding
西西学代码7 小时前
Flutter---登录弹窗
flutter
G_dou_7 小时前
# Flutter+OpenHarmony 实战:ToDo待办清单
flutter·harmonyos
不爱吃糖的程序媛16 小时前
Flutter 三方库适配鸿蒙教程
flutter·华为·harmonyos
2501_9197490319 小时前
鸿蒙 Flutter 实战:video_compress 3.1.4 适配 3.27-ohos 全流程
flutter·华为·harmonyos
h64648564h21 小时前
Flutter 国际化(i18n)全指南:一键切换中/英/日多语言
前端·javascript·flutter