繁体   English   中英

Android Camera2回调-图像似乎被裁剪了

[英]Android Camera2 callback — image appears to be cropped

我正在使用Camera2 API。 这项工作正在进行中,但是我对图像尺寸感到困惑。

这是我设置回调的方式(我正在使用Xamarin,语言是F#,但是特定语言并不重要):

type CameraCallback(surfaceView: SurfaceView) =
    inherit CameraDevice.StateCallback()
    interface ImageReader.IOnImageAvailableListener with
        member this.OnImageAvailable(imageReader) = 
            let image = imageReader.AcquireNextImage()
            let planes = image.GetPlanes()
            let yBuffer, uBuffer, vBuffer = planes.[0].Buffer, planes.[1].Buffer, planes.[2].Buffer
            image.Close()
    override this.OnOpened(cameraDevice) =
        let imageReader = ImageReader.NewInstance(surfaceView.Width, surfaceView.Height, ImageFormatType.Yuv420888, 1)
        imageReader.SetOnImageAvailableListener(this, null)
        let surfaces = [|surfaceView.Holder.Surface; imageReader.Surface|]
        cameraDevice.CreateCaptureSession(surfaces, new CaptureSessionCallback(surfaces), null)
    override __.OnDisconnected(camera) = 
        camera |> ignore
    override __.OnError(camera, error) = 
        camera |> ignore

当我设置ImageReader ,surfaceView的输入尺寸为1440(宽度)乘以1801(高度)。 但是,由OnImageAvailable拾取的Image对象为1440 x 1440。

显然我缺少了一些东西,但是我很难找出可能是什么。

附录 :如果我将格式从YUV 420 888更改为JPEG,则会返回正确的尺寸。 但是实际上,我真正需要的是将图像转换为RGB字节数组,并且YUV似乎是更可取的格式。 可以将RGB请求为图像格式类型,但是我正在测试的设备不接受。

对于YUV预览图像,即使将预览表面设置为纵向,回调也会返回原始的1440x1800横向图像。 为了进行静态拍摄,在Jpeg中,某些设备会真正旋转图像。 其他仅标记EXIF方向标记。

在您的代码中,您可能需要

let imageReader = ImageReader.NewInstance(surfaceView.Height, surfaceView.Width, ImageFormatType.Yuv420888, 1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM