it-swarm.com.ru

Загрузить изображение из области ресурсов проекта в C #

У меня есть изображение в моем проекте, хранящемся в Resources/myimage.jpg. Как я могу динамически загрузить это изображение в объект Bitmap?

198
Pavel Bastov

Вы используете Windows Forms? Если вы добавили изображение с помощью пользовательского интерфейса "Свойства/ресурсы", вы получите доступ к изображению из сгенерированного кода, поэтому вы можете просто сделать это:

var bmp = new Bitmap(WindowsFormsApplication1.Properties.Resources.myimage);
227
Matt Hamilton

Вы можете получить ссылку на изображение следующим образом:

Image myImage = Resources.myImage;

Если вы хотите сделать копию изображения, вам нужно сделать следующее:

Bitmap bmp = new Bitmap(Resources.myImage);

Не забудьте утилизировать bmp, когда закончите. Если вы не знаете имя образа ресурса во время компиляции, вы можете использовать менеджер ресурсов:

ResourceManager rm = Resources.ResourceManager;
Bitmap myImage = (Bitmap)rm.GetObject("myImage");

Преимущество ResourceManager заключается в том, что вы можете использовать его там, где ресурсы Resources.myImage обычно находятся вне области действия, или где вы хотите динамически получать доступ к ресурсам. Кроме того, это работает для звуков, файлов конфигурации и т.д.

108
Charlie Salts

Вам нужно загрузить его из потока ресурсов.

Bitmap bmp = new Bitmap(
  System.Reflection.Assembly.GetEntryAssembly().
    GetManifestResourceStream("MyProject.Resources.myimage.png"));

Если вы хотите знать все имена ресурсов в вашей сборке, перейдите с:

string[] all = System.Reflection.Assembly.GetEntryAssembly().
  GetManifestResourceNames();

foreach (string one in all) {
    MessageBox.Show(one);
}
68
Josip Medved

Гораздо проще, чем большинство всех предложенных ответов

tslMode.Image = global::ProjectName.Properties.Resources.ImageName;
25
JDS

Лучше всего добавить их в качестве ресурсов изображений в настройках ресурсов в проекте. Затем вы можете получить изображение напрямую, выполнив Resources.myimage. Это позволит получить изображение через сгенерированное свойство C #.

Если вы просто установите изображение в качестве встроенного ресурса, вы можете получить его с помощью:

string name = "Resources.myimage.jpg"
string namespaceName = "MyCompany.MyNamespace";
string resource = namespaceName + "." + name;
Type type = typeof(MyCompany.MyNamespace.MyTypeFromSameAssemblyAsResource);
Bitmap image = new Bitmap(type.Assembly.GetManifestResourceStream(resource));

Где MyTypeFromSameAssemblyAsResource - это любой тип, который имеется в вашей сборке.

13
Hallgrim

Код, который я использую в нескольких своих проектах ... Предполагается, что вы храните изображения в ресурсе только в виде растровых изображений, а не значков

    public static Bitmap GetImageByName(string imageName)
    {
        System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
        string resourceName = asm.GetName().Name + ".Properties.Resources";
        var rm = new System.Resources.ResourceManager(resourceName, asm);
        return (Bitmap)rm.GetObject(imageName);

    }
12
Gary Kindel

С и ImageBox с именем "ImagePreview FormStrings.MyImageNames содержит обычный метод приведения строк get/set, который связан со списком типов прокрутки. Изображения имеют те же имена, что и связанные имена в списке, за исключением окончаний .bmp. Все растровые изображения перетаскиваются в resources.resx

Object rm = Properties.Resources.ResourceManager.GetObject(FormStrings.MyImageNames);
Bitmap myImage = (Bitmap)rm;
ImagePreview.Image = myImage;
5
Violator

В моем случае - я использовал Icons в моем ресурсе, но мне нужно было динамически добавлять их как Images к некоторым ToolStripMenuItem (s). Таким образом, в методе, который я создал (отсюда и приведенный ниже фрагмент кода), мне пришлось преобразовать ресурсы значков в растровые изображения, прежде чем я смог вернуть их для добавления к своему MenuItem.

string imageName = myImageNameStr;
imageName = imageName.Replace(" ", "_");
Icon myIcon = (Icon)Resources.ResourceManager.GetObject(imageName);
return myIcon.ToBitmap();

Что еще нужно знать, если ваше изображение/значок имеет пробелы ("") в имени, когда вы добавляете их в свой ресурс, VS автоматически заменит эти пробелы на "_" (s). Потому что пробелы не являются допустимым символом при именовании вашего ресурса. Вот почему я использую метод Replace() в своем ссылочном коде. Скорее всего, вы можете просто игнорировать эту строку.

5
DSmith

Используйте ниже одного. Я проверил это с помощью ячейки вида Windows.

Object rm = Properties.Resources.ResourceManager.GetObject("Resource_Image");
Bitmap myImage = (Bitmap)rm;
Image image = myImage;

Название "Resource_Image" вы можете узнать из проекта.

Под названием проекта вы можете найти Properties. Раскройте это. Там вы можете увидеть файл Resources.resx. Открой это. Примените ваше имя файла как "Resource_Image".

5
Dzero

Ответ JDS работал лучше всего. C # пример загрузки изображения:

  • Включить изображение в качестве ресурса (дерево проекта-> Ресурсы, щелкните правой кнопкой мыши, чтобы добавить нужный файл ImageName.png)
  • Встроенный ресурс (Дерево проекта-> Ресурсы-> ImageName.png, щелкните правой кнопкой мыши, чтобы выбрать свойства)
  • Формат файла .png (.bmp .jpg также должен быть в порядке)

pictureBox1.Image = ProjectName.Properties.Resources.ImageName;

Обратите внимание на следующее:

  • Файл изображения ресурса - "ImageName.png", расширение файла должно быть опущено.
  • ProjectName, возможно, может быть более адекватно понято как "Имя сборки", которое должно быть соответствующей текстовой записью на странице Project-> Properties.

Пример строки кода успешно выполняется с помощью сообщества VisualStudio 2015.

4
user3674642

Я предлагаю:

System.Reflection.Assembly thisExe;
thisExe = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file = 
    thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg");
Image yourImage = Image.FromStream(file);

От msdn: http://msdn.Microsoft.com/en-us/library/aa287676 (v = vs.71) .aspx

Использование Image.FromStream лучше, потому что вам не нужно знать формат изображения (bmp, png, ...).

4
Davide Icardi

Вы также можете сохранить bmp в переменную следующим образом:

var bmp = Resources.ImageName;

надеюсь, поможет!

3
F.joksch

Как ни странно, из ковыряния в дизайнере я нахожу гораздо более простой подход:

Изображение, кажется, доступно из .Properties.Resources.

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

(Чистая 4.0, VS2010.)

2
Loren Pechtel

Я посмотрел на код дизайнера из одного из моих проектов и заметил, что он использует эту запись

myButton.Image = global::MyProjectName.Properties.Resources.max;

где max - это имя ресурса, который я загрузил в проект.

2
Andrew Stein

Или вы можете использовать эту строку при работе с WPF или Silverlight, особенно если у вас уже есть исходная строка в разметке XAML:

(ImageSource)new ImageSourceConverter().ConvertFromString(ImagePath);

Где ImagePath что-то вроде:

string ImagePath  = "/ProjectName;component/Resource/ImageName.png";
1
TChadwick