美文网首页
Hololens2调用设备摄像头拍照

Hololens2调用设备摄像头拍照

作者: 玄策丶 | 来源:发表于2023-12-20 14:50 被阅读0次
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Windows.WebCam;
using UnityEngine.UI;

public class TakePhotoCtrl : MonoBehaviour
{
    public static TakePhotoCtrl Ins;

    PhotoCapture photoCaptureObject = null;

    public RawImage RawImg;

    private void Awake()
    {
        Ins = this;
    }

    public void TakePhoto()
    {
        PhotoCapture.CreateAsync(false, OnPhotoCaptureCreated);
    }

    void OnPhotoCaptureCreated(PhotoCapture captureObject)
    {
        photoCaptureObject = captureObject;
        Resolution cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First();
        CameraParameters c = new CameraParameters();
        c.hologramOpacity = 0.0f;
        c.cameraResolutionWidth = cameraResolution.width;
        c.cameraResolutionHeight = cameraResolution.height;
        c.pixelFormat = CapturePixelFormat.BGRA32;
        captureObject.StartPhotoModeAsync(c, OnPhotoModeStarted);
    }

    private void OnPhotoModeStarted(PhotoCapture.PhotoCaptureResult result)
    {
        if (result.success)
        {
            photoCaptureObject.TakePhotoAsync(OnCapturedPhotoToMemory);
        }
        else
        {
            Debug.LogError("Unable to start photo mode!");
        }
    }

    void OnCapturedPhotoToMemory(PhotoCapture.PhotoCaptureResult result, PhotoCaptureFrame photoCaptureFrame)
    {
        if (result.success)
        {
            // 使用正确分辨率创建Texture2D对象
            Resolution cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First();
            Texture2D targetTexture = new Texture2D(cameraResolution.width, cameraResolution.height);
            // 将图像数据拷贝到Texture2D对象中
            photoCaptureFrame.UploadImageDataToTexture(targetTexture);
            // 进一步使用Texture2D对象,比如赋给材质神马的

            RawImg.texture = targetTexture;
        }
        // 清理相机
        photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoMode);
    }
    void OnStoppedPhotoMode(PhotoCapture.PhotoCaptureResult result)
    {
        photoCaptureObject.Dispose();
        photoCaptureObject = null;
    }

}


相关文章

网友评论

      本文标题:Hololens2调用设备摄像头拍照

      本文链接:https://www.haomeiwen.com/subject/omozidtx.html