我想从我的资源文件夹中将gif格式的52张图像(卡片组)加载到c#中的Image []中。有什么想法吗?
谢谢, 乔恩
答案 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;
}