Unity3D中调用外接摄像头,并保存为图片文件

来源:互联网 发布:二叉树 treenode java 编辑:程序博客网 时间:2024/05/16 12:15

http://bbs.9ria.com/thread-170539-1-1.html

项目要求调用摄像头,并且把图像保存下来,上传到服务器。 

这里有几个难点,调用摄像头是很简单的,unity已经提供好了接口,我们只需要调用就行。

问题就是怎么把图片保存下来。我们来看下代码。

public string deviceName;WebCamTexture tex;//接收返回的图片数据/// <summary>/// 实现IEnumerator接口,这里使用了一个协程,相当于多线程。/// 这里是调用摄像头的方法。/// </summary>/// <returns></returns>IEnumerator test(){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);tex.Play();//开始摄像}}


这段代码就是Unity调用摄像头的方法,图片数据就保存在tex中。 
下面看这段怎么使用上面的那段代码。




   
void OnGUI(){//开始按钮if (GUI.Button(new Rect(0, 0, 100, 100), "click")){//调用启动那个协程,开启摄像头StartCoroutine(test());}//暂停if(GUI.Button(new Rect(0,200,100,30),"pause")){tex.Pause();//这个方法就是保存图片StartCoroutine(getTexture2d());}//重启开始if (GUI.Button(new Rect(0, 300, 100, 30), "restart")){tex.Play();}if (GUI.Button(new Rect(100, 0, 100, 30), "摄像")){//开始摄像,摄像就是一系列的图片集合StartCoroutine(getTexture2dshexiang());}if(tex!=null)GUI.DrawTexture(new Rect(200, 200, 200, 180), tex);}



保存图片是一个难点,找了半天,才发现这个方法来实现   


/// <summary>/// 获取摄像头截取的图片,这里也是一个协程/// </summary>/// <returns></returns>IEnumerator getTexture2d(){yield return new WaitForEndOfFrame();Texture2D t = new Texture2D(200, 180);//要保存图片的大小//截取的区域t.ReadPixels(new Rect(200, 320, 200, 180), 0, 0, false);t.Apply();//把图片数据转换为byte数组byte[] byt = t.EncodeToPNG();//然后保存为图片File.WriteAllBytes(Application.dataPath + "/shexiang/" + Time.time + ".jpg", byt);}




保存文件的路径需要自己来设置,要保存的区域大家自己可以来调。
0 0
原创粉丝点击