Unity运行时动态加载本地图片

一、Unity运行时加载本地文件夹下所有图片的方法,用于在使用图片前加载完成

using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;/// <summary>
/// IO加载本地图片 txt文档
/// </summary>
public class ComPanyUILoadController : MonoBehaviour {public static ComPanyUILoadController instance { get; private set; }private string jsonPath = @"E:\文件夹名\json存放文件夹\json名.json"; //json文件路径private string imagePath = @"E:\文件夹名\文件夹名\"; //图片文件路径public List<CompanyData> datas;  //数据存储列表public CompanyData currentDatas; //Json解析格式 private void Awake(){instance = this;//加载各个文件datas = JsonToObject.JsonToObject_ByJsonFile<CompanyData>(jsonPath); //json解析}#region  图片加载/// <summary>/// 获取文件根路径/// </summary>/// <returns></returns>private string GetPath(){string path ="";foreach (CompanyData i in datas){if (GameManager.instacne.currentCompany.Equals(i.ID))  //加载编号{path = imagePath + i.Name+@"\";}}return path;  // E:\文件夹名\文件夹名\文件夹名\}/// <summary>/// 按照表编号加载对象/// </summary>/// <returns></returns>public CompanyData LoadText(){foreach (var i in datas){if (i.ID == null){break;}if (i.ID.Equals(GameManager.instacne.currentCompany)){currentDatas = i;}}return currentDatas;}/// <summary>///加载一个文件夹中所有的图片流 返回字典/// 加载图片的Dictionary<string,List<Byte[]>>/// </summary>/// <param name="filesName">图片所在文件夹地址</param>/// <returns></returns>public Dictionary<string, List<byte[]>> LoadImages(string filesName){Dictionary<string, List<byte[]>> list = new Dictionary<string, List<byte[]>>();string tempPath = GetPath() + filesName; //图片文件夹位置List<string> filePaths = new List<string>();string imgtype = "*.BMP|*.JPG|*.PNG";string[] ImageType = imgtype.Split('|');for (int i = 0; i < ImageType.Length; i++){//文件夹下所有的图片路径  string[] dirs = Directory.GetFiles(tempPath, ImageType[i]);for (int j = 0; j < dirs.Length; j++){filePaths.Add(dirs[j]);}}for (int i = 0; i < filePaths.Count; i++){//切割图片名和对对应的图片流数据List<byte[]> tl = new List<byte[]>();string Tstr = filePaths[i].Split('\\')[5].Split('.')[0]; //图片位置 下标为5个元素是图片名称  分割图片名称byte[] bs = getImageByte(filePaths[i]);tl.Add(bs);list.Add(Tstr,tl); //图片名和图片流数据对应}return list;}#region 加载图片List<Texture2D>/// <summary>///加载文件夹下所有图片流 返回图片流列表/// 加载图片的Byte[]数组/// </summary>/// <param name="filesName">地址</param>public List<byte[]> LoadImage(string filesName){List<byte[]> list = new List<byte[]>();string tempPath = GetPath() + filesName;  //图片文件夹路径List<string> filePaths = new List<string>();string imgtype = "*.BMP|*.JPG|*.PNG";string[] ImageType = imgtype.Split('|');for (int i = 0; i < ImageType.Length; i++){//文件夹下所有的图片路径  string[] dirs = Directory.GetFiles(tempPath, ImageType[i]);for (int j = 0; j < dirs.Length; j++){filePaths.Add(dirs[j]);}}//通过路径加载图片流for (int i = 0; i < filePaths.Count; i++){byte[] bs = getImageByte(filePaths[i]);list.Add(bs);}return list;}#endregion/// <summary>  /// 根据图片路径返回图片的字节流byte[]  /// </summary>  /// <param name="imagePath">图片路径</param>  /// <returns>返回的字节流</returns>  private byte[] getImageByte(string imagePath){FileStream files = new FileStream(imagePath, FileMode.Open,FileAccess.Read);files.Seek(0,SeekOrigin.Begin);byte[] imgByte = new byte[files.Length];files.BeginRead(imgByte,0,(int)files.Length,CallBack,files);return imgByte;}/// <summary>/// 异步加载/// </summary>/// <param name="ar"></param>void CallBack(IAsyncResult ar){FileStream fs = ar.AsyncState as FileStream;fs.Close();fs.Dispose();}#endregion
}

用的时候:

List<byte[]> data=new  List<byte[]>();  //临时接收图片数据流
List<Texture2D> turList=new List<Texture2D>();  //保存图片
data=ComPanyUILoadController.instance.LoadImage("图片所在文件夹");
foreach (byte[] item in data)
{//文件byte[]转换成Texture2DTexture2D tex = new Texture2D(100, 100, TextureFormat.RGBA32, false);   tex.LoadImage(item); //建议哪里调用哪里转turList.Add(tex);
}//后续或将Texture2D转换为Sprite使用

