У мене в моєму проекті зберігається зображення Resources / myimage.jpg. Як я можу динамічно завантажувати це зображення в об'єкт Bitmap?
У мене в моєму проекті зберігається зображення Resources / myimage.jpg. Як я можу динамічно завантажувати це зображення в об'єкт Bitmap?
Відповіді:
Чи використовуєте Ви форми Windows? Якщо ви додали зображення за допомогою користувальницького інтерфейсу властивостей / ресурсів, ви отримуєте доступ до зображення з генерованого коду, тож ви можете просто зробити це:
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 полягає в тому, що ви можете використовувати його там, де Resources.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);
}
typeof(this).Assembly
короткий.
typeof(this)
не працюватиме. this.GetType().Assembly
є найближчим до того, що ви сказали, але це ризиковано, оскільки він підбере спадковий суперклас, який може бути в іншому складі.
typeof(this);
не збирається . Ви отримуєтеError 1 Type expected
Шлях простіше, ніж більшість усіх запропонованих відповідей
tslMode.Image = global::ProjectName.Properties.Resources.ImageName;
Bitmap
об’єкт, а не Image
предмет.
Код, який я використовую в кількох своїх проектах ... Передбачається, що ви зберігаєте зображення в ресурсі лише як растрові карти, а не піктограми
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);
}
Найкраще - додавати їх у вигляді ресурсів зображення у налаштуваннях ресурсів у проекті. Тоді ви можете отримати зображення безпосередньо, зробивши 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 - це будь-який тип, який ви маєте у своєму складі.
Використовуйте нижче однієї. Я перевірив це в комірці перегляду Grid форми Windows.
Object rm = Properties.Resources.ResourceManager.GetObject("Resource_Image");
Bitmap myImage = (Bitmap)rm;
Image image = myImage;
Назва "Resource_Image", яку ви можете знайти в проекті.
Під назвою проекту ви можете знайти Properties
. Розгорніть. Там ви можете побачити Resources.resx
файл. Відкрий це. Застосуйте своє ім'я файлу як "Resource_Image".
З і ImageBox з назвою "ImagePreview FormStrings.MyImageNames містить звичайний метод передачі / встановлення рядків, який пов'язаний зі списком типів прокрутки. Зображення мають ті ж назви, що і пов'язані імена у списку, за винятком закінчень .bmp. Усі растрові зображення перетягуються в ресурси.resx
Object rm = Properties.Resources.ResourceManager.GetObject(FormStrings.MyImageNames);
Bitmap myImage = (Bitmap)rm;
ImagePreview.Image = myImage;
У моєму випадку - я використовував Ікони на своєму ресурсі, але мені потрібно було динамічно додавати їх у вигляді зображень до деяких зображеньToolStripMenuItem
. Тож у створеному нами методі (звідки походить фрагмент коду нижче) мені довелося перетворити ресурси значків у растрові карти, перш ніж я міг повернути їх для додавання до моїхMenuItem
.
string imageName = myImageNameStr;
imageName = imageName.Replace(" ", "_");
Icon myIcon = (Icon)Resources.ResourceManager.GetObject(imageName);
return myIcon.ToBitmap();
Ще щось, про що слід пам’ятати, якщо ваше зображення / іконка має пробіли («») у своєму імені, коли ви додаєте їх у свій ресурс, VS автоматично замінить ці пробіли на «_» (s). Тому що пробіли не є дійсним символом під час іменування вашого ресурсу. Ось чому я використовую 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=vs.71).aspx
Використовувати Image.FromStream краще, тому що вам не потрібно знати формат зображення (bmp, png, ...).
Відповідь JDS спрацювала найкраще. C # приклад завантаження зображення:
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
Зверніть увагу на наступне:
Приклад рядка коду успішно запускається за допомогою спільноти VisualStudio 2015.
Як не дивно, коли тикаючи на дизайнера, я знаходжу те, що здається набагато простішим підходом:
Здається, зображення доступне з .Properties.Resources.
Я просто використовую зображення, оскільки все, що мене цікавить, - це вставлення його в елемент керування із зображенням на ньому.
(Чистий 4.0, VS2010.)
Я переглянув код дизайнера одного з моїх проектів і помітив, що він використовує цю позначення
myButton.Image = global::MyProjectName.Properties.Resources.max;
де max - назва ресурсу, який я завантажив у проект.
Або ви можете використовувати цей рядок під час роботи з 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);