unity 利用相机截图,可以截取UI,保存png格式,可用于签名抠图

 public Camera cam;
    void Start()
    {
        StartCoroutine(CaptureAlphaCamera(cam,new Rect(0,0,1920,1080)));
    }

    #region 截取透明图
    /// <summary>
    /// 3.对相机截图。 
    /// </summary>
    IEnumerator CaptureAlphaCamera(Camera camera,Rect rect) {
        yield return new WaitForEndOfFrame();

        // 创建一个RenderTexture对象
        RenderTexture rt = new RenderTexture((int)Screen.width,(int)Screen.height,0);
        // 临时设置相关相机的targetTexture为rt, 并手动渲染相关相机
        camera.targetTexture = rt;
        camera.Render();

        RenderTexture.active = rt;
        Texture2D screenShot = new Texture2D((int)rect.width,(int)rect.height,TextureFormat.ARGB32,false);
        screenShot.ReadPixels(rect,0,0);
        screenShot.Apply();

        // 重置相关参数,以使用camera继续在屏幕上显示
        camera.targetTexture = null;
        RenderTexture.active = null; // JC: added to avoid errors
        GameObject.Destroy(rt);

        // 最后将这些纹理数据,成一个png图片文件
        byte[] bytes = screenShot.EncodeToPNG();
        string filename = Application.dataPath + "/Screenshot.png";
        System.IO.File.WriteAllBytes(filename,bytes);
        Debug.Log(string.Format("截屏了一张照片: {0}",filename));

        //及时垃圾清理
        System.GC.Collect();
        //return screenShot;
    }

 

 

 

 

 

 

posted on 2023-01-11 13:21  zqiang0803  阅读(785)  评论(0编辑  收藏  举报

导航