none
Как обратиться к изображению в My.Resources. RRS feed

  • Вопрос

  • В ресурсах есть изображение Img_01.gif, и так же в проэкте папка IMG, в ней (в ресурсах не числится) лежит Img_02.gif

    Необходимо обратится к изображению по его имени... Через My.Resources.Img_01 не получится. Есть такой вариант, занести все в хеш и обращатся по ключу - HashImg.Add("Img_01.gif", My.Resources.Img_01), но говорит что не ссылается на экземпляр объекта. Как сослаться на это изображение? и занести в хеш? Можно ли обратиться к изображению, которого нет в ресурсах и получить его параметры (Img_02.gif)? Или хотя бы просто получить программно это изображение. И какие варианты более подхожящие в этом случае?

    28 марта 2011 г. 16:01

Ответы

  • Посмотрите статью Как и доступ к ресурсам с помощью Visual C# (лучше смотреть на англ языке), там показано как получить доступ к ресурсам сборки.

    Imports System.IO
    Imports System.Reflection
    
    '.............
    
    
        Dim asm As Assembly = Assembly.GetExecutingAssembly()
        Dim image As Stream = asm.GetManifestResourceStream("ПространствоИмен.ИмяФайла")
        PictureBox1.Image = New Bitmap(image)
    

     


    Для связи [mail]
    • Помечено в качестве ответа Siompc 29 марта 2011 г. 9:06
    29 марта 2011 г. 8:23
  • В проекте после построения он будет после следующих действий, если я правильно понял.

    1)В обозревателе решений открываете контекстное меню файла и выбираете свойства.

    2)В окне свойства в поле "действие при построении" выбираете "Внедрённый ресурс"

    После этого код (Dim asm As Assembly и т. д.) должен работать

    • Помечено в качестве ответа Siompc 29 марта 2011 г. 9:06
    29 марта 2011 г. 9:03

Все ответы

  • Если обращаться к Img_01.gif, то Properties.Resources.Img_01 (в C# работает, в VB может по-другому).

    К Img_02.gif, только если знать адрес файла (пока программа в ...\bin\Release\ или ...\bin\Debug\ проблем нет, но если файл программы находится в другой папке, то узнать полный адрес файла Img_02.gif затруднительно). Если всё-таки адрес известен, то Image im = Image.FromFile("Имя файла");

    А почему нельзя добавить и Img_02.gif в ресурсы?

    28 марта 2011 г. 17:38
  • Нет,я не то имел ввиду. В VB обращение идет так: My.Resources.Img_01. Но мне нужно обратится к файлу по имени, то есть - есть переменная Names с текстом "Img_01.gif" и по этому имени нужно найти картинку в ресурсах. Естественно Properties.Resources.Names выведет ошибку. И второе изображение не на локальном диске, а интегрировано в проект. Но в ресурсах не числится. Можно ли получить доступ к нему и как?
    28 марта 2011 г. 19:34
  • Нет,я не то имел ввиду. В VB обращение идет так: My.Resources.Img_01. Но мне нужно обратится к файлу по имени, то есть - есть переменная Names с текстом "Img_01.gif" и по этому имени нужно найти картинку в ресурсах. Естественно Properties.Resources.Names выведет ошибку. И второе изображение не на локальном диске, а интегрировано в проект. Но в ресурсах не числится. Можно ли получить доступ к нему и как?

    Вы хотите обратиться к изображению Img_01 в ресурсах или к файлу Img_01.gif на диске? Если к файлу на диске, то это сомнительно, т. к. файл изображения есть только в папке ресурсов проекта, а программа может быть запущена на другом компьютере. В ресурсах изображение по имени найти теоретически можно (если знать имя ресурса, а не имя файла, но обычно в ресурсах от имени файла просто отбрасывается расширение). Это надо как-то сделать через классы System.Reflection.PropertyInfo и System.Type, в классе Type есть методы GetProperties() и GetProperty("имя ресурса"). Скорее всего через них как-то можно получить информацию о свойстве, а дальше получить значение свойства, преобразовав его из object в Image.

    Про второе изображение: не понятно, как оно может быть "интегрировано в проект", если не числится в ресурсах.

    29 марта 2011 г. 8:19
  • Посмотрите статью Как и доступ к ресурсам с помощью Visual C# (лучше смотреть на англ языке), там показано как получить доступ к ресурсам сборки.

    Imports System.IO
    Imports System.Reflection
    
    '.............
    
    
        Dim asm As Assembly = Assembly.GetExecutingAssembly()
        Dim image As Stream = asm.GetManifestResourceStream("ПространствоИмен.ИмяФайла")
        PictureBox1.Image = New Bitmap(image)
    

     


    Для связи [mail]
    • Помечено в качестве ответа Siompc 29 марта 2011 г. 9:06
    29 марта 2011 г. 8:23
  • Если перетянуть файл или изображение в обозреватель решений, он будет в проэкте а не на диске после построения так? Вот к нему нужно получить доступ...

      Dim asm As Assembly = Assembly.GetExecutingAssembly()
    Dim image As Stream = asm.GetManifestResourceStream("ПространствоИмен.ИмяФайла")
    PictureBox1.Image = New Bitmap(image)

    Выдает ошибку... Скорее всего не так делаю...

    Dim asm As Assembly = Assembly.GetExecutingAssembly()
      Dim image As Stream = asm.GetManifestResourceStream("WindowsApplication1.test.jpg")
      PictureBox1.Image = New Bitmap(image)

      Значение 'null' недопустимо для 'stream'. Не находит изображение.


    • Изменено Siompc 29 марта 2011 г. 9:03
    29 марта 2011 г. 8:53
  • В проекте после построения он будет после следующих действий, если я правильно понял.

    1)В обозревателе решений открываете контекстное меню файла и выбираете свойства.

    2)В окне свойства в поле "действие при построении" выбираете "Внедрённый ресурс"

    После этого код (Dim asm As Assembly и т. д.) должен работать

    • Помечено в качестве ответа Siompc 29 марта 2011 г. 9:06
    29 марта 2011 г. 9:03
  • Да, получилось :) Спасибо! 
    29 марта 2011 г. 9:08