gpt4 book ai didi

c# - 如何使用手机摄像头作为背景?

转载 作者:行者123 更新时间:2023-11-29 00:32:26 26 4
gpt4 key购买 nike

我正在尝试在 xamarin 表单中创建相机作为我的背景,我计划在我的共享代码中的 cameraview 顶部添加一些东西。

现在我正在为 iOS 设备做这件事。我现在在这行代码上遇到崩溃:Frame = liveCameraStream.Bounds 并出现错误:未将对象引用设置为对象的实例。

所以我的问题是如何调整我当前的代码以在 xamarin 表单中将相机作为背景?

这是我在 iOS 中的渲染器:

[assembly: ExportRenderer(typeof(ICameraBackground), typeof(CameraBackground_iOS))]
namespace project.iOS
{
public class CameraBackground_iOS : ViewRenderer
{
AVCaptureSession captureSession;
AVCaptureDeviceInput captureDeviceInput;
AVCaptureStillImageOutput stillImageOutput;
UIView liveCameraStream;

protected override void OnElementChanged(ElementChangedEventArgs<View> e)
{
base.OnElementChanged(e);
SetupLiveCameraStream();
}

protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
SetupLiveCameraStream();
}


public async void SetupLiveCameraStream()
{
await AuthorizeCameraUse();
captureSession = new AVCaptureSession();

var videoPreviewLayer = new AVCaptureVideoPreviewLayer(captureSession)
{
Frame = liveCameraStream.Bounds
};
liveCameraStream.Layer.AddSublayer(videoPreviewLayer);

var captureDevice = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Video);
ConfigureCameraForDevice(captureDevice);
captureDeviceInput = AVCaptureDeviceInput.FromDevice(captureDevice);

var dictionary = new NSMutableDictionary();
dictionary[AVVideo.CodecKey] = new NSNumber((int)AVVideoCodec.JPEG);
stillImageOutput = new AVCaptureStillImageOutput()
{
OutputSettings = new NSDictionary()
};

captureSession.AddOutput(stillImageOutput);
captureSession.AddInput(captureDeviceInput);
captureSession.StartRunning();
}


public void ConfigureCameraForDevice(AVCaptureDevice device)
{
var error = new NSError();
if (device.IsFocusModeSupported(AVCaptureFocusMode.ContinuousAutoFocus))
{
device.LockForConfiguration(out error);
device.FocusMode = AVCaptureFocusMode.ContinuousAutoFocus;
device.UnlockForConfiguration();
}
else if (device.IsExposureModeSupported(AVCaptureExposureMode.ContinuousAutoExposure))
{
device.LockForConfiguration(out error);
device.ExposureMode = AVCaptureExposureMode.ContinuousAutoExposure;
device.UnlockForConfiguration();
}
else if (device.IsWhiteBalanceModeSupported(AVCaptureWhiteBalanceMode.ContinuousAutoWhiteBalance))
{
device.LockForConfiguration(out error);
device.WhiteBalanceMode = AVCaptureWhiteBalanceMode.ContinuousAutoWhiteBalance;
device.UnlockForConfiguration();
}
}

public async Task AuthorizeCameraUse()
{
var authorizationStatus = AVCaptureDevice.GetAuthorizationStatus(AVMediaType.Video);
if (authorizationStatus != AVAuthorizationStatus.Authorized)
{
await AVCaptureDevice.RequestAccessForMediaTypeAsync(AVMediaType.Video);
}
}

最佳答案

Xamarin.Forms.Labs ,Xamarin.Forms 的 MVVM 框架,有一个 CameraView你可以使用。它也已在两个平台上实现。如果你不想安装整个包,你可以简单地获取源代码。但是,如果您决定这样做,请不要忘记为您的项目添加适当的许可证。

在 Xamarin.Forms 项目中可以很容易地使用 CameraView,如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage x:Class="XLabs.Samples.Pages.Controls.CameraViewPage"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:controls="clr-namespace:XLabs.Forms.Controls;assembly=XLabs.Forms">
<StackLayout>
<controls:CameraView HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" />
</StackLayout>

关于c# - 如何使用手机摄像头作为背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41419159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com