将相机图像抖动到 swift UIimage

Ram*_*mri 5 ios dart ios-camera swift flutter

我正在开发一个自定义颤振插件,我将颤振图像相机发送到 swift 并使用颤振相机插件(https://pub.dev/packages/camera)创建一个 UIImage 。为此,我使用此方法发送相机图像字节:

startImageStream((CameraImage img) {
    sendFrameBytes(bytesList: img.planes.map((plane) {
        return plane.bytes;
    }).toList(),
)}
Run Code Online (Sandbox Code Playgroud)

平面包含一个数组,其中包含图像的 RGBA 字节。在 swift 代码中,我将 RGBA 字节作为 NSArray 并创建一个像这样的 UIImage:

func detectFromFrame1(args:NSDictionary, result:FlutterResult){
    var rgbaPlan = args["bytesList"] as! NSArray
    let rgbaTypedData = rgbaPlan[0] as! FlutterStandardTypedData
    let rgbaUint8 = [UInt8](rgbaTypedData.data)
    let data = NSData(bytes: rgbaUint8, length: rgbaUint8.count)
    let uiimage = UIImage(data: data as Data)
    print(uiimage)
}
Run Code Online (Sandbox Code Playgroud)

问题是rgbaTypedData,rgbaUint8,data不为空,创建的uiimage总是nil,不明白问题出在哪里。

小智 -1

我有同样的问题。我使用的解决方法是在 flutter 中将图像转换为 jpg,然后获取字节并将其提供给 iOS/本机代码。缺点是速度慢且无法实时使用

更新:代码示例(Flutter 和 TFLite 包)包: https://pub.dev/packages/imagehttps://pub.dev/packages/tflite

代码:

     _cameraController.startImageStream((_availableCameraImage)
      {
        imglib.Image img = imglib.Image.fromBytes(_availableCameraImage.planes[0].width, _availableCameraImage.planes[0].height, _availableCameraImage.planes[0].bytes);
         Uint8List imgByte = imglib.encodeJpg(img);
        Tfliteswift.detectObjectOnBinary(binary: _availableCameraImage.planes[0].bytes);
}
Run Code Online (Sandbox Code Playgroud)