unity 在Texture2D上切图(Texture2D为全屏)

	/// <summary>
    /// 切图
    /// </summary>
    /// <param name="targetTure">全屏截图</param>
    /// <param name="targetRec">中心锚点</param>
    /// <returns></returns>
    public static Texture2D CutTexture(Texture2D targetTure, RectTransform targetRec)
    {
    
    
        Canvas canvas = null;  //获取一下画布

        Vector2 screenVec = RectTransformUtility.WorldToScreenPoint(Camera.main, targetRec.transform.position);
        float widthSize = targetRec.rect.size.x / canvas.GetComponent<RectTransform>().rect.size.x * Screen.width;
        float heighSize = targetRec.rect.size.y / canvas.GetComponent<RectTransform>().rect.size.y * Screen.height;

        Texture2D m_resultTure = new Texture2D((int)widthSize, (int)heighSize, TextureFormat.RGB24, false);
        int targetVecX = (int)(screenVec.x - widthSize / 2);
        int targetVecY = (int)(screenVec.y - heighSize / 2);
        if (targetVecY + (int)heighSize > Screen.height)
        {
    
    
            targetVecY = Screen.height - (int)heighSize;
        }
        Color[] m_Colors = targetTure.GetPixels(targetVecX, targetVecY, (int)widthSize, (int)heighSize);
        m_resultTure.SetPixels(m_Colors);
        m_resultTure.Apply();
        targetTure = null;

        var bytes = m_resultTure.EncodeToPNG();

        var filePath = string.Concat("MyFilePath", ".png");

        FileOperation.SaveFileByBytes(filePath, bytes, true, true);

        return m_resultTure;
    }

猜你喜欢

转载自blog.csdn.net/weixin_47819574/article/details/129438430
今日推荐