截屏

相关API的使用测试

1) 测试Camera.Render()是裁剪还是缩放

复制代码
using UnityEngine;
using UnityEngine.UI;

public class CaptureCameraTest : MonoBehaviour
{
    private RenderTexture m_TempRT;

    void Start()
    {
        m_TempRT = RenderTexture.GetTemporary(900, 800, 24);
        Camera.main.targetTexture = m_TempRT;
        Camera.main.Render(); //不是相机的整个画面绘制到RT上, 只有RT宽x高那么大的区域绘制在RT上
        Camera.main.targetTexture = null;

        var rawImg = GetComponent<RawImage>();
        rawImg.texture = m_TempRT;
        rawImg.SetNativeSize();

    }

    void OnDestroy()
    {
        if (null != m_TempRT)
        {
            RenderTexture.ReleaseTemporary(m_TempRT);
        }
    }

}
复制代码

 

 

 2) 测试Graphics.Blit是裁剪还是缩放

复制代码
using UnityEngine;
using UnityEngine.UI;

public class CaptureCameraTest : MonoBehaviour
{
    private RenderTexture m_TempRT;

    void Start()
    {
        m_TempRT = RenderTexture.GetTemporary(1280, 800, 24);
        Camera.main.targetTexture = m_TempRT;
        Camera.main.Render(); //不是相机的整个画面绘制到RT上, 只有RT宽x高那么大的区域绘制在RT上
        Camera.main.targetTexture = null;

        var rt2 = RenderTexture.GetTemporary(600, 800, 24);
        Graphics.Blit(m_TempRT, rt2); //1280的画面填充在600宽的贴图上, 会被压扁
        RenderTexture.ReleaseTemporary(m_TempRT);
        m_TempRT = rt2;

        var rawImg = GetComponent<RawImage>();
        rawImg.texture = m_TempRT;
        rawImg.SetNativeSize();
    }

    void OnDestroy()
    {
        if (null != m_TempRT)
        {
            RenderTexture.ReleaseTemporary(m_TempRT);
        }
    }

}
复制代码

 

 

 截屏

复制代码
using UnityEngine;
using UnityEngine.UI;

public class CaptureCameraTest : MonoBehaviour
{

    void Start()
    {
        var rawImg = GetComponent<RawImage>();
        rawImg.texture = CaptureCamera(Camera.main, new Rect(0, 0, 1050, 800));
        rawImg.SetNativeSize();
    }

    public static Texture2D CaptureCamera(Camera srcCamera, Rect captureRect)
    {
        var tempCameraOutputRT = RenderTexture.GetTemporary(srcCamera.pixelWidth, srcCamera.pixelHeight, 24);

        var oldTargetTex = srcCamera.targetTexture;
        srcCamera.targetTexture = tempCameraOutputRT;
        srcCamera.Render();
        srcCamera.targetTexture = oldTargetTex;

        var oldActiveRT = RenderTexture.active;
        Graphics.SetRenderTarget(tempCameraOutputRT);

        var resultTex = new Texture2D((int)captureRect.width, (int)captureRect.height);
        resultTex.ReadPixels(captureRect, 0, 0); //读取RT上要裁剪的区域, 写到Texture2D的(0, 0)处
        resultTex.Apply();

        Graphics.SetRenderTarget(oldActiveRT);

        RenderTexture.ReleaseTemporary(tempCameraOutputRT);
        return resultTex;
    }

}
复制代码

可以看到是从相机的左下角开始截的

 

 

posted @   yanghui01  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2022-03-26 二叉查找树
点击右上角即可分享
微信分享提示