异步加载图片,保存本地缓存

异步加载图片,保存缓存至本地。

单例模式

using UnityEngine;
using System.Collections;
using System.IO;
public class AsyncImageDownload :MonoBehaviour 
{	
	public  Texture placeholder;	
	public static AsyncImageDownload  Instance=null;	
	private string path=Application.persistentDataPath+"/ImageCache/" ;	
	//构建单例	
	public static AsyncImageDownload CreateSingleton()	
	{		
		if (!Directory.Exists(Application.persistentDataPath+"/ImageCache/")) 
		{			
			Directory.CreateDirectory(Application.persistentDataPath+"/ImageCache/");		
		}		
		GameObject obj = new GameObject ();		
		obj.AddComponent<AsyncImageDownload> ();		
		AsyncImageDownload loader= obj.GetComponent<AsyncImageDownload>();	

		Instance = loader;		
		loader.placeholder = Resources.Load("placeholder") as Texture;

		return loader;	
	}
	public  void SetAsyncImage(string url,UITexture texture)
	{
		//开始下载图片前,将UITexture的主图片设置为占位图
		texture.mainTexture = placeholder;
		//判断是否是第一次加载这张图片
		if (!File.Exists (path + url.GetHashCode())) 
		{
			//如果之前不存在缓存文件
			StartCoroutine (DownloadImage (url, texture));
		}
		else
		{
			StartCoroutine(LoadLocalImage(url,texture));
		}

	}

	//读取本地图片
	IEnumerator  DownloadImage(string url,UITexture texture)
	{
//		Debug.Log("downloading new image:"+path+url.GetHashCode());  
		WWW www = new WWW (url);
		yield return www;
		
		Texture2D image = www.texture;
		//将图片保存至缓存路径
		byte[] pngData = image.EncodeToPNG();  
		File.WriteAllBytes(path+url.GetHashCode(), pngData);  
		
		texture.mainTexture = image;
	}
	//读取缓存图片
	IEnumerator  LoadLocalImage(string url,UITexture texture)
	{
		string filePath = "file:///" + path + url.GetHashCode ();
		
//		Debug.Log("getting local image:"+filePath);
		WWW www = new WWW (filePath);
		yield return www;

		//直接贴图
		texture.mainTexture = www.texture;
		
	}
}

调用接口脚本参考:

using UnityEngine;
using System.Collections;

public class LoadImgStart : MonoBehaviour {

	// Use this for initialization
	void Start () 
	{
		AsyncImageDownload.Instance.SetAsyncImage ("file://" +Application.persistentDataPath + "/photos/"+gameObject.name +".png", this.GetComponent<UITexture> ());
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值