Как я могу получить все изображения из ресурсов одновременно? - PullRequest
0 голосов
/ 27 апреля 2020

Я добавил несколько изображений в ресурсы проекта и хочу добавить их в список растровых изображений.
Глядя на мой код, это выглядит неэффективно: мне приходится повторять один и тот же код 12 раз.

Как я могу добавить их один раз?

public partial class Form1 : Form
{
    private List<Bitmap> chineseZodiacList;

    public Form1()
    {
        InitializeComponent();
        chineseZodiacList.Add(Properties.Resources.猴);
        chineseZodiacList.Add(Properties.Resources.鸡);
        chineseZodiacList.Add(Properties.Resources.狗);
        chineseZodiacList.Add(Properties.Resources.猪);
        chineseZodiacList.Add(Properties.Resources.鼠);
        chineseZodiacList.Add(Properties.Resources.牛);
        chineseZodiacList.Add(Properties.Resources.虎);
        chineseZodiacList.Add(Properties.Resources.兔);
        chineseZodiacList.Add(Properties.Resources.龙);
        chineseZodiacList.Add(Properties.Resources.蛇);
        chineseZodiacList.Add(Properties.Resources.马);
        chineseZodiacList.Add(Properties.Resources.羊);
    }
}

1 Ответ

0 голосов
/ 27 апреля 2020

Простой метод - создать список строк, соответствующих именам растровых изображений, и загрузить их в один go. Здесь, вероятно, лучше использовать List<Bitmap>, но Dictionary<string, Bitmap> (как показано во втором фрагменте):

string[] zodiacSymbols = { "猴", "鸡", "狗", "猪", "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊" };
List<Bitmap> zodiacImages = zodiacSymbols.Select(sym => (Bitmap)Properties.Resources.ResourceManager.GetObject(sym)).ToList();

Или получить все ресурсы типа Bitmap (как в этом случае) Вы можете использовать класс ResourceReader и заполнить, например, словарь:

Dictionary<string, Bitmap> resImages = new Dictionary<string, Bitmap>();

, который содержит все ресурсы типа this и имя ресурса, используемого в качестве ключа:
(конечно, вы также можете фильтровать по имени - или что-то еще - не просто Ty Type)

using System.Reflection;

var asm = Assembly.GetExecutingAssembly();

using (var asmResStream = asm.GetManifestResourceStream($"{asm.GetName().Name}.Properties.Resources.resources"))
using (var resReader = new ResourceReader(asmResStream)) {
    foreach (DictionaryEntry entry in resReader) {
        if (entry.Value.GetType() == typeof(Bitmap)) {
            resImages.Add((string)entry.Key, (Bitmap)entry.Value);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...