Unity 获取某个文件夹下的所有图片并进行展示(亲测有效)

时间:2024-03-30 20:51:08
                     

 功能实现如题。如何将某个文件夹下的所有图片找出来,这是将程序中一个截图功能截取到的所有图片进行展示出来的功能需求,但是因为是通过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;      }  }  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

 修改过后的版本一个是不是通过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;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

 结构及最终实现如图:
Unity 获取某个文件夹下的所有图片并进行展示(亲测有效)

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

                     

 功能实现如题。如何将某个文件夹下的所有图片找出来,这是将程序中一个截图功能截取到的所有图片进行展示出来的功能需求,但是因为是通过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;      }  }  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

 修改过后的版本一个是不是通过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;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

 结构及最终实现如图:
Unity 获取某个文件夹下的所有图片并进行展示(亲测有效)