Unity 3D 调用摄像头捕获照片 录像

1,要想调用摄像头首先要打开摄像头驱动,如果用户允许则可以使用。

2,定义WebCamTexture的变量用于捕获单张照片。

3,连续捕获须启用线程。

实现代码:

  


using UnityEngine;
using System.Collections;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime .Serialization.Formatters.Binary;
using System.Threading;

public class takePhoto : MonoBehaviour
{
public string deviceName;
//接收返回的图片数据
WebCamTexture tex;

void OnGUI()
{
if (GUI.Button(new Rect(10, 20, 100, 40), "开启摄像头"))
{
// 调用摄像头
StartCoroutine(start());
}

if(GUI.Button(new Rect(10,70,100,40),"捕获照片"))
{
//捕获照片
tex.Pause();
StartCoroutine(getTexture());
}

if(GUI.Button(new Rect(10,120,100,40),"再次捕获"))
{
//重新开始
tex.Play();
}

if(GUI.Button(new Rect(120,20,80,40),"录像"))
{
//录像
StartCoroutine(SeriousPhotoes());
}

if(GUI.Button(new Rect(10,170,100,40),"停止"))
{
//停止捕获镜头
tex.Stop ();
StopAllCoroutines();
}

if(tex!=null)
{
// 捕获截图大小 —距X左屏距离 | 距Y上屏距离
GUI.DrawTexture(new Rect(Screen.width/2-150,Screen.height/2-190,280,200),tex);
}

}

/// <summary>
/// 捕获窗口位置
/// </summary>
public IEnumerator start()
{
yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);
if (Application.HasUserAuthorization(UserAuthorization.WebCam))
{
WebCamDevice[] devices = WebCamTexture.devices;
deviceName= devices[0].name;
tex=new WebCamTexture(deviceName,300,300,12);
tex.Play();
}
}

/// <summary>
/// 获取截图
/// </summary>
/// <returns>The texture.</returns>
public IEnumerator getTexture()
{
yield return new WaitForEndOfFrame();
Texture2D t=new Texture2D(400,300);
t.ReadPixels( new Rect(Screen.width/2-200,Screen.height/2-50,360,300),0,0,false);
//距X左的距离 距Y屏上的距离
// t.ReadPixels(new Rect(220, 180, 200, 180), 0, 0, false);
t.Apply();
byte[] byt=t.EncodeToPNG();
File.WriteAllBytes(Application.dataPath+"/Photoes/"+Time.time+".jpg",byt);
tex.Play();
}

/// <summary>
/// 连续捕获照片
/// </summary>
/// <returns>The photoes.</returns>
public IEnumerator SeriousPhotoes()
{
while (true)
{
yield return new WaitForEndOfFrame();
Texture2D t = new Texture2D(400, 300, TextureFormat.RGB24, true);
t.ReadPixels(new Rect(Screen.width/2-180,Screen.height/2-50,360,300), 0, 0, false);
t.Apply();
print(t);
byte[] byt = t.EncodeToPNG();
File.WriteAllBytes(Application.dataPath + "/MulPhotoes/" + Time.time.ToString().Split(‘.‘)[0] + "_" + Time.time.ToString().Split(‘.‘)[1] + ".png", byt);
Thread.Sleep(300);
}
}
}

将此脚本绑定到MainCamer上,运行效果如下:

其余也没什么了,哦,对了,记得建个空文件夹用于储存捕获到的照片。

希望我们能够共同学习!

时间: 2024-10-13 19:00:36

Unity 3D 调用摄像头捕获照片 录像的相关文章

win8 metro 调用摄像头拍摄照片并将照片保存在相应的位置

刚刚做过这类开发,所以就先献丑了,当然所贴上的源码都是经过验证过的,已经运行成功了,希望可以给大家一些借鉴: 下面是metro UI代码: <Page x:Class="Camera.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

win8 metro 调用摄像头拍摄照片并将照片保存在对应的位置

刚刚做过这类开发,所以就先献丑了,当然所贴上的源代码都是经过验证过的,已经执行成功了,希望能够给大家一些借鉴: 以下是metro UI代码: <Page x:Class="Camera.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

win8 metro 调用摄像头录制视频并将视频保存在相应的位置

上一篇文章介绍了在win8 metro 调用摄像头拍摄照片并将照片保存在相应的位置的功能,那么这一片文章主要介绍了的就是录制视频了,其实这个差不多,所用的思想也是一样的,因为图片和视频都可以转化为流文件,那么它们本质上都是一样的,但是还是有个别地方时不同的,接下来我们就介绍一下这个别地方的不同吧 下面是metro UI的代码: <Page x:Class="Camera1.MainPage" xmlns="http://schemas.microsoft.com/win

Unity 3d C#和Javascript脚本互相调用 解决方案(非原创、整理资料,并经过实践得来)

Unity 3d C#和Javascript脚本互相调用 解决方案 1.背景知识 脚本的编译过程分四步: 1. 编译所有 "Standard Assets", "Pro Standard Assets" or "Plugins" 目录下的代码 2. 编译所有"Standard Assets/Editor", "Pro Standard Assets/Editor" or "Plugins/Edit

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

1.需求描述 最近要做一个功能就是调用摄像头拍照,然后上传照片的功能,或者直接打开图库选择照片然后上传. 2.准备 ①.添加插件$cordovaCamera cordova plugin add cordova-plugin-camera ②.在controller中添加依赖 3.代码实现 $scope.takePhoto=function(){     var options = {                                                        

Android调用手机摄像头使用MediaRecorder录像并播放

最近在项目开发中需要调用系统的摄像头录像并播放. 在开发中遇到了两个问题,记录下: (1)开发过程中出现摄像头占用,启动失败,报错.但是我已经在onDestory()中关闭了资源. 报错原因:打开程序,调用摄像头,按Home键再打开程序调用,报错摄像头被占用. 解决:在onStop()中关闭资源,在onResume()中判断是否为null,否则实例化资源. (2)其中我录像播放的代码写在Fragment+ViewPager中,在来回切换Fragment的时候,摄像头只能调用一次,并且所在的Fra

Unity 3D 使用TerrainCompose 调用RTP 报错:

Unity 3D:5.2 version TerrainCompose:1.92 version RTP:3.2d version Unity 3D  使用TerrainCompose 调用RTP 报错: Can't access alphamapTexture directly...UnityEngine.Debug:LogError(Object)ReliefTerrain:GetControlMaps() (at Assets/ReliefPack/Scripts/ReliefTerrai

HTML5——利用navigator+Video调用摄像头进行录像

以前无聊的时候玩儿过HTML5,感觉里面的很多新标签确实深深震撼了我额.... 今天需求那边要做这样一个功能,在微信里面调用摄像头进行拍摄,然后上传.刚开始最先想到的是Video标签,只要将它的src指定为当前摄像头录制到的视频就可以了. 后来百度了一段,发现还要用上Navigator,具体代码如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <t

Android使用Intent调用摄像头并获取照片

使用Android的Intent调用另外一个activity的时候,采用的是多线程机制,异步方式.startActivityForResult之后被调用activity并没有马上返回结果给调用activity,Android的Acitivity对象中startActivityForResult的源代码中有相关的解释. /** * Launch an activity for which you would like a result?????? when it finished.?????? *