如何将位于我的资源文件夹中的图像转换为数组?

时间:2008-11-24 21:38:43

标签: c#

我想从我的资源文件夹中将gif格式的52张图像(卡片组)加载到c#中的Image []中。有什么想法吗?

谢谢, 乔恩

4 个答案:

答案 0 :(得分:4)

您可以从这样的文件中读取位图;

  public static Bitmap GetBitmap( string filename )
  {
     Bitmap retBitmap = null;
     string path = String.Concat( BitmapDir, filename );
     if ( File.Exists( path ) )
     {
        try
        {
           retBitmap = new Bitmap( path, true );
        }
        catch { }
     }
     return retBitmap;
  }

您可以像这样获取资源目录中的文件列表;

string[] files = Directory.GetFiles( BitmapDir, "*.gif" );

只需遍历调用GetBitmap(文件)的文件并填充数组。 BitmapDir显然是您的GIF文件所在的目录。

答案 1 :(得分:1)

假设您将图像放在本地文件系统的文件夹中,并且您在.NET 3.5下运行:

Image[] cards = Directory.GetFiles(cardsFolder).Select(f => Image.FromFile(f)).ToArray();

单行总是很好: - )

答案 2 :(得分:1)

如果您的资源没有被复制到文件夹,因为它们是嵌入式的,您应该使用Reflection,一个起点就是这个(图像作为方法存储在资源文件中):

   List<System.Drawing.Image> images = new List<System.Drawing.Image>();
        foreach (System.Reflection.MethodInfo t 
            in typeof(Resources.Resource).GetMethods())
        {
            if (t.ReturnType.ToString() == "System.Drawing.Bitmap")
            {
                images.Add(new System.Drawing.Bitmap((System.Drawing.Image)t.Invoke(null, null)));

            }
        }

答案 3 :(得分:1)

也许最好验证文件是否是图像,因为如果没有,则抛出异常:

 protected void MethodToBeCalled()
    {


        System.Drawing.Image[] cards = Directory.GetFiles(cardsFolder).Where(
              f =>
              {

                  if (IsImage((string)f))
                  {
                      return true ;
                  }
                  else { return false; }
              }
            ).Select(f => System.Drawing.Image.FromFile(f)).ToArray();

    }
        private bool IsImage(string filename)
    {
        string[] knownPicExtensions = {".jpg",".gif",".png",".bmp",".jpeg",".jpe" };

        foreach (string extension in knownPicExtensions)
        {
            if (filename.ToLower().EndsWith(extension))
                return true;
        }

        return false;
    }