【发布时间】:2021-10-07 14:45:32
【问题描述】:
我正在使用自定义渲染器在 Xamarin.Forms 中构建相机应用程序。 安卓。
我想在按下相机快门按钮时发出快门声。
目前,我有如下图所示的 TalkePhotoButtonClickedHandler。
private async void TakePhotoButtonClickedHandler(object sender, EventArgs e)
{
if (this.imageAvailableListener == null)
{
this.imageAvailableListener = new ImageAvailableListener(this);
}
var bitmap = this.texture.Bitmap;
CameraManager manager = (CameraManager)MainActivity.context.GetSystemService(Context.CameraService);
try
{
CameraCharacteristics characteristics = manager.GetCameraCharacteristics(this.device.Id);
StreamConfigurationMap map = characteristics.Get(CameraCharacteristics.ScalerStreamConfigurationMap) as StreamConfigurationMap;
Size[]? jpegSize = map.GetOutputSizes((int)ImageFormatType.Jpeg);
int ww = jpegSize[0].Width;
int hh = jpegSize[0].Height;
ImageReader reader = ImageReader.NewInstance(ww, hh, ImageFormatType.Jpeg, 1);
List<Surface> outputSurfaces = new List<Surface>(2);
outputSurfaces.Add(reader.Surface);
outputSurfaces.Add(new Surface(this.texture.SurfaceTexture));
CaptureRequest.Builder captureBuilder = this.device.CreateCaptureRequest(CameraTemplate.StillCapture);
captureBuilder.AddTarget(reader.Surface);
captureBuilder.Set(CaptureRequest.ControlMode, (int)ControlMode.Auto);
reader.SetOnImageAvailableListener(imageAvailableListener, backgroundHandler);
var sessionListener = new CameraSessionCallback(this);
this.device.CreateCaptureSession(
outputSurfaces,
new CameraStateCallback(captureBuilder, sessionListener, this.backgroundHandler),
this.backgroundHandler
);
}
catch (CameraAccessException ex)
{
throw ex;
}
}
看来我应该在这里写快门回调。
private Camera.ShutterCallback mShutterListener =
new Camera.ShutterCallback() {
public void onShutter() {
// empty OK。
}
};
private Camera.PictureCallback mPictureListener =
new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
}
};
我找到了 Java 代码,但是如何用 C# 编写它?
【问题讨论】: