Unity 3D之调用摄像头并存储
来源:互联网 发布:淘宝魔镜软件管用吗 编辑:程序博客网 时间:2024/05/17 07:45
写在前面:
最近项目中需要用到拍照的功能,这个功能说难其实不难,说简单但是用的人很少。我在网上找了一些资料,加上自己的理解整理一些新的。
如何调用摄像头?
调用摄像头这个是一个比较简单的事,因为Unity已经封装了一些好的接口,我们直接可以调用就好了:
public class CameraTest : MonoBehaviour {//摄像头图像类,继承自texture WebCamTexture tex; public Image WebCam; public MeshRenderer ma; public Button saveImage; void Start () {//开启协程,获取摄像头图像数据 StartCoroutine(OpenCamera()); saveImage.onClick.AddListener(SaveImage); } // Update is called once per frame void Update() { } IEnumerator OpenCamera() {//等待用户允许访问 yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);//如果用户允许访问,开始获取图像 if (Application.HasUserAuthorization(UserAuthorization.WebCam)) {//先获取设备 WebCamDevice[] device = WebCamTexture.devices; string deviceName = device[0].name;//然后获取图像 tex = new WebCamTexture(deviceName);//将获取的图像赋值 ma.material.mainTexture = tex;//开始实施获取 tex.Play(); } }}
将这段代码赋值给一个带render的物体就能够显示摄像机拍摄的效果。
图片保存
图片保存这里就有点难度了,我们要获取到摄像机的图像那么主要分为两个方法:
1、截屏。也是大多数人采用的方法。
2、将摄像机的图像数据保存。本文所用的方法。
截屏方法很多,大家可以去网上找找,我这里引用一个:http://blog.csdn.net/qq_28221881/article/details/53820918。、
截屏这里有一个需要注意的地方,那就是保存获取函数必须在协程中等待这一帧结束。
直接保存摄像机图片
但我们通常直接使用截图的话会非常不方便,
首先是我们需要去结算图片的位置,如果位置不对那截出来的就会很尴尬。除非是全屏。
其次截图受到灯光等3D场景的影响。
然后是截图的大小不一定是满意的。
所以我们就想到直接使用webcamTexture这个类保存摄像机的图像。
private void SaveImage() {//在上一段代码中加入该方法 CameraTextureSave.Save(tex); }
public class CameraTextureSave : MonoBehaviour {public static void Save(WebCamTexture t) { Texture2D t2d = new Texture2D(t.width,t.height,TextureFormat.ARGB32,true); //将WebCamTexture 的像素保存到texture2D中 t2d.SetPixels(t.GetPixels()); //t2d.ReadPixels(new Rect(200,200,200,200),0,0,false); t2d.Apply();//编码 byte[] imageTytes = t2d.EncodeToJPG(); //存储 File.WriteAllBytes(Application.streamingAssetsPath + "/my/" + Time.time + ".jpg", imageTytes); }}
出于强迫症的原因,我将保存方法单独写在另一个类中方便调用。
这里文件写入使用很简单的写入方法,需要注意的是需要手动创建目录,不然会报错。
两种方法截图效果对比:
本文方法
截图方法
thissky出品,转载请注明出处:http://www.cnblogs.com/zhuhongjongy/p/7199308.html
- Unity 3D之调用摄像头并存储
- Unity 3d 摄像头
- opencv调用摄像头并存储视频
- Unity 3d 鼠标滚轮控制摄像头
- Unity调用PC摄像头
- Unity调用PC摄像头
- unity调用摄像头
- unity调用外部摄像头
- unity调用摄像头
- unity调用摄像头拍照
- unity调用摄像头
- unity调用摄像头拍照
- Unity 3D 调用 Android
- Unity 2D游戏开发教程之摄像头追踪功能
- Unity 3D——虚拟场景中的飞行摄像头
- unity ~ 调用摄像头的代码
- Unity、笔记本调用外接摄像头
- unity调用摄像头和闪光灯
- SpringBoot(一) 入门
- linux网络编程二:基础socket, bind, listen, accept, connect
- JQ实现效果:焦点选中样式
- Oracle 10g RAC修改public ip、vip和private ip
- mysql数据库最大连接数设置
- Unity 3D之调用摄像头并存储
- Sailing(BFS 金马五校赛-东华大学 )
- leetcode[Binary Watch]
- Android在子线程更新UI界面
- springboot 使用自己的fastJson框架
- 动态规划7:最长上升子序列LIS
- 乱七八糟
- Android
- python连接mysql和sqlsever驱动