Как добавить прозрачности к изображению

Я использую спрайт из пакета пламени, чтобы показать изображение. Я пытаюсь сделать изображение прозрачным или непрозрачным.

Вот мой код:

void render(Canvas c) {
    Sprite spriteImg = Sprite('someImg.png');
    rect = Rect.fromLTWH(10, 10, 20, 20);
    spriteImg.renderRect(c, rect);
}

Кажется, я не могу понять, как добавить непрозрачность.

2 ответа

Решение

Вы должны переопределить краску, которая используется при рендеринге, например:

void render(Canvas c) {
    Sprite spriteImg = Sprite('someImg.png');
    rect = Rect.fromLTWH(10, 10, 20, 20);
    Paint opacityPaint = Paint()..color = Colors.white.withOpacity(0.5);
    spriteImg.renderRect(c, rect, overridePaint: opacityPaint);
}

Это отрендерит ваш спрайт с непрозрачностью 50%.

      class NewComponent extends PositionComponent{
  static final Color _color = Color(0xFFFFFFFF);
  static final Paint _paint = Paint()
    ..color = _color
    ..style = PaintingStyle.fill;

  Sprite? sprite;

  Future<void> onLoad() async {
    sprite = await Sprite.load('image.png');
  }

  @override
  void render(Canvas canvas) {
    super.render(canvas);
    final double colorOpacity = opacity.clamp(0, 1.0);
    _paint.color = _color.withOpacity(colorOpacity);
    sprite?.render(
      canvas,
      size: size,
      overridePaint: _paint,
    );
  }
}

Важные детали при динамическом обновлении прозрачности _paint.color =? и opacity.clamp (0, 1.0)

Другие вопросы по тегам