闲话少说,上代码,google上搜来的代码,不过里面有bug,不能顺利切换,下面的代码是已经修改过的,经测试,可以正常运行。
using System; using UnityEngine; using System.IO; using System.Collections; public class NewBehaviourScript : MonoBehaviour { //public GUITexture mytext; public UITexture mytext; private WebCamTexture frontWebcamTexture = null; private WebCamTexture rearWebcamTexture = null; private WebCamDevice[] devices; [HideInInspector] public WebCamTexture activeCam; bool flag = false ; static int cameraIndex = 0 ; /* 按钮控件 */ public GameObject btn_shot ; public GameObject btn_change_camera ; void Awake () { for( int i = 0 ; i < WebCamTexture.devices.Length ; i++ ) NGUIDebug.Log(WebCamTexture.devices[i].name); devices = WebCamTexture.devices; string frontCamName = ""; string rearCamName = ""; for(int i=0; i<devices.Length; i++) { if (devices[i].isFrontFacing) frontCamName = devices[i].name; else rearCamName = devices[i].name; } frontWebcamTexture = new WebCamTexture(frontCamName); rearWebcamTexture = new WebCamTexture(rearCamName); frontWebcamTexture.Stop(); rearWebcamTexture.Stop(); activeCam = rearWebcamTexture; //mytext.material.mainTexture = rearWebcamTexture ; mytext.material.SetTexture("_MainTex", rearWebcamTexture); activeCam.Play(); } void Start() { /* 事件 */ UIEventListener.Get(btn_shot).onClick += OnShotButtonClick ; UIEventListener.Get(btn_change_camera).onClick += OnCameraChangeClick ; NGUIDebug.Log ("Active camera: " + activeCam); } public bool HasFrontCamera() { if (Application.isEditor) return false; return frontWebcamTexture.deviceName != ""; } public void OnShotButtonClick (GameObject go) { SavePhoto() ; } /* 相机切换 */ public void OnCameraChangeClick (GameObject go) { if (!HasFrontCamera()) return; activeCam.Stop (); if (activeCam == frontWebcamTexture) { NGUIDebug.Log ("Switching to rear cam..."); //renderer.material.mainTexture = rearWebcamTexture; //mytext.material.mainTexture = rearWebcamTexture ; mytext.material.SetTexture("_MainTex", rearWebcamTexture); activeCam = rearWebcamTexture; } else { NGUIDebug.Log ("Switching to front cam..."); //mytext.material.mainTexture = frontWebcamTexture ; mytext.material.SetTexture("_MainTex", frontWebcamTexture); activeCam = frontWebcamTexture; } NGUIDebug.Log ("... done."); NGUIDebug.Log("Trying to Play the active WebCamTexture: (" + activeCam + ")"); activeCam.Play(); } public void ShowCamera() { //myCameraTexture.guiTexture.enabled = true; mytext.enabled = true; activeCam.Play(); NGUIDebug.Log("-------------show--------->>>>>" + mytext) ; } public void HideCamera() { NGUIDebug.Log("-------------hide--------->>>>>" + mytext) ; //myCameraTexture.guiTexture.enabled = false; mytext.enabled = false; activeCam.Stop(); }
public void SavePhoto() { NGUIDebug.Log("***************oh fuck***********************finally worked!!!") ; Texture tex = mytext.material.mainTexture; Texture2D tx = new Texture2D(activeCam.width, activeCam.height) ; tx.SetPixels(activeCam.GetPixels()); byte[] byte_photo = tx.EncodeToPNG() ; NGUIDebug.Log("#####length######################333333" + byte_photo.Length) ; string photoName = "nimei.png" ; FileStream fs = new System.IO.FileStream("/mnt/sdcard/DCIM/Camera/nimei.png", System.IO.FileMode.Create); fs.Write(byte_photo,0,byte_photo.Length); fs.Close(); } }