Unity 异步加载和保存图片避免主线程卡顿
  eQub4A7OlyFD 2023年12月01日 25 0


using System.IO;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Experimental.Rendering;
using UnityEngine.Networking;

namespace Mx.Utils
{
    /// <summary>图像工具类</summary>
    public class ImagesUtil
    {
        /// <summary>加载图片</summary>
        public static async Task<Texture2D> LoadImageAsync(string path)
        {
            using (UnityWebRequest www = UnityWebRequestTexture.GetTexture(path))
            {
                var asyncOperation = www.SendWebRequest();
                while (!asyncOperation.isDone)
                {
                    await Task.Delay(100);
                }

                if (www.result != UnityWebRequest.Result.Success)
                {
                    Debug.LogError("Failed to load image: " + www.error);
                    return null;
                }

                return DownloadHandlerTexture.GetContent(www);
            }
        }

        /// <summary>写入图片</summary>
        public static async Task WriteImageAsync(string filePath, Texture2D texture2D)
        {
            if (texture2D == null) return;

            GraphicsFormat graphicsFormat = GraphicsFormat.R8G8B8A8_UNorm;

            uint width = (uint)texture2D.width;
            uint height = (uint)texture2D.height;

            Color32[] array = texture2D.GetPixels32();

            await Task.Run(() =>
            {
                File.WriteAllBytes(filePath, ImageConversion.EncodeArrayToPNG(array, graphicsFormat, width, height));
            });
        }

    }
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月01日 0

暂无评论

推荐阅读
eQub4A7OlyFD