我只用了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 | 如何调用摄像头拍照相关推荐

  1. unity调用摄像头拍照

    我的unity调用摄像头拍照 因为做的是pc端的,所以不知道手机上效果是怎样的,据说代码是完全相同的. 废话不说,上代码, 打开摄像头代码: /// <summary>/// Opens ...

  2. Ionic系列——调用摄像头拍照和选择图库照片功能的实现

    2019独角兽企业重金招聘Python工程师标准>>> 1.需求描述 最近要做一个功能就是调用摄像头拍照,然后上传照片的功能,或者直接打开图库选择照片然后上传. 2.准备 ①.添加插 ...

  3. android: 调用摄像头拍照

    很多应用程序都可能会使用到调用摄像头拍照的功能,比如说程序里需要上传一张图片 作为用户的头像,这时打开摄像头拍张照是最简单快捷的.下面就让我们通过一个例子来学 习一下,如何才能在应用程序里调用手机的摄 ...

  4. android 7调用摄像头,Android调用摄像头拍照(兼容7.0)

    [实例简介] Android调用摄像头拍照(兼容7.0)Demo,原博客文章https://blog.csdn.net/u010356768/article/details/70808162 [实例截 ...

  5. Python:opencv库实现调用摄像头拍照并保存到本地

    导入 opencv-python库,复制代码即可运行 import cv2def picture_shoot(image_name='img.png', image_path=r'E:/') -> ...

  6. vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式

    PC端调用摄像头拍照上传base64格式到后台,这个没什么花里胡哨的骚操作,直接看代码 (canvas + video) <template><div><!--开启摄像头 ...

  7. HTML5+JavaScript调用摄像头拍照或者摄像

    调用摄像头拍照或者摄像有多种方法,之前介绍过两种: HTML5 <input type="file">标签直接调用:https://blog.csdn.net/qq_2 ...

  8. jquery.webcam.js实现调用摄像头拍照兼容各个浏览器

    jquery.webcam.js实现调用摄像头拍照兼容各个浏览器 1.demo 可直接复制使用,需要在环境里运行. 2.所需 js 文件和 swf 控件可在官方博客下载,地址http://www.xa ...

  9. Unity如何调用摄像头并显示在窗口内

    Unity如何调用摄像头并显示在窗口内 序言 目标 unity中的实现 序言 在学习Unity开发AR过程中,发现无论是Vuforia还是Unity中的ARkit或者ARcore,均是建立一个ARca ...

最新文章

  1. app前后台交互php_PHP丨前端网页是怎么跟后台进行数据交互的(实战)
  2. 一文了解 Apache Flink 核心技术
  3. TEXTMETRIC 结构详解
  4. MySQL索引与Index Condition Pushdown(二)
  5. 微信小程序把玩(三十二)Image API
  6. [十二省联考 2019] 异或粽子(可持久化字典树 + 二叉堆)
  7. 创业 4 年获近 7000 万美元融资,53 岁老程序员 all in 开源
  8. vnc连接服务器怎么配置文件,vnc服务器和客户端怎么配置文件
  9. c语言sort函数排序二维数组,关于C++ 的 sort 对二维数组排序。该如何解决
  10. 01.学习笔记-linux操作系统常用命令
  11. OA系统四级模块编写测试用例(角色模块)
  12. 《自己动手写爬虫》笔记
  13. java程序设计课后答案 刘慧宁_【单选题】建筑立面图中,室外地坪轮廓线应用( )。...
  14. 如果不想渲染,保持原样,verbatim
  15. cpu占用高 mongo_记一次 MongoDB 占用 CPU 过高问题的排查
  16. 洛谷——P1348 Couple number(java实现)
  17. chrome 导入html书签,怎么把谷歌浏览器书签导出来?怎么将书签导入到别的浏览器中?...
  18. 流利阅读 2019.1.5 Gatekeeper at Japan’s ‘Suicide Forest’ hopes music can save lives
  19. 全国各省-土地转让收入(1995-2019年)
  20. java ethereum_EthereumJ是Ethereum协议的纯java实现

热门文章

  1. 计算机二级基础知识总览,2020年最新计算机二级考试题库资料大全!
  2. Filecoin主网离正式上线还有多远?go-filecoin、lotus已正式互通
  3. Windows 7 / 便笺快捷键——让Win7便笺拥有格式
  4. 数据库 Oracle设置口令到达终止时间后的宽限天数
  5. wordpress 更换网络后本机ip的更换
  6. js 正则转换千分位(带小数)
  7. 《程序是怎样跑起来的》第八章读后感
  8. 亚信科技私有化退市5年后再次成功IPO
  9. 仿牛客社区开发--搜索引擎模块
  10. 顺丰2020年财报幕后:不可轻视的科技力量和新增长曲线