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));

 

相关文章:

  • 2021-12-29
  • 2021-08-02
  • 2021-12-17
  • 2021-11-16
  • 2021-07-19
  • 2022-12-23
  • 2021-08-27
猜你喜欢
  • 2021-09-01
  • 2021-11-29
  • 2022-12-23
  • 2022-02-16
  • 2022-02-14
  • 2021-10-15
  • 2021-12-09
相关资源
相似解决方案