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

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

16 ответов


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

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

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

Image myImage = Resources.myImage;

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

Bitmap bmp = new Bitmap(Resources.myImage);

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

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

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


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

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);
}

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

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

лучше всего добавить их в качестве ресурсов изображения в настройках ресурсов в проекте. Затем вы можете получить изображение непосредственно, выполнив ресурсы.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-это любой тип, который есть в вашей сборке.


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

    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);

    }

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

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

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

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

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


Я предлагаю:

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=против 71).aspx

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


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

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

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

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

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

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


вы также можете сохранить bmp в var, как это:

var bmp = Resources.ImageName;

надеюсь, что это помогает!


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

изображение, похоже, доступно .Свойства.Ресурсы.

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

(Net 4.0, VS2010.)


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

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

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


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

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

имя "Resource_Image", вы можете найти в проекте.

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


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

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

где ImagePath-это что-то вроде:

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

this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(444, 25);
this.toolStrip1.TabIndex = 0;
this.toolStrip1.Text = "toolStrip1";
object O = global::WindowsFormsApplication1.Properties.Resources.ResourceManager.GetObject("best_robust_ghost");

ToolStripButton btn = new ToolStripButton("m1");
btn.DisplayStyle = ToolStripItemDisplayStyle.Image;
btn.Image = (Image)O;
this.toolStrip1.Items.Add(btn);