Как добавить прозрачности к изображению
Я использую спрайт из пакета пламени, чтобы показать изображение. Я пытаюсь сделать изображение прозрачным или непрозрачным.
Вот мой код:
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)