gpt4 book ai didi

android - 是否可以将隐藏的小部件导出为图像?

转载 作者:行者123 更新时间:2023-12-04 23:51:05 25 4
gpt4 key购买 nike

我知道如何使用 RepaintBoundary 将可见的小部件保存到图像中

我想要的是一种保存 widget 的方法用户看不到的 image .

最佳答案

/// Creates an image from the given widget by first spinning up a element and render tree,
/// then waiting for the given [wait] amount of time and then creating an image via a [RepaintBoundary].
///
/// The final image will be of size [imageSize] and the the widget will be layout, ... with the given [logicalSize].
Future<Uint8List> createImageFromWidget(Widget widget, {Duration wait, Size logicalSize, Size imageSize}) async {
final RenderRepaintBoundary repaintBoundary = RenderRepaintBoundary();

logicalSize ??= ui.window.physicalSize / ui.window.devicePixelRatio;
imageSize ??= ui.window.physicalSize;

assert(logicalSize.aspectRatio == imageSize.aspectRatio);

final RenderView renderView = RenderView(
window: null,
child: RenderPositionedBox(alignment: Alignment.center, child: repaintBoundary),
configuration: ViewConfiguration(
size: logicalSize,
devicePixelRatio: 1.0,
),
);

final PipelineOwner pipelineOwner = PipelineOwner();
final BuildOwner buildOwner = BuildOwner();

pipelineOwner.rootNode = renderView;
renderView.prepareInitialFrame();

final RenderObjectToWidgetElement<RenderBox> rootElement = RenderObjectToWidgetAdapter<RenderBox>(
container: repaintBoundary,
child: widget,
).attachToRenderTree(buildOwner);

buildOwner.buildScope(rootElement);

if (wait != null) {
await Future.delayed(wait);
}

buildOwner.buildScope(rootElement);
buildOwner.finalizeTree();

pipelineOwner.flushLayout();
pipelineOwner.flushCompositingBits();
pipelineOwner.flushPaint();

final ui.Image image = await repaintBoundary.toImage(pixelRatio: imageSize.width / logicalSize.width);
final ByteData byteData = await image.toByteData(format: ui.ImageByteFormat.png);

return byteData.buffer.asUint8List();
}
Read more

关于android - 是否可以将隐藏的小部件导出为图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56911112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com