[置顶] Unity摄像头截图功能演示
2018-03-19 18:11
393 查看
using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.UI; public class WebCamera : MonoBehaviour { [Tooltip("返回的照片数据,根据返回的照片,进行照片的识别和比对认证等等!"), Space(5)] [Header("摄像头拍摄的照片"),] public WebCamTexture camTexture;//摄像头拍下的图片数据 [Header("摄像头设备名")] private WebCamDevice[] devices; [Tooltip("USB摄像头设备"), Space(5)] [Header("摄像头设备名")] public string deviceName;//摄像头设备名称 public static Texture2D tex2D; public bool isClick;//是否点击了按钮 public static float ScreenShotTexture2D = 0f;//截取到图片编号(名称) public Text DebugScreenShotText;//用于输出打印截图的名称(为了效验) //初始化摄像头显示的图像的大小 private void Start() { isClick = false; camTexture = new WebCamTexture(deviceName, 800, 600, 60); } //通过GUI绘制摄像头要显示的窗口 private void OnGUI() { //首先根据摄像头展示的画面来判断摄像头是否存在 if(isClick == true&&camTexture != null) { //绘制画面(Screen.width / 2 - 150f, Screen.height / 2 - 290,这里是画面距离场景的高和宽的限制) //800, 600是和camTexture的画面一样大的绘制窗口 GUI.DrawTexture(new Rect(Screen.width / 2 - 150f, Screen.height / 2 - 290, 800, 600), camTexture); } if(isClick == false && camTexture != null)//不显示画面(没写这个步骤之前有个坑) { GUI.DrawTexture(new Rect(Screen.width / 2 - 150f, Screen.height / 2 - 290, 0, 0), camTexture); } } //打开摄像机的方法 public void OpenWebCamDevice() { isClick = true; if(isClick == true) { //用户授权打开摄像头 if (Application.HasUserAuthorization(UserAuthorization.WebCam)) { devices = WebCamTexture.devices;//显示画面的设备就是要打开的摄像头 deviceName = devices[0].name;//获取到设备名称 camTexture.Play();//开启摄像头 } } } //关闭摄像头 public void CloseWebCamDevice() { if(isClick== true && camTexture != null) { isClick = false; } } //截图按钮事件 public void OnClickBtnScreenShotTex2D() { OpenWebCamDevice();//先打开摄像头 Invoke("StartScreenShot", 3f);//几秒后截图 } void StartScreenShot() { camTexture.Pause();//截图暂停一下 StartCoroutine("ScreenShot");//启动协程截图 } IEnumerator ScreenShot() { yield return new WaitForEndOfFrame();//等某一帧结束 tex2D = new Texture2D(800, 600, TextureFormat.RGB24, true);//截图的大小 tex2D.ReadPixels(new Rect(Screen.width / 2 - 150, Screen.height / 2 - 290, 800, 600), 0, 0, false);//截取的区域 tex2D.Apply(); byte[] by = tex2D.EncodeToJPG();//将截取到的图片转换成字节数据 camTexture.Play();//摄像头继续开启 ScreenShotTexture2D = Time.time; File.WriteAllBytes(Application.dataPath + "/ScreenShot/" + ScreenShotTexture2D + ".jpg", by); DebugScreenShotText.text = ScreenShotTexture2D.ToString(); Debug.Log("当前截取到图片名称为:" + ScreenShotTexture2D); } }
相关文章推荐
- Unity 2D游戏开发教程之摄像头追踪功能
- Windows 8 Metro应用中使用调摄像头截图、截视频的功能
- [置顶] Unity基于NGUI实现拖拽功能
- [置顶] Unity发送邮件功能
- [置顶] 如何用FFmpeg API采集摄像头视频和麦克风音频,并实现录制文件的功能
- java实现摄像头截图功能
- Unity 2D游戏开发教程之摄像头追踪功能
- Unity 2D游戏开发教程之摄像头追踪功能
- [置顶] Unity中集成ShareSDK(3.X)的功能-IOS平台
- opencv_摄像头学习,带截图功能
- Unity通过plane加摄像头实现视频播放功能
- [置顶] Unity中集成ShareSDK(3.X)的功能-Android平台
- unity做类似QQ截图功能
- [置顶] Unity调用USB摄像头开启与关闭
- 在unity中实现截图功能
- 在unity中实现截图功能
- [置顶] unity调用外部摄像头
- Unity 像子弹一样的方块+计数功能
- [置顶] android 7.0中Settings新功能全面解析
- 3D游戏实时显示帧率,截图(bmp,jpg,png),录象(wmv,avi)等功能的软件