Unity三种截图方法

引用出处:
[1]http://blog.csdn.net/highning0007/article/details/37991787 Unity3d之截图方法

    /*
    *方法一,截取某一帧的整个游戏画面
    *a.不能针对某一个相机(camera)的画面,进行截图。
    *b.局部画面截图不方便,效率也低,不建议在项目中使用
    */
    Application.CaptureScreenshot("screenShot.jpg", 0);

    //方法二,全屏截图
    //Rect:截图的区域,左下角为o点
    //截全屏:
    CaptureScreenshot2( new Rect( Screen.width*0f, Screen.height*0f, Screen.width*1f, Screen.height*1f)); 

    //截中间,1/4:
    CaptureScreenshot2( new Rect( Screen.width*0.25f, Screen.height*0.25f, Screen.width*0.5f, Screen.height*0.5f));

    Texture2D CaptureScreenshot2(Rect rect) 
    {
        // 先创建一个的空纹理,大小可根据实现需要来设置
        Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24,false);
        // 读取屏幕像素信息并存储为纹理数据,
        screenShot.ReadPixels(rect, 0, 0false);
        screenShot.Apply();

        // 将这些纹理数据组成一个png/JPG图片文件
        //byte[] bytes = screenShot.EncodeToJPG();
        byte[] bytes = screenShot.EncodeToPNG();

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

        System.IO.File.WriteAllBytes(filename, bytes);
        Debug.Log(string.Format("截屏: " + filename));

        //返回Texture2d对象,可以用直接赋值给Texture2d类型的变量,方便且节省资源      
        return screenShot;
    }

    //方法三:截取某个相机渲染的画面
    Texture2D CaptureCamera()
    {
        //创建一个RenderTexture对象
        RenderTexture texture = new RenderTexture(Screen.width, Screen.height, 0);
        //临时设置相关相机的targetTexture为RenderTexture的对象,并手动渲染相关相机
        renderCamera.targetTexture = texture;
        renderCamera.Render();
        //激活RenderTexture对象,并从中读取像素
        RenderTexture.active = texture;

        screenShot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
        screenShot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
        screenShot.Apply();

        //重置相关参数,以camera能继续在屏幕上显示
        renderCamera.targetTexture = null;
        RenderTexture.active = null;
        Destroy(texture);
        //将这些纹理数据转换为byte
        byte[] bytes = screenShot.EncodeToJPG();

        //将纹理数据组成JPG图片文件
        string fileName = Application.dataPath + "/Screenshot.jpg";
        return screenShot; 
     }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值