Я занимаюсь разработкой графического редактора с использованием среды Flutter и Dart, и я не могу применить матричный фильтр к холсту.
Я пытаюсь применить матричный фильтр к холсту, используя класс "Paint" и функцию "canvas.drawPaint (paint)", но получаю черный холст.
Исходное изображение
Ожидается (вариант 2 в коде)
Я получаю
class EditorPainter extends CustomPainter {
final ui.Image image;
final double zoom;
final Offset offset;
EditorPainter({
@required this.image,
@required this.zoom,
@required this.offset,
this.elements
});
@override
void paint(Canvas canvas, Size size) {
Size imageSize = Size(image.width.toDouble(), image.height.toDouble());
Size targetSize = imageSize * zoom;
// Variant 1 - not working (draws black canvas)
paintImage(
canvas: canvas,
rect: offset & targetSize,
image: image,
fit: BoxFit.fill
);
// Paint with "sepia" filter
final Paint paint = Paint()
..colorFilter = ColorFilter.matrix([
0.393, 0.768, 0.189, 0.0, 0.0,
0.349, 0.686, 0.168, 0.0, 0.0,
0.272, 0.534, 0.131, 0.0, 0.0,
0.0, 0.0, 0.0, 1.0, 0.0,
]);
canvas.drawPaint(paint);
// Variant 2 - working
// Image with "sepia" filter
paintImage(
canvas: canvas,
rect: offset & targetSize,
image: image,
fit: BoxFit.fill,
colorFilter: ColorFilter.matrix([
0.393, 0.768, 0.189, 0.0, 0.0,
0.349, 0.686, 0.168, 0.0, 0.0,
0.272, 0.534, 0.131, 0.0, 0.0,
0.0, 0.0, 0.0, 1.0, 0.0,
])
);
}
}
Я ожидаю получить холст с отфильтрованным изображением, но я получаю черный холст.
Я пытался назначить BlendMode для Paint, но это не помогло.