对相机所看的视角截屏保存为图片

对相机所看的视角截屏保存为图片:ide

 1 using UnityEngine;  2 using System.Collections;  3 using UnityEngine.UI;  4 /// <summary>
 5 /// 对相机截图  6 /// </summary>
 7 public class Jietu : MonoBehaviour {  8 
 9     public Camera camera; 10  Texture2D tex; 11     void Start() 12  { 13             tex= CaptureCamera(camera,new Rect(0,0,Screen.width,Screen.height)); 14             GameObject.Find("Canvas/Image").GetComponent<Image>().sprite=Sprite.Create(tex, new Rect(0, 0,tex.width,tex.height), new Vector2(0.5f, 0.5f)); 15  } 16  Texture2D CaptureCamera(Camera cam,Rect rect) 17  { 18         //建立一个RenderTexture对象
19         RenderTexture rt=new RenderTexture ((int)rect.width,(int)rect.height,0); 20         //临时设置相关相机的targetTexture为rt,并手动渲染相关相机
21         cam.targetTexture=rt; 22  cam.Render(); 23         //ps: --- 若是这样加上第二个相机,能够实现只截图某几个指定的相机一块儿看到的图像。 24         //ps: camera2.targetTexture = rt; 25         //ps: camera2.Render(); 26         //ps: ------------------------------------------------------------------- 27 
28         // 激活这个rt, 并从中中读取像素。 
29         RenderTexture.active = rt; 30         Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24,false); 31         screenShot.ReadPixels(rect, 0, 0);// 注:这个时候,它是从RenderTexture.active中读取像素 
32  screenShot.Apply(); 33 
34         // 重置相关参数,以使用camera继续在屏幕上显示 
35         camera.targetTexture = null; 36         //ps: camera2.targetTexture = null; 
37         RenderTexture.active = null; // JC: added to avoid errors 
38  GameObject.Destroy(rt); 39         // 最后将这些纹理数据,成一个png图片文件 
40         byte[] bytes = screenShot.EncodeToPNG(); 41         string filename = Application.dataPath + "/Screenshot.png"; 42  System.IO.File.WriteAllBytes(filename, bytes); 43         Debug.Log(string.Format("截了一张照片: {0}", filename)); 44         return screenShot; 45  } 46 }
View Code

转载一下,以备后用。spa

相关文章
相关标签/搜索