美文网首页
Unity 指定区域截屏2020-06-13

Unity 指定区域截屏2020-06-13

作者: Camming | 来源:发表于2020-06-13 16:07 被阅读0次
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.Windows;
    
    /**
     *
     * Unity指定区域截图
     * Create by Camming 2020/06/13
     * 
     */
    public class Screen : MonoBehaviour
    {
    
        public Transform test;
        // Start is called before the first frame update
        void Start()
        {
            string fileName =Application.persistentDataPath+"/tfw"+"/userPic.png";
            if (!Directory.Exists(Application.persistentDataPath+"/tfw"))
            {
                Debug.LogError("Start 目录不存在 创建");
                Directory.CreateDirectory(Application.persistentDataPath+"/tfw");
            }
          
      
           IEnumerator screenCapture = CaptureByUI(test.GetComponent<RectTransform>(), fileName);
           StartCoroutine(screenCapture);
               
        }
    
        // Update is called once per frame
        void Update()
        {
            
        }
        
        /// <summary>
        /// 1、获取纹理
        /// 2、计算开始坐标和长宽
        /// 3、读取像素
        /// 4、应用读取
        /// 5、将纹理转为图片byte数组
        /// 6、将图片byte数据内容写入到新创建的文件中
        /// </summary>
        /// <param name="UIRect"></param>
        /// <param name="mFileName"></param>
        /// <returns></returns>
        
        public IEnumerator CaptureByUI(RectTransform UIRect, string mFileName)
        {
            //等待帧画面渲染结束
            yield return new WaitForEndOfFrame();
     
            int width = (int)(UIRect.rect.width );
            int height = (int)(UIRect.rect.height);
     
            Texture2D screenTure = new Texture2D(width, height, TextureFormat.RGB24, false);
     
            //左下角为原点(0, 0)
            float leftBtmX = UIRect.transform.position.x + UIRect.rect.xMin ;
            float leftBtmY = UIRect.transform.position.y + UIRect.rect.yMin ;
     
            //从屏幕读取像素, leftBtmX/leftBtnY 是读取的初始位置,width、height是读取像素的宽度和高度
            screenTure.ReadPixels(new Rect(leftBtmX, leftBtmY, width, height), 0, 0);
            //执行读取操作
            screenTure.Apply();
            byte[] bytes = screenTure.EncodeToPNG();
            
            if (Directory.Exists(mFileName))
            {
                Debug.LogError("将旧的图片删除");
                Directory.Delete(mFileName);
            }
            //保存
            System.IO.File.WriteAllBytes(mFileName, bytes);
        }
    
    }
    

    相关文章

      网友评论

          本文标题:Unity 指定区域截屏2020-06-13

          本文链接:https://www.haomeiwen.com/subject/tmxztktx.html