使用给定文件夹中的源创建图像数组 C# Windows 桌面
Creating Array of Images with source from a given folder C# Windows Desktop
大家好,正如标题所说,我正在尝试创建图像类型的数组并从文件夹中设置其中的图像源,因为我的文件夹中有 52 个 png,我不想一个一个地添加它们。 .那么有办法做到这一点吗?
这就是我到目前为止所得到的:
void DeckCard()
{
Image []Deck=new Image[52];
for(int i=0;i<=Deck.Length;i++)
{
Deck[i] = new Image();
LayoutRoot.Children.Add(Deck[i]);
Deck[i].Margin = new Thickness(0, 0, 0, 0);
Deck[i].Height = 400;
Deck[i].Width = 200;
}
}
P.S。文件夹位置是 Assets//Cards/(这里是图片)
那么您必须在目录中找到图像。
看看 System.IO.Directory.GetFiles
尤其是 SearchPattern
重载。如果它们是 png 的,它可能看起来像这样:
string[] straImageLocations = System.IO.Directory.GetFiles("DirectoryLocation", "*.png", SearchOption.TopDirectoryOnly);
搜索模式是 *
-> 通配符以匹配任何字符,.png
以“.png”结尾。
然后您将获得所有文件的位置,您需要做的就是将它们加载到图像数组中。按照以下内容:
Image[] Deck = new Image[straImageLocations.Length];
for (int i = 0; i < straImageLocations.Length; i++)
{
Deck[i] = Image.FromFile(straImageLocations[i]));
}
如何使用LINQ and Directory.GetFiles:
Image[] deck = System.IO.Directory.GetFiles("Assets\Cards\")
.Select(file => System.Drawing.Image.FromFile(file))
.ToArray();
编辑
我从未开发过 Windows 商店应用程序,但这是我的尝试(请注意,我没有尝试编译以下代码):
Image[] cards = ApplicationData.Current.LocalFolder.GetFolderAsync("Assets\Cards").GetResults()
.GetFilesAsync().GetResults()
.Select(file =>
{
using(IRandomAccessStream fileStream = file.OpenAsync(Windows.Storage.FileAccessMode.Read).GetResults())
{
Image image = new Image();
BitmapImage source = new BitmapImage();
source.SetSourceAsync(fileStream).GetResults();
image.Source = source;
// Modify Image properties here...
// image.Margin = new Thicknes(0, 0, 0, 0);
// ....
// You can also do LayoutRoot.Children.Add(image);
return image;
}
}).ToArray();
呸,太刺耳了!
当然可以使用 async/await.
很好地重构此代码
看看它是关于枚举给定目录中的文件的演讲:Enumerate Files
这比 GetFiles 更有效,因为您必须等到从 GetFiles 返回所有文件名才能开始使用它。枚举允许您在此之前开始。
大家好,正如标题所说,我正在尝试创建图像类型的数组并从文件夹中设置其中的图像源,因为我的文件夹中有 52 个 png,我不想一个一个地添加它们。 .那么有办法做到这一点吗? 这就是我到目前为止所得到的:
void DeckCard()
{
Image []Deck=new Image[52];
for(int i=0;i<=Deck.Length;i++)
{
Deck[i] = new Image();
LayoutRoot.Children.Add(Deck[i]);
Deck[i].Margin = new Thickness(0, 0, 0, 0);
Deck[i].Height = 400;
Deck[i].Width = 200;
}
}
P.S。文件夹位置是 Assets//Cards/(这里是图片)
那么您必须在目录中找到图像。
看看 System.IO.Directory.GetFiles
尤其是 SearchPattern
重载。如果它们是 png 的,它可能看起来像这样:
string[] straImageLocations = System.IO.Directory.GetFiles("DirectoryLocation", "*.png", SearchOption.TopDirectoryOnly);
搜索模式是 *
-> 通配符以匹配任何字符,.png
以“.png”结尾。
然后您将获得所有文件的位置,您需要做的就是将它们加载到图像数组中。按照以下内容:
Image[] Deck = new Image[straImageLocations.Length];
for (int i = 0; i < straImageLocations.Length; i++)
{
Deck[i] = Image.FromFile(straImageLocations[i]));
}
如何使用LINQ and Directory.GetFiles:
Image[] deck = System.IO.Directory.GetFiles("Assets\Cards\")
.Select(file => System.Drawing.Image.FromFile(file))
.ToArray();
编辑
我从未开发过 Windows 商店应用程序,但这是我的尝试(请注意,我没有尝试编译以下代码):
Image[] cards = ApplicationData.Current.LocalFolder.GetFolderAsync("Assets\Cards").GetResults()
.GetFilesAsync().GetResults()
.Select(file =>
{
using(IRandomAccessStream fileStream = file.OpenAsync(Windows.Storage.FileAccessMode.Read).GetResults())
{
Image image = new Image();
BitmapImage source = new BitmapImage();
source.SetSourceAsync(fileStream).GetResults();
image.Source = source;
// Modify Image properties here...
// image.Margin = new Thicknes(0, 0, 0, 0);
// ....
// You can also do LayoutRoot.Children.Add(image);
return image;
}
}).ToArray();
呸,太刺耳了!
当然可以使用 async/await.
很好地重构此代码看看它是关于枚举给定目录中的文件的演讲:Enumerate Files
这比 GetFiles 更有效,因为您必须等到从 GetFiles 返回所有文件名才能开始使用它。枚举允许您在此之前开始。