使用给定文件夹C#Windows Desktop中的源创建图像阵列

本文关键字:创建 图像 阵列 Desktop 文件夹 C#Windows | 更新日期: 2023-09-27 18:20:04

大家好,标题说我正在尝试创建Image类型的数组,并从文件夹中设置其中图像的来源,因为文件夹中有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;
        }
    }

附言:文件夹位置为Assets/Cards/(此处为图片)

使用给定文件夹C#Windows Desktop中的源创建图像阵列

如何使用LINQ和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可以很好地重构这些代码。

您必须在目录中找到图像。看看System.IO.Directory.GetFiles,尤其是SearchPattern过载。如果它们是png的,它可能看起来像这样:

string[] straImageLocations = System.IO.Directory.GetFiles("DirectoryLocation", "*.png", SearchOption.TopDirectoryOnly);

搜索模式为*->Wildcard以匹配任何字符,.png以".png"结尾。

然后,您就有了所有文件的位置,所需要做的就是将它们加载到图像阵列中。沿着以下路线:

Image[] Deck = new Image[straImageLocations.Length];
for (int i = 0; i < straImageLocations.Length; i++)
{
    Deck[i] = Image.FromFile(straImageLocations[i]));
}

看看这个,它是关于枚举给定目录中的文件的:枚举文件

这比GetFiles更有效,因为您必须等到GetFiles返回所有文件名后才能开始使用它。Enumerate允许您在此之前开始。

枚举Vs GetFiles