使用xamarin.forms 调用安卓相机在相机预览上面画一个框,按拍照按钮后自动只保存框中的图片部分。框以外区域在预览时改成半透明状态。

使用xamarin.forms 调用安卓相机,想达到下图这种效果,

img

在相机预览上面画一个框,按拍照按钮后自动只保存框中的图片部分。框以外的黑色区域在预览时改成半透明状态,便于拍照者在使用中定位拍摄位置。
我现在使用了微软的官方文档里面的代码,
文档地址:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/contentpage
先创建一个名为CameraPage的contentpage页面,然后在mainpage页面点击按钮可以push出该页面,到这一步:

img

后面的创建安卓端自定义页面渲染器那里老是错误,把视频流添加不进去。
在这里出的错:

[assembly: ExportRenderer(typeof(CameraPage), typeof(CameraPageRenderer))]
namespace CustomRenderer.Droid
{
    public class CameraPageRenderer : PageRenderer, TextureView.ISurfaceTextureListener
    {
        ...
        public CameraPageRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
        {
            base.OnElementChanged(e);

            if (e.OldElement != null || Element == null)
            {
                return;
            }

            try
            {
                SetupUserInterface();
                SetupEventHandlers();
                AddView(view);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(@"            ERROR: ", ex.Message);
            }
        }
        ...
    }
}

img

希望可以比官方文档那里更具体的指导下如何在安卓的项目里面操作。

您可以使用Android支持库来支持旧版本,该库提供了VectorDrawableCompat和AnimatedVectorDrawableCompat类。
参考:

  1. xamarin.android 相机屏幕周围的自定义边框 - 糯米PHP 使用此代码为相机绘制自定义边框。它适用于5以上的版本。不适用于4.2或4.4以上的版本。我想修改该文件以在所有版本上工作。<?xml version="1.0" encoding="utf-8"?><vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="220dp" an https://www.nuomiphp.com/eplan/124992.html
  2. https://stackoverflow.com/questions/60786656/custom-border-around-camera-screen

这种效果需要你自定义相机界面才能实现,android可以获取图片的预览宽高大小,或者是拍照宽高大小,onPreviewFrame 方法拿到设置,setPreviewSize方法是设置预览宽高的,保存的时候以预览大小来保存图片

.form的资源太少了。