首页 > 解决方案 > Uno 平台相机预览控制

问题描述

如何在 uno XAML 页面中添加相机预览?

可能像这个例子 https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/simple-camera-preview-access

但是 Uno 上没有实现 CameraCapture.InitializeAsyn。当它运行时会抛出以下异常:

System.NotImplementedException:成员 IAsyncAction MediaCapture.InitializeAsync() 未在 Uno 中实现。

如果可以使用本机 android 代码,这个示例可以满足我的需要。 https://docs.microsoft.com/en-us/samples/xamarin/monodroid-samples/android50-camera2basic/

谢谢!

标签: uno-platform

解决方案


在 Android 上,您至少有两种方法可以做类似的事情:

您可以将以下内容与本机 android 意图一起使用,您需要将其设为条件__ANDROID__

public MainPage()
{
...

    BaseActivity.Current.ActivityResult += Current_ActivityResult;
}

private void Current_ActivityResult(object sender, BaseActivity.ActivityResultEventArgs e)
{
   if (e.Data != null)
   {
      var bitmap = (Bitmap)e.Data.Extras.Get("data");

      image.Source = bitmap;
   }
   else
   {
      image.Source = null;
   }
}

public void button_Click(object sender, RoutedEventArgs e)
{
   var intent = new Intent(MediaStore.ActionImageCapture);
   BaseActivity.Current.StartActivityForResult(intent, 0);
}

或使用CameraCaptureUI类:

{
    try
    {
        var captureUI = new CameraCaptureUI();
        captureUI.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Jpeg;
        captureUI.PhotoSettings.CroppedSizeInPixels = new Size(200, 200);

        var photo = await captureUI.CaptureFileAsync(CameraCaptureUIMode.Photo);

        if (photo == null)
        {
            return;
        }
        else
        {
            var source = new BitmapImage(new Uri(photo.Path));
            image.Source = source;
        }
    }
    catch(Exception ex)
    {
        System.Diagnostics.Debug.WriteLine(ex);
    }
}

您可以找到CameraCaptureUI原生 android的完整示例。

目前还没有实现其他类型的相机捕捉(从 Uno 3.0 开始),您需要通过本机 API 才能使用它们。


推荐阅读