• Unity3D WebCamTexture 调用外部摄像头


    http://www.itnose.net/detail/6259004.html

    一:Unity 中使用WebCamTexture 调用摄像头实现拍照和摄像。

    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;
    	public Texture2D _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); 
    		}
    		
    	}
    	
    	/// <summary>
    	/// 捕获窗口位置
    	/// </summary>
    	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();
    		}
    	}
    	
    	/// <summary>
    	/// 获取截图
    	/// </summary>
    	/// <returns>The texture.</returns>
    	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();
    	}
    	
    	/// <summary>
    	/// 连续捕获照片
    	/// </summary>
    	/// <returns>The photoes.</returns>
    	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);
    		}
    	}
    }



    二:Unity 中使用WebCamTexture 设置背景为摄像头画面

    1在unity的场景中新建一个Quad作为背景,可以自行调节缩放和位置。

    2.新建一个Material文件夹用来存放Material,在Material里新建一个Material材质,并命名为CamTex。
    3.选中CamTex材质,在Inspector面板中选择shader的模式为Unlit/Texture。
    4.新建C#脚本,并将其命名为WebCam,双击脚本进行编辑,添加以下代码:
    using UnityEngine;
    using System.Collections;
     
    public class WebCam : MonoBehaviour {
     
        public string deviceName;
        WebCamTexture tex;
            // Use this for initialization
            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, 400, 300, 12);
                renderer.material.mainTexture = tex;
                tex.Play();
            }
        }
    }


    5.将CamWeb脚本和CamTex材质拖到Quad上
    6.将Quad调至摄像机正对位置。
    7.点击播放按钮即可调用摄像头,在quad的贴图会显示摄像头中的画面。
  • 相关阅读:
    面试题收集——Java基础部分(一)
    Eclipse在线安装SVN
    一、 Log4E插件下载
    MyEclipse使用总结——MyEclipse中配置WebLogic12c服务器
    MyEclipse使用总结——使用MyEclipse打包带源码的jar包
    MyEclipse使用总结——设置MyEclipse使用的Tomcat服务器
    MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
    MyEclipse使用总结——修改MyEclipse默认的Servlet和jsp代码模板
    MyEclipse使用总结——MyEclipse文件查找技巧
    CMSIS Example
  • 原文地址:https://www.cnblogs.com/alps/p/5539530.html
Copyright © 2020-2023  润新知