Unity3D 截图功能(屏幕区域截图,两张图片的合成)

Unity3D 截图功能(1屏幕区域截图,2两张图片的合成)

先看效果 1.

看图 我想把图片 区域 的位置截图出来,

效果 2

看图,他二维码图片 放在 Texture2D 目标区域

现在我们来实行相关功能!

效果1:

       /// <summary>
        /// 传入一个 RectTransform 区域!, 就不把资格区域的图像保存下来
        /// </summary>
        /// <param name="rect"></param>
        public void OnShowTexture(RectTransform rect)
        {
 
            ///要现实的位置 RrctTransform, 转化到屏幕坐标。
            Vector3 vect                 = RectTransformUtility.WorldToScreenPoint(Camera.main, rect.gameObject.transform.position);
            Canvas canvas                = GameObject.Find("Canvas").GetComponent<Canvas>();
            CanvasScaler    canvasScaler = canvas.GetComponent<CanvasScaler>();
 
            float radio                  = Screen.width / canvasScaler.referenceResolution.x;//适配
            float x = vect.x - rect.sizeDelta.x * rect.pivot.x * radio;
            float y = vect.y - rect.sizeDelta.y * rect.pivot.x * radio;
 
  
            targetRect      = new Rect(x, y, rect.sizeDelta.x * radio, rect.sizeDelta.y * radio);
 
 
 
            Debug.Log(string.Format("x:{0}, y:{1}, width:{2}, height:{3}", targetRect.x, targetRect.y, targetRect.width, targetRect.height));
 
            StartCoroutine(UploadPNG());
 
        }
 
        IEnumerator UploadPNG()
        {
 
            yield return new WaitForEndOfFrame();
            Texture2D tex = new Texture2D((int)targetRect.width, (int)targetRect.height, TextureFormat.RGB24, false);
 
            tex.ReadPixels(new Rect((int)targetRect.x, (int)targetRect.y, (int)targetRect.width, (int)targetRect.height), 0, 0);
            tex.Apply();
     
            string path = Application.persistentDataPath + "/onMobileSavedScreen.png";
            Debug.Log(path);
            File.WriteAllBytes(path, tex.EncodeToPNG());
 
        }
 

效果2:

        /// <summary>
        /// 传入两张Texture2D 图片
        /// </summary>
        /// <param name="source"></param>
        /// <param name="target"></param>
        /// <returns></returns>
        public Texture2D TwoToOne(Texture2D source, Texture2D target)
        {
            ///显示位置
            int startWidth  = source.width  / 2  - target.width / 2;
            int startHeight = 35;
 
 
            source.SetPixels32(startWidth, startHeight, target.width,target.height, target.GetPixels32());
 
            source.Apply();
            string path = Application.persistentDataPath + "/1111.png";
            Debug.Log(path);
            File.WriteAllBytes(path, source.EncodeToPNG());
 
            return source;
        }
以上两种方法, 都可以满足 目前看两种效率 相差不多。应为底层实现差不多!

 

这是两张保存的图片


--------------------- 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现批量下载图片功能的步骤如下: 1. 创建一个空的GameObject,并将以下脚本组件添加到它上面: ```csharp using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ImageDownloader : MonoBehaviour { public string[] imageUrls; // 存储图片链接的数组 public Image image; // 显示图片的UI组件 private int currentIndex = 0; // 当前图片的索引 // 点击事件处理函数 public void OnNextButtonClick() { StartCoroutine(DownloadImage(imageUrls[currentIndex])); currentIndex = (currentIndex + 1) % imageUrls.Length; // 循环遍历图片链接数组 } // 下载图片的协程函数 private IEnumerator DownloadImage(string url) { WWW www = new WWW(url); yield return www; if (www.error == null) { Texture2D texture = www.texture; Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero); image.sprite = sprite; } else { Debug.LogError("下载图片失败:" + www.error); } } } ``` 2. 在场景中添加一个Image UI组件,并将其挂载到刚才创建的GameObject上。 3. 在Unity编辑器中将需要下载的图片链接添加到ImageDownloader组件的imageUrls数组中。 4. 在场景中添加一个Button UI组件,并将它的OnClick事件绑定到ImageDownloader组件的OnNextButtonClick函数上。 5. 运行程序,点击按钮即可开始下载图片。每次点击按钮都会下载下一张图片并显示在Image UI组件中。 注意:上述代码仅供参考,具体实现方式可能会因项目需求而异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值