二、Unity运行时临时加载本地文件夹下一张图片的方法

    public static class ImageLoad {public static Texture2D LoadImageByte(string path){//读取图片位置   PathSet.dataPath+path=图片所在文件夹路径\+图片名称.格式        .png/.jpg等FileStream files=new FileStream (PathSet.dataPath+path,FileMode.Open,FileAccess.Read);files.Seek(0,SeekOrigin.Begin);byte[] imgByte=new byte[files.Length];//这种加载方法临时加载可能会加载数据流不全,在转成Texture2D出现红问号加载失败的情况//files.BeginRead(imgByte,0,(int)files.Length,CallBack,files);files.Read(imgByte,0,imgByte.Length);files.Close();Texture2D tx=new Texture2D (512,512);tx.LoadImage(imgByte);return tx;}//分线程加载static void CallBack(IAsyncResult ar){FileStream fileStream=ar.AsyncState as FileStream;fileStream.Close();fileStream.Dispose();} }

Unity动态加载本地图片相关推荐

  1. vue 动态获取的图片路径不显示_解决Vue动态加载本地图片问题

    最近遇到了个问题,用v-bind动态绑定img的src,图片加载不出来.控制台显示src是有获取到图片地址的,可是就是加载不出来. 最后才发现原因原来是浏览器中直接显示'./img/img1.png' ...

  2. vue+element-ui 动态加载本地图片

    最近用element-ui实现图片展示时,发先本地的图片加载不了,一开始是这么写的 <el-imageclass="table-td-thumb":src="'.. ...

  3. c语言加载本地图片,Unity加载本地图片的2种方式

    1. 使用 WWW 加载,详细查看 unity3d 官方文档. 2. 使用 System.IO 加载,lua 代码如下: local File = luanet.import_type("S ...

  4. 剖析Picasso加载压缩本地图片流程(解决Android 5.0部分机型无法加载本地图片的问题)

    之前项目中使用Picasso遇到了一个问题:在Android 5.0以上版本的部分手机上使用Picasso加载本地图片会失败.为了解决这个问题,研究了一下Picasso加载和压缩本地图片的流程,才有了 ...

  5. Android插件化开发之动态加载本地皮肤包进行换肤

    Android插件化开发之动态加载本地皮肤包进行换肤 前言: 本文主要讲解如何用开源换肤框架 android-skin-loader-lib来实现加载本地皮肤包文件进行换肤,具体可自行参考框架原理进行 ...

  6. 可以加载本地图片和网络资源的轮播图:TuTu

    轮播图 可以加载本地图片或者网络资源的无限循环的轮播图,一行代码调用,图片三级缓存,节省流量,间隔自己设置,使用方便. 1.你只要写好布局就行,布局写成啥样你自己决定,扩展性强,满足多样化需求例如: ...

  7. android picasso 显示本地图片,剖析Picasso加载压缩本地图片流程(解决Android 5.0部分机型无法加载本地图片的问题)...

    之前项目中使用Picasso遇到了一个问题:在Android 5.0以上版本的部分手机上使用Picasso加载本地图片会失败.为了解决这个问题,研究了一下Picasso加载和压缩本地图片的流程,才有了 ...

  8. Qt学习之使用QListWidget加载本地图片实现双击放大

    目录 一.前言 二.实现效果 三.代码实现 (1)QListWidget的使用 1.QListWidget初始化 2.QListWidget加载本地图片 3.QListWidget样式表设计 4.QL ...

  9. UIWebView如何加载本地图片

    UIWebView如何加载本地图片 UIWebView加载本地图片是有实用价值的.比方说,有时候我们需要本地加载静态页来显示相关帮助信息,而这些帮助信息当中含有很多很多的富文本,用代码实现难度较大,这 ...

  10. 【Flutter】Image 组件 ( 加载网络图片 | 加载静态图片 | 加载本地图片 | path_provider 插件 )

    文章目录 一.加载网络图片 二.加载静态图片 三.加载本地图片 四.完整代码示例 五.相关资源 一.加载网络图片 参考 [Flutter]Image 组件 ( Image 组件简介 | Image 构 ...

最新文章

  1. Python 搭建车道智能检测系统
  2. 视觉SLAM总结——LSD SLAM中关键知识点总结
  3. Node.js实践第一天
  4. jzoj4235-序列【斐波那契数列】
  5. Apache Nutch 1.3 学习笔记十(插件机制分析)
  6. 如何成功实现数据治理
  7. EXTJS4.0 EXT文件目录,本地加载文档,命名规范
  8. 【备忘】Java教学系列视频教程 孔浩老师 千课巨献全网最全 共26G
  9. CRC校验码计算公式
  10. B2C模式电商案例分享
  11. 微信小程序wx:key使用
  12. 介绍理想工作计算机 英语作文,理想工作的英语作文6篇
  13. jdk1.8下载及安装
  14. 《微积分基础》学习(一)
  15. 四、GNSS测量误差来源及其影响
  16. Flink DataStream API 中的多面手——Process Function详解
  17. python hydra库
  18. 区块链网络安全(区块链网络安全论文)
  19. 机器学习——Kmeans聚类算法
  20. 科普 | 生物多样性: 大自然的新陈代谢

热门文章

  1. x61 linux 驱动 无线网卡,联想thinkpadx61无线网卡驱动下载-联想x61无线网卡驱动 win7官方版 - 极光下载站...
  2. 最新信恒第四方支付系统源码+服务器直接打包
  3. JSON格式转换工具
  4. 如何设置迪文DGUS屏的字体效果?
  5. 三点确定一个圆的计算方法
  6. java keytool下载_Java中Keytool工具的使用总结(一)
  7. soul刷屏编程代码_#自学编程方法论#迭代式学习
  8. vs2010制作安装包-vs2010打包教程
  9. 《数据结构》C语言版(清华严蔚敏考研版) 全书知识梳理 + 练习习题详解(超详细清晰易懂)
  10. 数值方法求解微分方程