CameraController
在我的 iOS 设备上,我通过(由包提供camera
)访问相机controller.startImageStream((CameraImage img) {...}
从相机发出的数据在我的手机上是 bgra8888 格式,但我读到它在 Android 设备上是 yuv420 格式。要将图像流数据转换为可用的一致格式,我使用:
import 'dart:typed_data';
import 'package:camera/camera.dart';
import 'package:image/image.dart' as im;
Uint8List concatenatePlanes(List<Plane> planes) {
final WriteBuffer allBytes = WriteBuffer();
planes.forEach((Plane plane) => allBytes.putUint8List(plane.bytes));
return allBytes.done().buffer.asUint8List();
}
List<CameraDescription> cameras = await availableCameras();
CameraController controller = CameraController(cameras[0], ResolutionPreset.medium);
controller.startImageStream((CameraImage img) {
print(img.format.group); // returns ImageFormatGroup.bgra8888
List<int> imgData = concatenatePlanes(img.planes);
im.Image image = im.decodeImage(imgData);
});
Run Code Online (Sandbox Code Playgroud)
该imgData
变量充满了从相机流出的数据,但转换后的数据image
decodeImage返回的转换后为空。
我在其他帖子中读到该image
包可以完成解码 bgra8888/yuv420 图像的任务(/sf/answers/4034507921/),但我没有看到其formats.dart源中的支持(https://github.com/brendan-duncan/image/blob/master/lib/src/formats/formats.dart)。
目标Image
格式定义为:
图像缓冲区,其中像素被编码为 32 位无符号整数 (Uint32)。像素以 #AARRGGBB 格式存储在 32 位无符号整数中。这是为了与Flutter图像数据保持一致。
如何将 bgra8888/yuv420 中的图像流图像转换为所需的图像格式?
归档时间: |
|
查看次数: |
14132 次 |
最近记录: |