在这里记录一下在 Unity3D 中分别使用 WWW 和 IO 流加载外部图片
使用 WWW 加载
/// <summary>
/// 使用 WWW 加载图片,并赋值给 _rawImage
/// </summary>
/// <param name="_url">图片地址</param>
/// <param name="_rawImage"></param>
/// <returns></returns>
public static IEnumerator LoadTexture2DByWWW(string _url, RawImage _rawImage)
{
WWW _www = new WWW(_url);
yield return _www;
if (_www.error == null)
{
_rawImage.texture = _www.texture;
}
else
{
Debug.LogError(_www.error);
}
}
/// <summary>
/// 使用 WWW 加载图片,并将图片转换成 Sprite 类型赋值给 _image
/// </summary>
/// <param name="_url">图片地址</param>
/// <param name="_image"></param>
/// <returns></returns>
public static IEnumerator LoadSpriteByWWW(string _url, Image _image)
{
WWW _www = new WWW(_url);
yield return _www;
if (_www.error == null)
{
_image.sprite = Sprite.Create(_www.texture, new Rect(, , _www.texture.width, _www.texture.height), new Vector2(0.5f, 0.5f));
}
else
{
Debug.LogError(_www.error);
}
}
使用 IO 流加载
/// <summary>
/// 使用 IO 流加载图片,并返回。
/// </summary>
/// <param name="_url">图片地址</param>
/// <returns></returns>
public static Texture2D LoadTexture2DByIO(string _url)
{
//创建文件读取流
FileStream _fileStream = new FileStream(_url, FileMode.Open, FileAccess.Read);
_fileStream.Seek(, SeekOrigin.Begin);
//创建文件长度缓冲区
byte[] _bytes = new byte[_fileStream.Length];
_fileStream.Read(_bytes, , (int)_fileStream.Length);
_fileStream.Close();
_fileStream.Dispose();
//创建Texture
Texture2D _texture2D = new Texture2D(, );
_texture2D.LoadImage(_bytes);
return _texture2D;
}
/// <summary>
/// 使用 IO 流加载图片,并将图片转换成 Sprite 类型返回
/// </summary>
/// <param name="_url">图片地址</param>
/// <returns></returns>
public static Sprite LoadSpriteByIO(string _url)
{
Texture2D _texture2D = LoadTexture2DByIO(_url);
Sprite _sprite = Sprite.Create(_texture2D, new Rect(, , _texture2D.width, _texture2D.height), new Vector2(0.5f, 0.5f));
return _sprite;
}