Unity 3D之調用攝像頭並存儲


寫在前面:

最近項目中需要用到拍照的功能,這個功能說難其實不難,說簡單但是用的人很少。我在網上找了一些資料,加上自己的理解整理一些新的。

如何調用攝像頭?

調用攝像頭這個是一個比較簡單的事,因為Unity已經封裝了一些好的接口,我們直接可以調用就好了:

public class CameraTest : MonoBehaviour {
//攝像頭圖像類,繼承自texture
    WebCamTexture tex;
    public Image WebCam;
    public MeshRenderer ma;
    public Button saveImage;

    void Start () {
//開啟協程,獲取攝像頭圖像數據
        StartCoroutine(OpenCamera());
        saveImage.onClick.AddListener(SaveImage);
    }

    // Update is called once per frame
    void Update()
    {

    }
    IEnumerator OpenCamera()
    {
//等待用戶允許訪問
        yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);
//如果用戶允許訪問,開始獲取圖像        
if (Application.HasUserAuthorization(UserAuthorization.WebCam))
        {
//先獲取設備
            WebCamDevice[] device = WebCamTexture.devices;
            
            string deviceName = device[0].name;
//然后獲取圖像
            tex = new WebCamTexture(deviceName);
//將獲取的圖像賦值
            ma.material.mainTexture = tex;
//開始實施獲取
            tex.Play();
            
        }
    }
}

將這段代碼賦值給一個帶render的物體就能夠顯示攝像機拍攝的效果。

圖片保存

圖片保存這里就有點難度了,我們要獲取到攝像機的圖像那么主要分為兩個方法:

1、截屏。也是大多數人采用的方法。

2、將攝像機的圖像數據保存。本文所用的方法。

截屏方法很多,大家可以去網上找找,我這里引用一個:http://blog.csdn.net/qq_28221881/article/details/53820918。、

截屏這里有一個需要注意的地方,那就是保存獲取函數必須在協程中等待這一幀結束。

 

直接保存攝像機圖片

但我們通常直接使用截圖的話會非常不方便,

首先是我們需要去結算圖片的位置,如果位置不對那截出來的就會很尷尬。除非是全屏。

其次截圖受到燈光等3D場景的影響。

然后是截圖的大小不一定是滿意的。

所以我們就想到直接使用webcamTexture這個類保存攝像機的圖像。

    private void SaveImage()
    {
//在上一段代碼中加入該方法
        CameraTextureSave.Save(tex);

    }
public class CameraTextureSave : MonoBehaviour {

public static void Save(WebCamTexture t)
    {
        Texture2D t2d = new Texture2D(t.width,t.height,TextureFormat.ARGB32,true);
       //將WebCamTexture 的像素保存到texture2D中
        t2d.SetPixels(t.GetPixels());
        //t2d.ReadPixels(new Rect(200,200,200,200),0,0,false);
        t2d.Apply();
//編碼
        byte[] imageTytes = t2d.EncodeToJPG();

        //存儲
        File.WriteAllBytes(Application.streamingAssetsPath + "/my/" + Time.time + ".jpg", imageTytes);
    }
}

出於強迫症的原因,我將保存方法單獨寫在另一個類中方便調用。

這里文件寫入使用很簡單的寫入方法,需要注意的是需要手動創建目錄,不然會報錯。

兩種方法截圖效果對比:

                              本文方法 

             截圖方法

 thissky出品,轉載請注明出處:http://www.cnblogs.com/zhuhongjongy/p/7199308.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM