Unity 截图方法

  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

时间: 2024-08-11 10:13:48

Unity 截图方法的相关文章

unity延时方法Invoke和InvokeRepeating

MonoBehaviour里面有两个内置的延时方法 Invoke Invoke(methodName: string, time: float): void; methodName:方法名 time:多少秒后执行 InvokeRepeating InvokeRepeating(methodName: string, time: float, repeatRate: float): void; methodName:方法名 time:多少秒后执行 repeatRate:重复执行间隔 还有两个重要的

Unity3d之截图方法

http://blog.csdn.net/highning0007/article/details/37991787 Unity3d之截图方法 分类: Unity3D2013-11-28 17:13 1014人阅读 评论(2) 收藏 举报 AnYuanLzhunityunity3d截屏 下面是我总结的.在u3d中的,三种截屏方法: 1.使用Application类下的CaptureScreenshot方法. [csharp] view plaincopy void CaptureScreen()

C#开发Unity游戏教程之Unity中方法的参数

C#开发Unity游戏教程之Unity中方法的参数 Unity的方法的参数 出现在脚本中的方法,无论是在定义的时候,还是使用的时候,后面都跟着一对括号“( )”,有意义吗?看起来最多也就是起个快速识别方法的作用吧.既然C#的语法规定方法就应该这么写,肯定是有一定道理的.如果是上升到战略意义的道理,连作者也不是很明白,但是作者知道这对括号里可以添加“参数”. Unity中参数的作用 要说明参数的作用,就必须从方法说起.方法可以处理变量中的数据,进而影响游戏对象的行为逻辑,这是本章前面一直在强调的.

Unity截图的三种方式

1.最常见的一种方式 IEnumerator CaputreScreen() { yield return new WaitForEndOfFrame(); texture.ReadPixels(new Rect(0, 0, width, height), 0, 0); texture.Apply(); } 该方法可以截取一个矩形框内的图像,缺点是需要等待一帧结束才可以读取到图像数据 2.Unity自带截图 Application.CaptureScreenshot("Screenshot.pn

mac OS 截图方法

在苹果系统下面截图是不是要安装什么截图软件啊?当然不需要,系统自带的快速截图功能已经很强大了,比Windows弱弱的截图强多了. 具体说,有两种方式截图,快捷键如下: 1.Command+shift+3:全屏截图,这个就是整个屏幕啦 2.Command+shift+4:鼠标选定区域截图,这个比Windows的当前窗口截图强大吧. 更高级的技巧,使用方法2截图,还有两个小技巧 第一个: 使用Command+shift+4后,按下空格键,对一个窗口点击一下鼠标左键,就是对这个窗口进行了截图,相当于W

(转)Unity3d的3种截图方法

下面是我总结的.在u3d中的,三种截屏方法: 1.使用Application类下的CaptureScreenshot方法. void CaptureScreen() { Application.CaptureScreenshot("Screenshot.png", 0); } 这个方法,截取的是某一帧时整个游戏的画面,或者说是全屏截图吧. a.不能针对某一个相机(camera)的画面,进行截图. b.对局部画面截图,实现起来不方便,效率也低,不建议在项目中使用: 虽然CaptureSc

[新手向]Android修图工具Draw 9-patch使用小结(附ubuntu快捷截图方法)

今天做项目,素材图遇到点问题,然后老大给我讲了讲android下面图片格式.9.png和draw 9-patch的用法,感觉很清楚也很有用,所以记录一下. 关于 9-patch的介绍我就不说了,网上一大堆.下面根据我做android项目的经历一点点来认识它的作用. 首先,先看看项目资源列表: 好了,这个文件夹放着我的项目资源. 那么你发现没有,这里面的图片有一个规律:凡是后缀为.9.png的图片都有黑边,而.png的图片就很正常. 用图片浏览器打开再看看: 这是正常图片(放大了好多) 这是9.p

WebDriver中实现对特定的Web区域截图方法--Python实现

一.在自动化测试中,遇到验证码的处理方法有以下两种: 1.找开发去掉验证码或者使用万能验证码 2.使用OCR自动识别 这里,方法一只要和研发沟通就行. 使用pytesseract自动化识别,一般识别率不是太高,处理一般简单验证码还是没问题,例如下面这种验证码: 使用非常简单,只需下面几步: import pytesseract from PIL import Image image=Image.open('new.jpg') vcode=pytesseract.image_to_string(i

Android截屏截图方法汇总(Activity、View、ScrollView、ListView、RecycleView、WebView截屏截图)

Android截屏 Android截屏的原理:获取具体需要截屏的区域的Bitmap,然后绘制在画布上,保存为图片后进行分享或者其它用途 一.Activity截屏 1.截Activity界面(包含空白的状态栏) /** * 根据指定的Activity截图(带空白的状态栏) * * @param context 要截图的Activity * @return Bitmap */ public static Bitmap shotActivity(Activity context) { View vie