【问题标题】:I want to emit a shutter sound when the camera shutter button is pressed by Xamarin.Form我想在 Xamarin.Form 按下相机快门按钮时发出快门声
【发布时间】: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# 编写它?

【问题讨论】:

    标签: xamarin camera


    【解决方案1】:

    我用Xamarin.Essentials: Media Picker拍照,按下相机快门按钮时的快门声。

    <StackLayout>
            <Image x:Name="PhotoImage" />
            <Button
                x:Name="takephoto"
                Clicked="takephoto_Clicked"
                Text="take photo" />
        </StackLayout>
    
     private async void takephoto_Clicked(object sender, EventArgs e)
        {
            var result = await Xamarin.Essentials.MediaPicker.CapturePhotoAsync();
    
            if (result != null)
            {
                var stream = await result.OpenReadAsync();
    
                takephoto.ImageSource = ImageSource.FromStream(() => stream);
            }
        }
    

    【讨论】:

    • @kaoru 你还有什么问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2016-04-04
    相关资源
    最近更新 更多