
使用RepaintBoundary包装要截图的Widget. 将GlobalKey设置为RepaintBoundary,例如名称: _globalKey计算floatPixelRatio应该是什么(如果计算不正确,则在放大和缩小期间画图板截图,剪切的图像中的线条会变得柔和,例如水平直线,其他期间会出现1px的未对准,好像直线突然上下波动
计算方法:

设计图的宽度/屏幕的宽度 * 要拼接的是几倍的设计图
设计图的宽度/屏幕的宽度*要缝合的设计图是几遍

例如,我们的设计图为360 * 640,屏幕的实际宽度为375pt,将要拦截的当前图像将与资源图像的3倍合并为图片(用于绘制过程),然后应该这样计算
floatPixelRatio = 360 / 375 * 3 = 2.88

获取以下代码将截获的ui.Image,完成屏幕截图
RenderRepaintBoundary boundary =
_globalKey.currentContext.findRenderObject();
ui.Image centerImage = await boundary.toImage(pixelRatio: floatPixelRatio);

绘图API流程
代码逻辑如下:
/// start draw
final recorder = new PictureRecorder();
final canvas = new Canvas(recorder,
new Rect.fromPoints(new Offset(0, 0), new Offset(width, height)));
/// 顶部的图片
canvas.drawImageRect...
/// 文字
TextPainter labelTp = new TextPainter...
labelTp.paint(canvas...
/// end draw
final picture = recorder.endRecording();
ui.Image finalUiImage =
await picture.toImage(width.toInt(), height.toInt());
值得注意的是画图板截图,如果要使文本居中,则需要自己计算文本的宽度和高度:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-253470-1.html
来了