首先界面是这样的,很简易
直接上代码
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);
}
}
需要注意的是,因为路径的问题,需要手动创建放置截图的文件夹
效果如图
截图
来源:CSDN
作者:Mediary
链接:https://blog.csdn.net/Mediary/article/details/104315147