码迷,mamicode.com
首页 > 编程语言 > 详细

Unity 截图方法

时间:2017-12-22 03:42:47      阅读:328      评论:0      收藏:0      [点我收藏+]

标签:body   img   部分   screens   texture2d   格式   本地图片   ges   rgb   

  1. 调用Unity API

    ScreenCapture.CaptureScreenshot("screen.png", 0);

    1. 截图的图片仅能保存为png格式,且第一个形参必须加.png
    2. 第二个参数为设定分辨率,大于1的情况下会增加分辨率,如为4,则是默认分辨率的4倍
    3. 只能保存在Application.persistentDataPath目录下
    4. 函数本身只能截全屏,如果实在要截部分屏幕,可以通过在截图后,当作本地图片读取后,进行修改

    技术分享图片

  2. 使用Texture2D.ReadPixels方法,该方法可以将当前RenderTexture(如没有设置则是Screen)的数据读到某Texture2D中
    1. 代码

    private IEnumerator CaptureScreenshot2(Rect rect)

    {

            Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);

            yield return new WaitForEndOfFrame();

            screenShot.ReadPixels(rect, 0, 0);

            screenShot.Apply();

       

            byte[] bytes = screenShot.EncodeToPNG();

            string filename = Application.dataPath + "/Screenshot.png";

            System.IO.File.WriteAllBytes(filename, bytes);

    }

    1. 这里必须使用Coroutine,并且在当前帧渲染后调用ReadPixels,因为这时候当前RenderTexture中才有图像
    2. Rect的不同控制了截图的范围

      StartCoroutine(CaptureScreenshot2(new Rect(0, 0, Screen.width/2, Screen.height/2)));

      则从左下角截屏幕宽度和高度各一半的图

      技术分享图片

  3. 改良版方法2,方法2中ReadPixels默认读取的是RenderTexture.active当没有手动设置时,该值为屏幕图像,这里我们可以通过设置Rendertexture来只截某个摄像机看到的镜像
    1. 前期准备,新增一个Camera,且该Camera仅渲染UI,为了不遮挡第一个摄像机渲染的物体,这里ClearFlag设置为Don‘t Clear

      技术分享图片

      此时场景中有两个摄像机

      技术分享图片

    2. 代码

      思路为创建一个renderTexture,并通过camera渲染,然后装填该RenderTexture后,通过ReadPixels读取

         

      private void CaptureCamera(Camera camera, Rect rect)

      {

              RenderTexture _renderTex = new RenderTexture((int)rect.width, (int)rect.height, 0);

         

              camera.targetTexture = _renderTex;

              camera.Render();

              camera.targetTexture = null;

         

              RenderTexture.active = _renderTex;

              Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);

              screenShot.ReadPixels(rect, 0, 0);

              screenShot.Apply();

              RenderTexture.active = null;

         

              byte[] bytes = screenShot.EncodeToPNG();

              string filename = Application.dataPath + "/Screenshot.png";

              System.IO.File.WriteAllBytes(filename, bytes);

      }

    3. 调用该函数,并且传递的Camera参数为仅渲染UI的Camera,并且全屏截图,这里为了让结果更明显,我们将UI字体设为了红色,结果如下

      技术分享图片

参考

http://blog.csdn.net/anyuanlzh/article/details/17008909

Unity 截图方法

标签:body   img   部分   screens   texture2d   格式   本地图片   ges   rgb   

原文地址:http://www.cnblogs.com/Tuncle/p/8083117.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!