public static Texture2D CaptureCamera(Camera camera, Rect rect) { RenderTexture rt = new RenderTexture((int)rect.width, (int)rect.height, 0); RenderTexture originRtt = null; Camera currCam = null; foreach (Camera cam in Camera.allCameras) { if (null != cam.targetTexture) continue; currCam = cam; originRtt = currCam.targetTexture; cam.targetTexture = rt; cam.RenderDontRestore(); //手动渲染 cam.targetTexture = originRtt; //注意: 需要该操作,不然会报错 } //激活rt并从中读取像素 RenderTexture.active = rt; Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false); screenShot.ReadPixels(rect, 0, 0); //这个时候是从 RenderTexture.active 中读取数据 screenShot.Apply(); //这是非常消耗性能的操作,操作之前尽量多读取像素 currCam.targetTexture = null; GameObject.Destroy(rt); RenderTexture.active = null; //生成 .png 快照 byte[] bytes = screenShot.EncodeToPNG(); string filename = Application.dataPath + "/Screenshot.png"; System.IO.File.WriteAllBytes(filename, bytes); Debug.Log("生成了一张屏幕快照"); return screenShot; }
调用:
UITexture m_TxBG.mainTexture = CaptureCamera(NGUITools.FindCameraForLayer(this.gameObject.layer), new Rect(0, 0, Screen.width, Screen.height));