【问题标题】:How To add OverlayView in Xamarin IOS Live Camera如何在 Xamarin IOS Live Camera 中添加 OverlayView
【发布时间】:2019-10-04 14:30:37
【问题描述】:
  • 我正在访问实时摄像头,但我想在其上方添加叠加层,以拍摄特定照片并将图片保存在叠加层中。
  • 我的目标如下图所示

【问题讨论】:

  • 有人可以建议如何使用 Camera2API 在本机 java 中实现上述功能吗?

标签: xamarin.ios cameraoverlayview


【解决方案1】:

您可以使用 UIImagePickerController 来做到这一点。

首先制作一个类似于您的问题中所示的叠加视图。

  • 我相信您可以通过视图的 Alpha 属性获得灰色效果。
  • 您可以使用 UIBezierPath 制作线条

当您完成覆盖视图后,将其分配给 UIImagePickerController

CameraOverlayView 属性

这是一个粗略的例子。

    imagePicker = new UIImagePickerController();

    // set our source to the camera
    imagePicker.SourceType = UIImagePickerControllerSourceType.Camera;

    // set
    imagePicker.MediaTypes = new string[] { "public.image" };

    // show the camera controls
    imagePicker.ShowsCameraControls = true;

    // This is where you assign the view that you want to overlay   
    imagePicker.CameraOverlayView = new CameraOverlayView();

更新:

使用CGImageCreateWithImageInRect 类获取图像的裁剪版本。传递相机叠加层的矩形和相机拍摄的图片的图像参考,该类将返回相机叠加层覆盖的裁剪图像。

这是来自 Objective C 的示例,我相信您可以在 Xamarin.iOS 中执行类似的操作

CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);
// or use the UIImage wherever you like
[UIImageView setImage:[UIImage imageWithCGImage:imageRef]]; 
CGImageRelease(imageRef);

【讨论】:

  • 这很有帮助,我设法添加了一个自定义矩形作为相机的叠加层,并允许用户在矩形内拍照
  • 我希望图像选择器只选择在“相机叠加层”矩形内拍摄的照片,而忽略叠加层外的部分图片,您能给我一些建议吗?
【解决方案2】:

我设法添加了 CameraOverlayView,“允许用户在给定的矩形内拍照”

private UIImagePickerController _imagePicker;

private void OpenCameraAndTakePhoto() { 
    _imagePicker = new UIImagePickerController();
    _imagePicker.SourceType = UIImagePickerControllerSourceType.Camera;
    _imagePicker.MediaTypes = UIImagePickerController.AvailableMediaTypes(UIImagePickerControllerSourceType.Camera);
    _imagePicker.FinishedPickingMedia += Handle_FinishedPickingMedia;
    _imagePicker.Canceled += Handle_Canceled;
    _imagePicker.ShowsCameraControls = true;
    UIView view = new UIView(new CGRect(30, 200, 250, 120));
    view.Layer.BorderColor = UIColor.Blue.CGColor;
    view.Layer.BorderWidth = 3.0f;
    _imagePicker.CameraOverlayView = view;

    PresentModalViewController(_imagePicker, true);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多