转自:http://dev.arinchina.com/177wz/ar9641/9641/1
启用相机摄影摄像能力
在使用摄像头时,我们必须启用WebCam能力。
1. 在Unity中,打开Player settings,(通过导航,到“编辑>项目设置>播放器”页面访问播放器设置)
2. 展开Windows Store标签页
3. 在"Publishing Settings > Capabilities"部分中,勾选WebCam能力
在同一时刻中只能执行一次相机操作。为了识别当前相机环境处于哪种模式下(拍照还是视频或无场景),你可以通过UnityEngine.VR.WSA.WebCam.Mode来进行检查。
照片捕获
命名空间:UnityEngine.VR.WSA.WebCam
类型:PhotoCapture
PhotoCapture类型允许使用相机拍摄静态照片。使用相机拍摄的正常模式如下:
1. 创建PhotoCapture对象
2. 通过使用想要的设置来创建一个CameraParameters对象
3. 调用StartPhotoModeAsync(),开始拍照模式
4. 选取想要的照片拍摄
· (可选项)进一步处理图像
5. 关闭拍照模式并释放资源
使用PhotoCapture的通用设置
对于任意拍照方式,开始的前三步都如下:
创建PhotoCapture对象
存储对象,配置拍摄参数并开始拍照模式
最后,需要使用同样的清理代码来关闭相机
完成这些步骤后,你可以挑选使用捕获照片方式。
捕获照片至文件
最简单的操作是直接将照片捕获到文件。照片可以被存储为PNG或JPG格式。
如果我们成功开始了拍照模式,就需要拍照并将照片存储到磁盘上。
完成捕获照片到磁盘的操作后,我们需要退出拍照模式并清理对象
捕获文件至Texture2D对象
我们可以把捕获数据保存为Texture2D对象,做法和保存到磁盘类似。步骤如下:
在OnPhotoModeStarted,捕获一帧图像到内存中。
我们需要把得到的结果赋给Texture2D对象,然后清理代码
捕获照片并与原始数据交互
为了在内存中操作图像原始数据,需要的步骤和捕获图片到Texture2D类似,不同之处在于,OnCapturedPhotoToMemory()方法里可以获得图像原始数据并操作它们。
在下面的例子中,我们会创建一个List用来进一步处理或者直接通过SetPixels()方法来应用于Texture2D对象。
捕获视频
命名空间:UnityEngine.VR.WSA.WebCam
类型:VideoCapture
捕获视频的用法和捕获照片相似,不同之处在于你必须指定一个帧率(FPS),并且直接存储到磁盘上的视频必须是MP4格式。
下面是具体步骤:
1. 创建VideoCapture对象
2. 使用我们想要的设置来创建一个CameraParameters对象
3. 调用 StartVideoModeAsync()方法开始视频捕获模式
4. 开始录制视频
5. 停止录制视频
6. 停止视频捕获模式并释放相机资源
开始创建VideoCapture对象VideoCapture m_VideoCapture = null
设置参数
配置完成VideoCapture对象,开始录制视频
在开始录制后,你需要通过更新UI或者行为来确保可以停止视频捕获。在这里我们只输出log。
最后我们需要停止视频捕获,可以通过定时器或者其他输入方式来实现。
一旦停止视频捕获,需要及时退出视频捕获模式并释放相机资源。
故障问题解决
·获取不到分辨率
· 确保你在项目中启用了WebCam能力
· 全息图像无论怎样设置都不能捕获到图片或者视频中
· 未来的更新会支持捕获全息图像