Привет всем, как говорится в заголовке, я пытаюсь создать массив типа 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;

        }
    }

P.S. расположение папки - Assets // Cards / (вот картинки)

1
user5178825 30 Окт 2015 в 15:18

3 ответа

Лучший ответ

Как насчет использования 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.

4
Matias Cicero 30 Окт 2015 в 13:37

Проверьте это, он говорит о перечислении файлов в заданном каталоге: Перечислить файлы

Это более эффективно, чем GetFiles, потому что вам нужно дождаться, пока все имена файлов не будут возвращены из GetFiles, чтобы начать его использовать. Enumerate позволяет начать перед этим.

Перечислить по сравнению с GetFiles

0
Nico 30 Окт 2015 в 12:28

Что ж, вам нужно найти изображения в каталоге. Обратите внимание на 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]));
}
1
TheLethalCoder 30 Окт 2015 в 12:31