Unity | 如何调用摄像头拍照
我只用了PC端,其他平台我没试过哈~
一、摄像头进入unity的过程
1.常见的输入内容
常见的输入内容:声音、图片(影像就是一连串图片不停的放,所以摄像头发给电脑的实际上是很多很多图片)
常见的输入设备:输入声音对应的设备一般是麦克风,图片对应的设备一般设摄像头。
2.unity获取设备访问权限
Application(类):这个类里面,都是在应用运行的时候,去获取和控制一些信息的。
RequestUserAuthorization(方法):在上面Application(类)里面,有一个方法,就是可以获取麦克风和摄像头设备的输入信息。
3.摄像机和麦克风
UserAuthorization:摄像头和麦克风,都在UserAuthorization里面。
摄像设备:UserAuthorization.WebCam
麦克风:UserAuthorization.Microphone
4.获取到摄像机的代码部分
因为需要计算机去询问:“你让不让我用呀,能不能给我呀?”
所以,我们不能用普通的方法,我们需要等待它问完。
因此,我们只能用携程。
IEnumerator OpenCamera() {yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);
}
5.得知是否可以访问
HasUserAuthorization:获得“你给不给用?”这句话的答案。这个答案也要通过Application
如果可以用,我们就说,相机照到啦,如果不可以用,我们就说,相机找不到!
IEnumerator OpenCamera() {yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);//这小节内容if (Application.HasUserAuthorization(UserAuthorization.WebCam)){Debug.Log("找到相机");}else {Debug.Log("没找到相机");}}
二、获取到摄像头中的图片
1.摄像头中的图片的方法
WebCamTexture(string deviceName, int requestedWidth, int requestedHeight);
这个方法可以获取到摄像头当前的图片,但是它需要一些信息
deviceName:摄像机的名称
requestedWidth:你希望读出来的图片宽是多少?(这里假设我要1920)
requestedHeight:你希望读出来的图片高是多少?(这里假设我要1080)
注意:读取出来的图片是属于WebCamTexture
2.如何获取摄像机的名字
首先应该获取所有插在电脑上的摄像机。
WebCamDevice:摄像机属于的类
WebCamTexture.devices:获取所有插在电脑上的摄像机的方法
IEnumerator OpenCamera() {yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);if (Application.HasUserAuthorization(UserAuthorization.WebCam)){Debug.Log("找到相机");//本节内容//获取所有摄像机WebCamDevice[] devices = WebCamTexture.devices;//我们可能插很多摄像机,所以我们用了一个数组来接收WebCamDevice[] devices}else {Debug.Log("没找到相机");}}
我们就用找到的第一台摄像机就行了,所以我们只需要第一台的名字
//本节内容string CameraName;IEnumerator OpenCamera() {yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);if (Application.HasUserAuthorization(UserAuthorization.WebCam)){Debug.Log("找到相机");//获取所有摄像机WebCamDevice[] devices = WebCamTexture.devices;//本节内容CameraName = devices[0].name;}else {Debug.Log("没找到相机");}}
3.获取图片并赋值
现在我们获取到如下方法所需要的所有资料
WebCamTexture(string deviceName, int requestedWidth, int requestedHeight);
WebCamTexture pics = new WebCamTexture(CameraName, 1920, 1080);
注:这里的WebCamTexture可以和Texture通用
所以,我在外面和代码各建了一个RawImage用来传递获取到的图片
把图一拖给图二。
string CameraName;//小节内容[SerializeField] RawImage rawImage;WebCamTexture pics;private void Start(){StartCoroutine(OpenCamera());}IEnumerator OpenCamera() {yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);if (Application.HasUserAuthorization(UserAuthorization.WebCam)){Debug.Log("找到相机");//获取所有摄像机WebCamDevice[] devices = WebCamTexture.devices;CameraName = devices[0].name;pics = new WebCamTexture(CameraName,1920, 1080);//小节内容rawImage.texture = pics;//启用摄像机pics.Play();}else {Debug.Log("没找到相机");}}
这样就可以获取摄像头了。
上面如果获取到的图像非常卡,可以把
WebCamTexture pics = new WebCamTexture(CameraName,1920, 1080);
里面1920和1080降低一点,
如果实在不知道放多少,可以放0,0,他会自己默认给个数。
三、拍照功能
拍照有两种:
1.你只要这个相片
2.除了这个相片还想要界面里的边框呀之类
1.只要照片
相机之前是一直在刷新的,所以现在我们让它先停下来;
pics.Stop();
停下来之后,最后一张图是存在 rawImage里面的,我们直接把这张图保存下来就可以了。
这个保存的代码就是在截图拍照的最后几句代码。
2.截图拍照
其实这里也可以分为全屏截图和区域截图,这里只讲区域截图。
区域截图:就是在诺大的界面中,选一块长方形进行截图(其他形状这里也不讨论)。
a.Rect
在unity中,长方体就是Rect,所以我们建一个Rect。
[SerializeField] Rect rect;
如果你挂到了物体上,你就可以看见下图:
这个图也很好理解,你要一个长方形,必须要给他W(宽),H(高),和它的位置(x,y)。
但是这里要了解一个事情:
Rect的坐标是左下角是(0,0)。
现在我们要去填这四个数。那么我们要确定一下,我们要截图哪部分,拿Image在图里面比一下。
假设我需要绿色的这部分。
注意,这个Image要放在Canvas下面,否则坐标还要去调。
因为刚才说的,Rect的零点在左下角,所以我们要把这个Image的零点改到左下角。
这会上面的数据就可以用了:
这里给他取个整吧。
到这里,我们的方框的位置,和大小,就是这个Image的位置和大小了。
可以把Image删掉了。
b.根据方块块的位置截图
IEnumerator TakePic0() { pics.Stop();yield return new WaitForEndOfFrame();//先建一个和想截图一样大小的Texture2DTexture2D texture = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, true);//让这个texture读取一下现在方块块那块位置的图texture.ReadPixels(rect, 0, 0);//让这个texture应用一下刚才方块块的图,就是和我们做完文件点保存是一个意思texture.Apply();//把图片转成PNG格式byte[] bytes = texture.EncodeToPNG();//写一下你打算保存到哪string s = Application.streamingAssetsPath+"/0.png";//最后把转换好的格式,保存在你想保存的地址里System.IO.File.WriteAllBytes(s, bytes);}
四、后面发现什么问题,还是会不定时更新的
Unity | 如何调用摄像头拍照相关推荐
- unity调用摄像头拍照
我的unity调用摄像头拍照 因为做的是pc端的,所以不知道手机上效果是怎样的,据说代码是完全相同的. 废话不说,上代码, 打开摄像头代码: /// <summary>/// Opens ...
- Ionic系列——调用摄像头拍照和选择图库照片功能的实现
2019独角兽企业重金招聘Python工程师标准>>> 1.需求描述 最近要做一个功能就是调用摄像头拍照,然后上传照片的功能,或者直接打开图库选择照片然后上传. 2.准备 ①.添加插 ...
- android: 调用摄像头拍照
很多应用程序都可能会使用到调用摄像头拍照的功能,比如说程序里需要上传一张图片 作为用户的头像,这时打开摄像头拍张照是最简单快捷的.下面就让我们通过一个例子来学 习一下,如何才能在应用程序里调用手机的摄 ...
- android 7调用摄像头,Android调用摄像头拍照(兼容7.0)
[实例简介] Android调用摄像头拍照(兼容7.0)Demo,原博客文章https://blog.csdn.net/u010356768/article/details/70808162 [实例截 ...
- Python:opencv库实现调用摄像头拍照并保存到本地
导入 opencv-python库,复制代码即可运行 import cv2def picture_shoot(image_name='img.png', image_path=r'E:/') -> ...
- vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式
PC端调用摄像头拍照上传base64格式到后台,这个没什么花里胡哨的骚操作,直接看代码 (canvas + video) <template><div><!--开启摄像头 ...
- HTML5+JavaScript调用摄像头拍照或者摄像
调用摄像头拍照或者摄像有多种方法,之前介绍过两种: HTML5 <input type="file">标签直接调用:https://blog.csdn.net/qq_2 ...
- jquery.webcam.js实现调用摄像头拍照兼容各个浏览器
jquery.webcam.js实现调用摄像头拍照兼容各个浏览器 1.demo 可直接复制使用,需要在环境里运行. 2.所需 js 文件和 swf 控件可在官方博客下载,地址http://www.xa ...
- Unity如何调用摄像头并显示在窗口内
Unity如何调用摄像头并显示在窗口内 序言 目标 unity中的实现 序言 在学习Unity开发AR过程中,发现无论是Vuforia还是Unity中的ARkit或者ARcore,均是建立一个ARca ...
最新文章
- app前后台交互php_PHP丨前端网页是怎么跟后台进行数据交互的(实战)
- 一文了解 Apache Flink 核心技术
- TEXTMETRIC 结构详解
- MySQL索引与Index Condition Pushdown(二)
- 微信小程序把玩(三十二)Image API
- [十二省联考 2019] 异或粽子(可持久化字典树 + 二叉堆)
- 创业 4 年获近 7000 万美元融资,53 岁老程序员 all in 开源
- vnc连接服务器怎么配置文件,vnc服务器和客户端怎么配置文件
- c语言sort函数排序二维数组,关于C++ 的 sort 对二维数组排序。该如何解决
- 01.学习笔记-linux操作系统常用命令
- OA系统四级模块编写测试用例(角色模块)
- 《自己动手写爬虫》笔记
- java程序设计课后答案 刘慧宁_【单选题】建筑立面图中,室外地坪轮廓线应用( )。...
- 如果不想渲染,保持原样,verbatim
- cpu占用高 mongo_记一次 MongoDB 占用 CPU 过高问题的排查
- 洛谷——P1348 Couple number(java实现)
- chrome 导入html书签,怎么把谷歌浏览器书签导出来?怎么将书签导入到别的浏览器中?...
- 流利阅读 2019.1.5 Gatekeeper at Japan’s ‘Suicide Forest’ hopes music can save lives
- 全国各省-土地转让收入(1995-2019年)
- java ethereum_EthereumJ是Ethereum协议的纯java实现