您的位置:首页 > 移动开发 > Unity3D

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

2017-04-26 16:52 489 查看
项目要求调用摄像头,并且把图像保存下来,上传到服务器。 
这里有几个难点,调用摄像头是很简单的,unity已经提供好了接口,我们只需要调用就行。

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

[csharp] view
plain copy

 





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中。 
下面看这段怎么使用上面的那段代码。

   

[csharp] view
plain copy

 





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);  

}  

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

[csharp] view
plain copy

 





/// <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);  

}  

保存文件的路径需要自己来设置,要保存的区域大家自己可以来调。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity