您的位置:首页 > 移动开发 > Unity3D

Unity如何调用安卓手机摄像头实现拍照和录像

2018-01-17 16:27 741 查看
1,要想调用摄像头首先要打开摄像头驱动,如果用户允许则可以使用。
2,定义WebCamTexture的变量用于捕获单张照片。
3,连续捕获须启用线程。
脚本绑定到MainCamer
实现代码如下:

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);  
        }  
    }  
}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: