uno-platform - 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/
谢谢!
解决方案
在 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 才能使用它们。
推荐阅读
- javascript - 获取错误在控制台中提供了比在 catch 方法中更多的错误信息
- javascript - 使用钩子(setState,useEffect)从屏幕中提取重复代码的最佳方法?
- scala - 通过 slick codegen 导入从另一个项目构建的依赖项时,“对象不是包的成员”
- python - 如何在 pytest 会话结束时清理资源?
- sql - 为什么我的 WHERE 子句会影响我的 LEFT JOIN?
- ios - 如何在加载应用程序和完全加载网页视图页面之前直接添加启动画面图像?
- sql - 改进从 COBOL 文件到 SQL 的 ETL
- java - 将整个where子句传递给原生spring jpa @Query
- c# - 如何在 Realm 对象上设置 IList 属性
- graphql - 无法解决 Playground 错误:未提供所需类型 \"MemberInput!\" 的变量 \"$input\"