Unity3D中调用外接摄像头,并保存为图片文件
2017-04-26 16:52
489 查看
项目要求调用摄像头,并且把图像保存下来,上传到服务器。
这里有几个难点,调用摄像头是很简单的,unity已经提供好了接口,我们只需要调用就行。
问题就是怎么把图片保存下来。我们来看下代码。
[csharp] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
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
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
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
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
/// <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已经提供好了接口,我们只需要调用就行。
问题就是怎么把图片保存下来。我们来看下代码。
[csharp] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
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
![](https://code.csdn.net/assets/CODE_ico.png)
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
![](https://code.csdn.net/assets/CODE_ico.png)
/// <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);
}
保存文件的路径需要自己来设置,要保存的区域大家自己可以来调。
相关文章推荐
- Unity3D中调用外接摄像头,并保存为图片文件
- Unity3D中调用外接摄像头,并保存为图片文件
- Unity3D中调用外接摄像头,并保存为图片文件
- unity3D调用外接摄像头,保存图片、不使用截屏方式
- Qt调用摄像头(截取并保存图片)
- Android调用系统相机拍照并保存图片文件
- 调用摄像头拍摄图片并保存
- Qt调用摄像头(截取并保存图片)
- Unity3D调用摄像头并保持为图片然后加载到场景中代码 拍照照相代码
- Web调用安卓,苹果手机摄像头,本地图片和文件
- Web调用安卓,苹果手机摄像头,本地图片和文件
- Web调用安卓,苹果手机摄像头,本地图片和文件
- 百度编辑器(UEditor)调用上传图片、上传文件等模块,并修改图片、文件的保存路径
- unity3D调用外接摄像头,并保持为图片
- unity3D调用外接摄像头,并保持为图片
- Web调用安卓,苹果手机摄像头,本地图片和文件
- Web调用安卓,苹果手机摄像头,本地图片和文件
- HLMT5中input实现多种文件上传,视频上传,图片上传,调用手机摄像头,照相机,相册功能
- Qt使用opencv调用摄像头录制视频并保存文件
- Qt调用摄像头(截取并保存图片)