flutter - 在 Flutter 中调用绘图后保存在画布上绘制的像素的方法?
问题描述
我来自网络背景,我认为当您在画布上绘制动画时,您必须在每次滴答后清除画布(否则您将在前一帧上绘制):
const context = canvas.getContext('2d');
context.clearRect(0, 0, canvas.width, canvas.height);
在 Flutter 中,我认为每次paint
在CustomPainter
. 这很好,但有没有其他功能可以保留你之前绘制的内容?
对于上下文,我正在为随机步行者设置动画,我真的不想跟踪他们之前访问过的所有点。
我已经尝试过了context.save()
,context.restore()
但这似乎与变换而不是像素有关。
解决方案
这可能晚了……
导入“rendering”和“ui”包:
import 'dart:ui' as ui;
import 'package:flutter/rendering.dart';
添加下一个函数:
Future<ui.Image> canvasToImage(CustomPainter painter, Size size) async
{
ui.PictureRecorder recorder = ui.PictureRecorder();
Canvas canvas = Canvas(recorder);
if (painter != null) painter.paint(canvas, size);
return await recorder.endRecording().toImage(size.width.floor(), size.height.floor());
}
使用前面的函数,绘制图像,例如名为“previousCanvas”的图像。
如果可用,在“CustomPainter”的“绘画”功能中绘制图像:
if (previousCanvas != null) {
canvas.drawImage(previousCanvas, Offset(0, 0), Paint());
}
它是“异步的”并且它是“慢的”,但它可以工作。我不知道是否有更好的方法来做到这一点。
此外,您可以修改函数以绘制到“画布”对象中,而不是使用“.paint”调用画家
推荐阅读
- python - 反正有刮csk吗?
- sqlite - 相交保留两个查询的计数以进行排序
- javascript - 带有自定义项目符号的自动图像滑块
- javascript - 模拟内部 axios.create()
- rrdtool - 更新现有 RRD 文件中的值
- algorithm - 合并已排序的 n 个列表
- sql - 在 SQL Server 中将 '2018-07-02 00:01:22.000' 转换为 '02-Jul-18'
- linux - 我如何在 CentOS7 中静态分配 ip
- python - 在我将参数作为python pandas中的dict传递后,read_sql查询返回一个空数据帧
- html - Django REST 可浏览 API 模板更改