Unity生成屏幕快照

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

 

转载于:https://www.cnblogs.com/luguoshuai/p/8677707.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值