Создание необработанного изображения из виджета или холста
Моя конечная цель заключается в том, чтобы иметь возможность обмениваться динамическим изображением, передавая необработанные данные изображения или сохраняя изображение на диск для предоставления собственной службы Android/ IOS. Как бы я конвертировать Widget
или же Canvas
в флаттер к необработанным данным изображения (например, byte[]
)?
3 ответа
Сейчас это поддерживается. Вы можете использовать RenderRepaintBoundry
или же OffsetLayer
или же Scene
, У них всех есть toImage
, Вот ссылка на RederRepaintBoundry.toImage()
Future<void> _capturePng() async {
RenderRepaintBoundary boundary = globalKey.currentContext.findRenderObject();
ui.Image image = await boundary.toImage();
ByteData byteData = await image.toByteData(format: ui.ImageByteFormat.png);
Uint8List pngBytes = byteData.buffer.asUint8List();
print(pngBytes);
}
Это скопировано из документов.
Вы также можете знать, что в данный момент вам нужно переключиться на dev
канал как beta
еще не слито. Если вам нужно переключиться, запустите:
flutter channel dev
flutter upgrade
Вы можете использовать
Screenshot package
получить
image
принадлежащий
widget
ты хочешь.
В настоящее время это невозможно из кода Dart, запущенного сегодня во FlutterView, однако у нас есть ошибка при отслеживании файлов, реализующая такую систему: https://github.com/flutter/flutter/issues/6774
Можно визуализировать виджеты Flutter как часть FlutterView, а затем использовать интерфейсы Java или Objective-C для FlutterView для захвата изображения, например стандартную android.View.getBitmap, которую реализует FlutterView: https://docs.flutter.io/javadoc/io/flutter/view/FlutterView.html
Если это важно для нужд вашего приложения и вы хотели бы иметь возможность захватывать растровые изображения деревьев виджетов из кода Dart, мы хотели бы услышать об этом. Пожалуйста, примите во внимание, чтобы предоставить дополнительный контекст по вышеуказанной проблеме!