功能实现如题。如何将某个文件夹下的所有图片找出来,这是将程序中一个截图功能截取到的所有图片进行展示出来的功能需求,但是因为是通过GUI的方式,我感觉缺陷很大,下面有修改过的版本。
using UnityEngine;
using System.Collections.Generic;
using System.IO;
public class LoadAllImage : MonoBehaviour
{
// 储存获取到的图片
List<Texture2D> allTex2d = new List<Texture2D> ();
// Use this for initialization
void Start ()
{
load ();
}
void OnGUI ()
{
if (allTex2d.Count != 0) {
// 把保存的图片以Button的形式显示出来
for (int i = 0; i < allTex2d.Count; i++) {
GUILayout.Button (allTex2d [i]);
}
}
}
void load ()
{
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[] dirs = Directory.GetFiles (@"d:\\a", ImageType [i]);
for (int j = 0; j < dirs.Length; j++) {
filePaths.Add (dirs [j]);
}
}
for (int i = 0; i < filePaths.Count; i++) {
Texture2D tx = new Texture2D (100, 100);
tx.LoadImage (getImageByte (filePaths [i]));
allTex2d.Add (tx);
}
}
/// <summary>
/// 根据图片路径返回图片的字节流byte[]
/// </summary>
/// <param name="imagePath">图片路径</param>
/// <returns>返回的字节流</returns>
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;
}
}
修改过后的版本一个是不是通过GUI去显示所有的图片,而是添加了一个ScrollRect,以Element的方式添加到其中,实现滚动,点击等多种功能,排版也更加清晰。
using UnityEngine;
using System.Collections.Generic;
using System.IO;
using UnityEngine.UI;
public class LoadAllPic : MonoBehaviour
{
public GameObject StoreObj;
// 储存获取到的图片
List<Texture2D> allTex2d = new List<Texture2D>();
// Use this for initialization
void Start()
{
load();
for(int i = 0; i < allTex2d.Count; i++)
{
GameObject temp= GameObject.Instantiate(StoreObj, StoreObj.transform.position, Quaternion.identity);
temp.GetComponent<Transform>().SetParent(StoreObj.transform.parent);
Sprite sprite = Sprite.Create(allTex2d[i], new Rect(0, 0, allTex2d[i].width, allTex2d[i].height), new Vector2(0.5f, 0.5f));
temp.GetComponent<Image>().sprite = sprite;
temp.transform.name = "Element" + i;
}
StoreObj.SetActive(false);
}
void load()
{
List<string> filePaths = new List<string>();
string imgtype = "*.BMP|*.JPG|*.GIF|*.PNG";
string[] ImageType = imgtype.Split('|');
for (int i = 0; i < ImageType.Length; i++)
{
//获取Application.dataPath文件夹下所有的图片路径
string[] dirs = Directory.GetFiles((Application.dataPath+"/Screenshot"), ImageType[i]);
for (int j = 0; j < dirs.Length; j++)
{
filePaths.Add(dirs[j]);
}
}
for (int i = 0; i < filePaths.Count; i++)
{
Texture2D tx = new Texture2D(100, 100);
tx.LoadImage(getImageByte(filePaths[i]));
allTex2d.Add(tx);
}
}
/// <summary>
/// 根据图片路径返回图片的字节流byte[]
/// </summary>
/// <param name="imagePath">图片路径</param>
/// <returns>返回的字节流</returns>
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;
}
}