ImageReader.IOnImageaVailableListener回调要4秒左右
为啥ImageReader.IOnImageaVailableListener回调要4秒左右,太久了。
var reader = ImageReader.NewInstance(width, height, ImageFormatType.Jpeg, 1);
var outputSurfaces = new List<Surface>(2) { reader.Surface, new Surface(_viewSurface) };
var captureBuilder = CameraDevice.CreateCaptureRequest(CameraTemplate.StillCapture);
captureBuilder.AddTarget(reader.Surface);
captureBuilder.Set(CaptureRequest.ControlMode, new Integer((int)ControlMode.Auto));
SetFlash(captureBuilder);
var JpegOrientation = GetJpegOrientation(characteristics);
captureBuilder.Set(CaptureRequest.JpegOrientation, JpegOrientation);
//这里是实现IOnImageaVailableListener这个接口的,里面实现了回调方法
var readerListener = new ImageAvailableListener();
readerListener.Photo += (sender, buffer) =>
{
Buffer = buffer;
Photo?.Invoke(this, ImageSource.FromStream(() => new MemoryStream(buffer)));
};
public class ImageAvailableListener : Java.Lang.Object, ImageReader.IOnImageAvailableListener
{
public event EventHandler<byte[]> Photo;
public void OnImageAvailable(ImageReader reader)
{
Image image = null;
try
{
image = reader.AcquireLatestImage();
var buffer = image.GetPlanes()[0].Buffer;
var imageData = new byte[buffer.Capacity()];
buffer.Get(imageData);
Photo?.Invoke(this, imageData);
}
catch (Exception)
{
// ignored
}
finally
{
image?.Close();
}
}
}