首页 > 其他分享 >截屏

截屏

时间:2023-03-26 22:58:07浏览次数:42  
标签:Camera RenderTexture TempRT rawImg 截屏 targetTexture var

相关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;
    }

}

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

 

 

标签:Camera,RenderTexture,TempRT,rawImg,截屏,targetTexture,var
From: https://www.cnblogs.com/sailJs/p/16473285.html

相关文章

  • 【Unity3D】场景切换、全屏_恢复切换、退出游戏、截屏
    1前言​1)场景切换​场景切换可以使用SceneManager的LoadScene和LoadSceneAsync方法,如下:publicstaticvoidLoadScene(stringsceneName)publicstatic......
  • AutoxJS在模拟器截屏后取色为黑色的解决办法
    环境:逍遥模拟器Android版本7x解决办法利用Shell执行截屏后读取图片后取色.截图lettempScreenFilePath="/sdcard/";//returnimageobjectfunc......
  • Maya 截屏
    importmaya.cmdsascmdimportmaya.OpenMayaasapiimportmaya.OpenMayaUIasapiUIdefgrabViewport(directory,imageName,ext="jpg"):viewport=ap......
  • cocos2dx-3.16截屏遇坑
    clippingNode用到模板就是这个东西 截屏的内容如果有clippingNode就会背景白屏是个什么感觉。。试一试就知道了。解决方案 RenderTexture::create(visibleSize.width,......
  • 用 Python 脚本实现电脑唤醒后自动拍照 截屏并发邮件通知
    背景背景是这样的,我的家里台式机常年休眠,并配置了WakeOnLan(WOL)方便远程唤醒并使用.但是我发现,偶尔台式机会被其他情况唤醒,这时候我并不知道,结果白白运......
  • Android截屏截图的几种方法总结
    Android截屏Android截屏的原理:获取具体需要截屏的区域的Bitmap,然后绘制在画布上,保存为图片后进行分享或者其它用途一、Activity截屏1、截Activity界面(包含空白的状态栏)/......
  • 谁动了我的电脑,截屏发邮件短信通知到手机!
    谁动了我的电脑?!作为一名网上老司机,电脑里肯定有不少不能给别人看的东西所以有大神开发了一款电脑监控软件:谁动了我的电脑,截屏发邮件短信通知到手机!到设置的时间并按了......
  • 网易有道词典——截屏翻译时候跳转桌面的一种解决办法
    网易有道词典——截屏翻译时候跳转桌面的一种解决办法​​1.原因分析​​​​2.解决办法​​1.原因分析  原因是因为有道词典的窗口此时不在这个桌面范围内。2.解决办法......
  • 页面长截图截屏 Fastone Capture 轻松搞定
    现在的网页基本上一页不能显示所有的内容,可是分享给别人的时候除了转发网址,我们经常使用的就是截图了,现在截图真的是办公必须软件了,整个网页必须要滚动下滑才能看全,那得找个......
  • UOS+KIRIN截屏出错研究
    泰OFFICE有个BUG,说在UOS+KIRIN系统上,截屏卡死。在KYLIN和其他UOS上,则正常。这么怪异的问题,当然很难解决。只能由吾出场,从JDK角度来看看。使用的是Robot进行屏幕。于......