Unity 3D 调用摄像头捕获照片 录像

您所在的位置:网站首页 unity录像 Unity 3D 调用摄像头捕获照片 录像

Unity 3D 调用摄像头捕获照片 录像

2023-02-18 01:42| 来源: 网络整理| 查看: 265

1,要想调用摄像头首先要打开摄像头驱动,如果用户允许则可以使用。

2,定义WebCamTexture的变量用于捕获单张照片。

3,连续捕获须启用线程。

实现代码:

  

using UnityEngine; using System.Collections; using System.IO; using System.Runtime.Serialization; using System.Runtime .Serialization.Formatters.Binary; using System.Threading; public class takePhoto : MonoBehaviour { public string deviceName; //接收返回的图片数据 WebCamTexture tex; void OnGUI() { if (GUI.Button(new Rect(10, 20, 100, 40), "开启摄像头")) { // 调用摄像头 StartCoroutine(start()); } if(GUI.Button(new Rect(10,70,100,40),"捕获照片")) { //捕获照片 tex.Pause(); StartCoroutine(getTexture()); } if(GUI.Button(new Rect(10,120,100,40),"再次捕获")) { //重新开始 tex.Play(); } if(GUI.Button(new Rect(120,20,80,40),"录像")) { //录像 StartCoroutine(SeriousPhotoes()); } if(GUI.Button(new Rect(10,170,100,40),"停止")) { //停止捕获镜头 tex.Stop (); StopAllCoroutines(); } if(tex!=null) { // 捕获截图大小 —距X左屏距离 | 距Y上屏距离 GUI.DrawTexture(new Rect(Screen.width/2-150,Screen.height/2-190,280,200),tex); } } /// /// 捕获窗口位置 /// public IEnumerator start() { yield return Application.RequestUserAuthorization(UserAuthorization.WebCam); if (Application.HasUserAuthorization(UserAuthorization.WebCam)) { WebCamDevice[] devices = WebCamTexture.devices; deviceName= devices[0].name; tex=new WebCamTexture(deviceName,300,300,12); tex.Play(); } } /// /// 获取截图 /// /// The texture. public IEnumerator getTexture() { yield return new WaitForEndOfFrame(); Texture2D t=new Texture2D(400,300); t.ReadPixels( new Rect(Screen.width/2-200,Screen.height/2-50,360,300),0,0,false); //距X左的距离 距Y屏上的距离 // t.ReadPixels(new Rect(220, 180, 200, 180), 0, 0, false); t.Apply(); byte[] byt=t.EncodeToPNG(); File.WriteAllBytes(Application.dataPath+"/Photoes/"+Time.time+".jpg",byt); tex.Play(); } /// /// 连续捕获照片 /// /// The photoes. public IEnumerator SeriousPhotoes() { while (true) { yield return new WaitForEndOfFrame(); Texture2D t = new Texture2D(400, 300, TextureFormat.RGB24, true); t.ReadPixels(new Rect(Screen.width/2-180,Screen.height/2-50,360,300), 0, 0, false); t.Apply(); print(t); byte[] byt = t.EncodeToPNG(); File.WriteAllBytes(Application.dataPath + "/MulPhotoes/" + Time.time.ToString().Split('.')[0] + "_" + Time.time.ToString().Split('.')[1] + ".png", byt); Thread.Sleep(300); } } }

将此脚本绑定到MainCamer上,运行效果如下:

其余也没什么了,哦,对了,记得建个空文件夹用于储存捕获到的照片。

希望我们能够共同学习!

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3