学习一些常用的混合模式之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

相关推荐
autumn200514 小时前
Flutter 框架跨平台鸿蒙开发 - 颜色情绪
flutter·华为·harmonyos
Utopia^14 小时前
Flutter 框架跨平台鸿蒙开发 - 记忆热力图
flutter·华为·harmonyos
2301_8227032014 小时前
Flutter 框架跨平台鸿蒙开发 - 创意声音合成器应用
算法·flutter·华为·harmonyos·鸿蒙
恋猫de小郭15 小时前
Android 上为什么主题字体对 Flutter 不生效,对 Compose 生效?Flutter 中文字体问题修复
android·前端·flutter
李李李勃谦15 小时前
Flutter 框架跨平台鸿蒙开发 - 创意灵感收集
android·flutter·harmonyos
空中海15 小时前
2.7 列表与滚动性能优化
flutter·性能优化·dart
2301_8227032016 小时前
Flutter 框架跨平台鸿蒙开发 - 气味记忆唤醒应用
flutter·华为·开源·harmonyos·鸿蒙
空中海16 小时前
2.4 绘制与动画
flutter·dart
空中海16 小时前
2.6 表单与输入处理
flutter·dart
AI_零食17 小时前
开源鸿蒙跨平台Flutter开发:脑筋急转弯应用开发文档
flutter·华为·开源·harmonyos·鸿蒙