天天减肥网,内容丰富有趣,生活中的好帮手!
天天减肥网 > 获取文件夹中所有图片文件

获取文件夹中所有图片文件

时间:2022-07-13 15:11:47

相关推荐

获取文件夹中所有图片文件

开发中常遇到要读取指定文件夹中的某一类文件,这时如果每次都以拼字符串地址的形式查找文件比较麻烦,分享两个读取指定文件夹中某一类文件的方法。以图片文件为例:1、以WWW方式进行加载,显示在RawImage上;2、以数据流形式读取文件,显示在RawImage上。

一、WWW加载

首先我们创建一个字典,new Dictionary<int, Texture>(),存储图片及对应编号。这里我预先将图片名批处理为从“0001”开始的连续的编号,方便处理。

现在可以开始用WWW加载文件了,注意使用WWW加载本地文件时,地址中尽量不要用中文。

private void LoadByWWW(){string url = PlayerPrefs.GetString("imagePath");long length = GetDirectoryLength(url);for (int i = 1; i < length; i++){StartCoroutine(Load(i.ToString().PadLeft(4, '0')));Debug.Log("i.ToString().PadLeft(4, '0'):" + i.ToString().PadLeft(4, '0'));}}IEnumerator Load(string index){WWW w = new WWW(@"file:///" + PlayerPrefs.GetString("imagePath") + index + ".jpg");yield return w;int i = int.Parse(index);Debug.Log("dirArr:" + i);Debug.Log(@"file:///" + PlayerPrefs.GetString("imagePath") + index + ".jpg");dirArr.Add(i, w.texture);w.Dispose();}public long GetDirectoryLength(string dirPath){//判断给定的路径是否存在,如果不存在则退出if (!Directory.Exists(dirPath))return 0;long len = 0;//定义一个DirectoryInfo对象DirectoryInfo di = new DirectoryInfo(dirPath);//通过GetFiles方法,获取di目录中的所有文件的大小foreach (FileInfo fi in di.GetFiles()){len++;}return len;}

加载完毕后,将图片赋给RawImage即可,注意代码运行顺序,要在加载完毕后调用赋值方法,即先加载完成后显示图片。由于WWW加载需要时间,会出现没有加载完成时,执行了显示图片,此时该图片未加载,导致报错。同时要注意,加载完成后要释放资源。

二、数据流读取

数据流加载文件不过多描述,直接上代码。

private void LoadPicture(){List<string> filePaths = new List<string>();string imgtype = "*.BMP|*.JPG|*.GIF|*.PNG";string[] ImageType = imgtype.Split('|');for (int i = 0; i < ImageType.Length; i++){//获取d盘中a文件夹下所有的图片路径 string imagePath = PlayerPrefs.GetString("imagePath");string[] dirs = Directory.GetFiles(imagePath, ImageType[i]);for (int j = 0; j < dirs.Length; j++){filePaths.Add(dirs[j]);//Debug.Log("filePaths:" + filePaths);}}for (int i = 0; i < filePaths.Count; i++){Texture2D tx = new Texture2D(100, 100);tx.LoadImage(getImageByte(filePaths[i]));allTex2d.Add(tx);}filePaths.Clear();}/// <summary> /// 根据图片路径返回图片的字节流byte[] /// </summary> /// <param name="imagePath">图片路径</param> /// <returns>返回的字节流</returns> private static byte[] getImageByte(string imagePath){FileStream files = new FileStream(imagePath, FileMode.Open);imgByte = new byte[files.Length];files.Read(imgByte, 0, (int)files.Length);files.Close();files.Dispose();files = null;return imgByte;}

同样要注意释放资源。

如果觉得《获取文件夹中所有图片文件》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。