前段时间做东西,需要可以在文件夹下面更改图片,达到运行后图片更改的效果,并且需要将读取到的图片转换成Sprite精灵使用.因为我要用到图片的填充效果.经过网上的学习,这里总结一下实现的方法和思路.以及实现代码
1.首先第一步需要做的时知道如何读取到外部的图片文件.这里使用FileStream文件流类.
这里首先写一个处理文件流的方法:
private static byte[] getImageByte(string imagePath)
{
//读取到文件
FileStream files = new FileStream(imagePath, FileMode.Open);
//新建比特流对象
byte[] imgByte = new byte[files.Length];
//将文件写入对应比特流对象
files.Read(imgByte, 0, imgByte.Length);
//关闭文件
files.Close();
//返回比特流的值
return imgByte;
}
每一个步骤的内容都在代码中标注了.通过上面的方法,最终,我们能得到对应文件路径下的文件的比特流.
但是现在面临了一个问题,读取文件,是要清楚地知道文件路径的,但是如果我不知道文件名呢,需要的结果是不管这个文件夹下面有多少图片,名称怎么样我都得读取得到才行,这里通过Directory类中的方法 Directory.GetFiles("路劲名称")可以获取到一个文件夹下所有文件的名称,方法如下
private List GetImagePath()
{
List filePaths = new List();
string imgtype = "*.JPG|*.PNG";
string[] ImageType = imgtype.Split('|');
for (int i = 0; i < ImageType.Length; i++)
{
//获取unity根目录下的图片文件夹下的所有文件的路径 路径+ 名称全部存储在字符串数组中
string[] dirs = Directory.GetFiles(Application.dataPath + @"/图片", ImageType[i]);
//
for (int j = 0; j < dirs.Length; j++)
{
filePaths.Add(dirs[j]);
Debug.Log("图片路径为 " + dirs[j]);
}
Debug.Log("一共读取到" + dirs.Length + "张图片");
}
return filePaths;
}
最后整合一下一个方法,不仅获取到Texture文件,同时也将Texture格式转换成Sprite文件
List loadTexture = new List();
List loadsprite = new List();
private void LoadTexture2Sprite()
{
//清空一下,防止爆满
loadTexture.Clear();
loadsprite.Clear();
//获取到路劲
List filePaths = new List();
filePaths = GetImagePath();
//新建时要给上大小,小于原先的图片大小会出现图片值截取一块的情况
//根据读取到的文件路径,一个文件一个文件的将图片存储进去
for (int i = 0; i < filePaths.Count; i++)
{
Texture2D t2d = new Texture2D(1920, 1080);
//根据路劲读取字节流再转换成图片形式
t2d.LoadImage(getImageByte(filePaths[i]));
//放到集合里面
loadTexture.Add(t2d);
//将Texture创建成Sprite 参数分别为图片源文件,Rect值给出起始点和大小 以及锚点的位置
Sprite sprite = Sprite.Create(t2d, new Rect(0, 0, t2d.width, t2d.height), Vector2.zero);
//放入集合
loadsprite.Add(sprite);
}
}
通过写上一些辅助方法,图片改一改填充,换换图片的功能,最后得到的结果如下:
到这里,如何加载图片以及转换成Sprite调用就写完了,大家是否学会了呢