我正在开发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(宽)x 1801(高)。但是,
Image
被拾起的物体
OnImageAvailable
是1440 x 1440。
很明显我遗漏了一些东西,但我很难找到可能是什么。
附录
:如果我将格式从yuv 420 888更改为jpeg,则会返回正确的尺寸。但事实上,我真正需要的是将图像转换成一个RGB字节数组,而且YUV似乎是一种更好的格式。可以请求RGB作为图像格式类型,但我正在测试的设备不接受。