Как программно получить доступ к изображениям в файле ресурсов? - PullRequest
5 голосов
/ 22 января 2010

У меня 30 файлов PNG в файле ресурсов, и я хотел бы перебрать их в таймере. Этот таймер устанавливает фоновое изображение формы для следующего PNG в последовательности, чтобы создать базовую анимацию.

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

Примечания:

  • Изображения в файле ресурсов именуются в последовательности ('image001.png', 'image002.png', ...).
  • Этот файл ресурсов используется исключительно для хранения этих изображений.

Ответы [ 4 ]

2 голосов
/ 22 января 2010
    private void Form1_Load(object sender, EventArgs e)
    {
        var list = WindowsFormsApplication1.Properties.Resources.ResourceManager.GetResourceSet(new System.Globalization.CultureInfo("en-us"), true, true);
        foreach (System.Collections.DictionaryEntry img in list)
        {
            System.Diagnostics.Debug.WriteLine(img.Key);
            //use img.Value to get the bitmap
        }

    }
1 голос
/ 22 января 2010

Вот хороший учебник о том, как извлечь встроенные ресурсы здесь в CodeProject, а здесь как использовать изображение как альфа-смешанное, и показано, как загрузить его всписок изображений.Вот вспомогательный класс для облегчения загрузки встроенных ресурсов здесь .

Надеюсь, это поможет, С уважением, Том.

1 голос
/ 22 января 2010
Assembly asm = Assembly.GetExecutingAssembly();
for(int i = 1; i <= 30; i++)
{
  Stream file = asm.GetManifestResourceStream("NameSpace.Resources.Image"+i.ToString("000")+".png");
  // Do something or store the stream
}

Чтобы получить название всех встроенных ресурсов:

string[] resourceNames = Assembly.GetManifestResourceNames();
foreach(string resourceName in resourceNames)
{
    System.Console.WriteLine(resourceName);
}

Также, посмотрите пример в функции Form1_Load.

0 голосов
/ 22 января 2010

Как насчет ответа на этом форуме , который использует GetManifestResourceStream () ?

...