#image #flutter #dart
Вопрос:
Я новичок в Flutter, и у меня есть вопрос, касающийся моего небольшого проекта.
Я пытаюсь показать изображение, которое я получаю через сокет. У меня есть список uint8, представляющий матрицу изображений (никак не закодированную), и я успешно преобразовал его в виджет изображений со следующим кодом:
Image im = Image.fromBytes(1280, 1024, frameData, format: Format.luminance);
var jpgImage = encodeJpg(im);
.
.
//In Widget:
return Image.memory(jpgImage, gaplessPlayback: true);
и это работает, но на это уходит слишком много времени.
Я вижу, что функция encodeJpg занимает не менее 150 мс, что для меня слишком много, потому что каждое такое изображение является частью потокового видео.
Мой вопрос в том, как я могу преобразовать обычный(не закодированный) Uint8List — представление регулярной матрицы, 0-256 значений, для виджета изображения наиболее эффективным способом?
Спасибо!
Комментарии:
1.
MemoryImage(uint8List)
api.flutter.dev/flutter/painting/MemoryImage-class.html2. выше или Image.memory(Uint8List) api.flutter.dev/flutter/widgets/Image/Image.memory.html
3.
MemoryImage
(и, что эквивалентно,Image.memory
) Ожидайте, что необработанные байты будут иметь изображение PNG, изображение JPEG и т. Д. Я не уверен, что они распознали бы необработанный поток значений RGB (и не знали бы, что эти байты представляют данные RGB, BGR, RGBA, ARGB и т. Д.).Image
Класс (отdart:ui
) может помочь.
Ответ №1:
Виджет изображения имеет несколько конструкторов, и один из них-память.
Проверьте Image.memory(bytes)
конструктор фабрики.
https://api.flutter.dev/flutter/widgets/Image/Image.memory.html
Ответ №2:
Вы можете использовать Bitmap
для создания списка UINT8 с заголовком, который Image.memory()
можно проанализировать.
как в https://pub.dev/packages/bitmap:
import 'package:bitmap/bitmap.dart';
Bitmap bitmap = Bitmap.fromHeadful(imageWidth, imageHeight, theListOfInts); // Not async
// ..
Uint8List headedBitmap = bitmap.buildHeaded();
// ..
child: Image.memory(headedBitmap)
// ..