У меня есть изображение в моем проекте, хранящемся в Resources/myimage.jpg. Как я могу динамически загружать это изображение в объект Bitmap?
Загрузить изображение из области ресурсов проекта в С#
Ответ 1
Используете ли вы Windows Forms? Если вы добавили изображение, используя интерфейс свойств/ресурсов, вы получаете доступ к изображению из сгенерированного кода, поэтому вы можете просто сделать это:
var bmp = new Bitmap(WindowsFormsApplication1.Properties.Resources.myimage);
Ответ 2
Вы можете получить ссылку на изображение следующим образом:
Image myImage = Resources.myImage;
Если вы хотите сделать копию изображения, вам необходимо сделать следующее:
Bitmap bmp = new Bitmap(Resources.myImage);
Не забудьте избавиться от bmp, когда закончите с ним. Если вы не знаете имя образа ресурса во время компиляции, вы можете использовать диспетчер ресурсов:
ResourceManager rm = Resources.ResourceManager;
Bitmap myImage = (Bitmap)rm.GetObject("myImage");
Преимущество ResourceManager заключается в том, что вы можете использовать его там, где Resource.myImage обычно выходит за пределы области действия или где вы хотите динамически обращаться к ресурсам. Кроме того, это работает для звуков, конфигурационных файлов и т.д.
Ответ 3
Вам нужно загрузить его из потока ресурсов.
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);
}
Ответ 4
Проще, чем большинство всех предложенных ответов
tslMode.Image = global::ProjectName.Properties.Resources.ImageName;
Ответ 5
Лучше всего добавить их в качестве ресурсов изображения в настройках ресурсов в проекте. Затем вы можете получить изображение напрямую, выполнив Resource.myimage. Это позволит получить изображение через сгенерированное свойство С#.
Если вы просто установите изображение как Embedded Resource, вы можете получить его с помощью:
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 - это любой тип, который у вас есть в вашей сборке.
Ответ 6
Код, который я использую в нескольких моих проектах... Предполагается, что вы храните изображения в ресурсе только в виде растровых изображений, а не значков
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);
}
Ответ 7
С и ImageBox с именем "ImagePreview FormStrings.MyImageNames содержит регулярный метод get/set string cast, который связан с списком типов прокрутки. Изображения имеют те же имена, что и связанные имена в списке, за исключением окончаний .bmp. Все растровые изображения перетаскиваются в resource.resx
Object rm = Properties.Resources.ResourceManager.GetObject(FormStrings.MyImageNames);
Bitmap myImage = (Bitmap)rm;
ImagePreview.Image = myImage;
Ответ 8
В моем случае - я использовал Иконки в моем ресурсе, но мне нужно было добавить их динамически как Картинки к некоторым ToolStripMenuItem
(s). Таким образом, в методе, который я создал (откуда и происходит фрагмент кода ниже), мне пришлось преобразовать ресурсы значков в растровые изображения, прежде чем я смог вернуть их для добавления в мой MenuItem
.
string imageName = myImageNameStr;
imageName = imageName.Replace(" ", "_");
Icon myIcon = (Icon)Resources.ResourceManager.GetObject(imageName);
return myIcon.ToBitmap();
Что-то еще нужно знать, если ваш образ/значок имеет пробелы ( ") в своем имени при добавлении их на ваш ресурс, VS автоматически заменит эти пробелы на" _" (ы). Потому что пробелы не являются допустимым символом при именовании вашего ресурса. Вот почему я использую метод Replace()
в моем ссылочном коде. Вероятно, вы просто проигнорируете эту строку.
Ответ 9
Используйте ниже единицы. Я проверил это с помощью ячейки представления формы Windows.
Object rm = Properties.Resources.ResourceManager.GetObject("Resource_Image");
Bitmap myImage = (Bitmap)rm;
Image image = myImage;
Название "Resource_Image" вы можете найти в проекте.
Под названием проекта вы можете найти " Properties
. Разверните его. Там вы можете увидеть файл Resources.resx
. Открой это. Примените ваше имя файла как "Resource_Image".
Ответ 10
Я предлагаю:
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,...).
Ответ 11
Ответ JDS лучше всего работал. Пример загрузки С#:
- Включите изображение как ресурс (Дерево проекта- > Ресурсы, щелкните правой кнопкой мыши, чтобы добавить желаемый файл ImageName.png)
- Встроенный ресурс (Дерево проекта- > Ресурсы- > ImageName.png, свойства выбора правой кнопки мыши)
- .png формат файла (.bmp.jpg также должен быть в порядке)
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
Обратите внимание на следующее:
- Файл образа ресурса - "ImageName.png", расширение файла должно быть опущено.
- Имя_проекта может быть более адекватно понято как "Имя сборки", которое должно быть соответствующей текстовой записью на странице "Проект- > Свойства".
Примерная строка кода успешно выполняется с использованием сообщества VisualStudio 2015.
Ответ 12
Вы также можете сохранить bmp в var следующим образом:
var bmp = Resources.ImageName;
надеюсь, что это поможет!
Ответ 13
Как ни странно, от того, что ты ткнул в конструктор, я нахожу то, что кажется гораздо более простым:
Изображение похожее доступно из .Properties.Resources.
Я просто использую изображение, поскольку все, что меня интересует, вставляет его в элемент управления с изображением на нем.
(Net 4.0, VS2010.)
Ответ 14
Я посмотрел код дизайнера из одного из моих проектов и заметил, что он использовал эту нотацию
myButton.Image = global::MyProjectName.Properties.Resources.max;
где max - это имя ресурса, загруженного в проект.
Ответ 15
Или вы можете использовать эту строку при работе с WPF или Silverlight, особенно там, где у вас есть исходная строка уже в разметке XAML:
(ImageSource)new ImageSourceConverter().ConvertFromString(ImagePath);
Где ImagePath выглядит примерно так:
string ImagePath = "/ProjectName;component/Resource/ImageName.png";
Ответ 16
Щелкните правой кнопкой мыши по проекту. Перейдите на вкладку Ресурсы. Выберите существующую опцию и добавьте изображение.
Теперь доступ в коде
Image = Properties.Resources.ImageName
Ответ 17
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);