如何解决如何以iOS xamarin形式获取自定义渲染器相机的捕获图像
我们在应用程序中使用了自定义相机。我已经使用下面提到的链接实现了自定义相机。单击捕获按钮时,相机预览将停止并且工作正常,但是如何获取捕获的图像数据,我想将图像保存在图库中并返回路径。我已经通过使用PictureCallback在android中获取了捕获的图像数据。请帮助我。
自定义相机链接: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/view
解决方法
看看this blog。
为了获取AVCapturePhotoCaptureDelegate
中的图像数据,我添加了AVCapturePhotoOutput photoOutput
。这是一个示例:
public class UICameraPreview : UIView
{
AVCaptureVideoPreviewLayer previewLayer;
CameraOptions cameraOptions;
AVCapturePhotoOutput photoOutput;
public event EventHandler<EventArgs> Tapped;
public AVCaptureSession CaptureSession { get; private set; }
public bool IsPreviewing { get; set; }
public UICameraPreview (CameraOptions options)
{
cameraOptions = options;
IsPreviewing = false;
Initialize ();
}
public override void LayoutSubviews()
{
base.LayoutSubviews();
if (previewLayer != null)
previewLayer.Frame = Bounds;
}
public override void TouchesBegan (NSSet touches,UIEvent evt)
{
base.TouchesBegan (touches,evt);
OnTapped ();
}
protected virtual void OnTapped ()
{
var eventHandler = Tapped;
if (eventHandler != null) {
eventHandler (this,new EventArgs ());
}
}
void Initialize ()
{
CaptureSession = new AVCaptureSession ();
previewLayer = new AVCaptureVideoPreviewLayer (CaptureSession) {
Frame = Bounds,VideoGravity = AVLayerVideoGravity.ResizeAspectFill
};
//self.photoOutput.capturePhoto(with: AVCapturePhotoSettings(),delegate: self)
photoOutput = new AVCapturePhotoOutput();
CaptureSession.AddOutput(photoOutput);
photoOutput.CapturePhoto(AVCapturePhotoSettings.Create(),new myDelegate());
var videoDevices = AVCaptureDevice.DevicesWithMediaType (AVMediaType.Video);
var cameraPosition = (cameraOptions == CameraOptions.Front) ? AVCaptureDevicePosition.Front : AVCaptureDevicePosition.Back;
var device = videoDevices.FirstOrDefault (d => d.Position == cameraPosition);
if (device == null) {
return;
}
NSError error;
var input = new AVCaptureDeviceInput (device,out error);
CaptureSession.AddInput (input);
Layer.AddSublayer (previewLayer);
CaptureSession.StartRunning ();
IsPreviewing = true;
}
}
public class myDelegate : AVCapturePhotoCaptureDelegate {
public override void DidFinishCapture(AVCapturePhotoOutput captureOutput,AVCaptureResolvedPhotoSettings resolvedSettings,NSError error)
{
base.DidFinishCapture(captureOutput,resolvedSettings,error);
}
public override void DidFinishProcessingPhoto(AVCapturePhotoOutput output,AVCapturePhoto photo,NSError error)
{
base.DidFinishProcessingPhoto(output,photo,error);
if (error == null)
{
var photodata = photo.FileDataRepresentation;
}
}
}
我还没有将所有快速代码都翻译成c#,请随时问我是否有问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。