Unity调用摄像头并截图

徘徊边缘 提交于 2020-02-15 17:18:46

首先界面是这样的,很简易
在这里插入图片描述
直接上代码

using System.IO;
using UnityEngine;

public class WebCamera : MonoBehaviour
{
    [Tooltip("返回的照片数据,根据返回的照片,进行照片的识别和比对认证等等!"), Space(5)]
    [Header("摄像头拍摄的照片"),]
    public WebCamTexture camTexture;//摄像头拍下的图片数据

    [Header("摄像头设备名")]
    private WebCamDevice[] devices;

    [Tooltip("USB摄像头设备"), Space(5)]
    [Header("摄像头设备名")]
    public string deviceName;//摄像头设备名称

    public bool isClick;//是否点击了按钮

    private void Start()
    {
        isClick = false;
    }
    //初始化摄像头显示的图像的大小
    private void Awake()
    {
        camTexture = new WebCamTexture(deviceName, 800, 600, 60);
    }

    //通过GUI绘制摄像头要显示的窗口
    private void OnGUI()
    {
        //首先根据摄像头展示的画面来判断摄像头是否存在
        if (isClick == true && camTexture != null)
        {
            //绘制画面(Screen.width / 2 - 150f, Screen.height / 2 - 290,这里是画面距离场景的高和宽的限制)
            //800, 600是和camTexture的画面一样大的绘制窗口
            GUI.DrawTexture(new Rect(0, 0, 800, 600), camTexture);
        }
        if (isClick == false && camTexture != null)//不显示画面(没写这个步骤之前有个坑)
        {
            GUI.DrawTexture(new Rect(Screen.width / 2 - 150f, Screen.height / 2 - 290, 0, 0), camTexture);
        }

    }

    //打开摄像机的方法//挂到button按钮上
    public void OpenWebCamDevice()
    {
        isClick = true;
        if (isClick == true)
        {
            //用户授权打开摄像头
            if (Application.HasUserAuthorization(UserAuthorization.WebCam))
            {
                devices = WebCamTexture.devices;//显示画面的设备就是要打开的摄像头
                deviceName = devices[0].name;//获取到设备名称
                camTexture.Play();//开启摄像头
            }
        }
    }

    //关闭摄像头//挂到button按钮上
    public void CloseWebCamDevice()
    {
        if (isClick == true && camTexture != null)
        {
            isClick = false;
        }
    }

    // 保存图片方法,也挂在button上,我懒
    public void SaveImage()
    {
        Save(camTexture);
    }
    void Save(WebCamTexture t)
    {
        Texture2D t2d = new Texture2D(t.width, t.height, TextureFormat.ARGB32, true);
        //将WebCamTexture 的像素保存到texture2D中
        t2d.SetPixels(t.GetPixels());
        //t2d.ReadPixels(new Rect(200,200,200,200),0,0,false);
        t2d.Apply();
        //编码
        byte[] imageTytes = t2d.EncodeToJPG();
        // 存储路径
        string path = Application.streamingAssetsPath + "/my/" + Time.time + ".jpg";
        //存储
        File.WriteAllBytes(path, imageTytes);
        Debug.Log("保存" + path);
    }
}

需要注意的是,因为路径的问题,需要手动创建放置截图的文件夹
在这里插入图片描述
效果如图
在这里插入图片描述
截图
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!