Вы используете Windows Forms? Если вы добавили изображение с помощью пользовательского интерфейса «Свойства / ресурсы», вы получите доступ к изображению из сгенерированного кода, поэтому вы можете просто сделать это:
var bmp =newBitmap(WindowsFormsApplication1.Properties.Resources.myimage);
Нет, он добавляется в виде простого файла в папку «Ресурсы».
Павел Бастов
9
Ах хорошо. В этом случае, я думаю, у @ Hallgrim есть ответ для вас, используя потоки ресурсов. Если вы находитесь с помощью Windows Forms Я хотел бы призвать вас , чтобы удалить изображение и повторно добавить его из пользовательского интерфейса - гораздо проще.
Мэтт Гамильтон
114
Вы можете получить ссылку на изображение следующим образом:
Image myImage =Resources.myImage;
Если вы хотите сделать копию изображения, вам нужно сделать следующее:
Bitmap bmp =newBitmap(Resources.myImage);
Не забудьте утилизировать bmp, когда закончите. Если вы не знаете имя образа ресурса во время компиляции, вы можете использовать менеджер ресурсов:
Преимущество ResourceManager заключается в том, что вы можете использовать его там, где ресурсы Resources.myImage обычно находятся вне области видимости или где вы хотите динамически получать доступ к ресурсам. Кроме того, это работает для звуков, файлов конфигурации и т. Д.
Я пытаюсь привязать объект ресурса к моей сетке данных, но он не отображается с использованием вашего метода. Столбец изображения сетки данных является шаблонным.
Вам не нужно использовать рефлексию - это кажется слишком сложным, учитывая более простые доступные методы.
Чарли Солтс
Это решение не работает в C # / Windows Phone. NETCF --GetManifestResourceNames () возвращает только одно имя, имя модуля Assembly-DLL. В манифесте доступен только один ресурс - потоковый объект модуля DLL. Без C ++ и небезопасного кода, позволяющего вам вызывать вызовы Win32 API, откровенно трудно решить эту часть памяти.
Марк Джонс
2
Вы также можете использовать typeof(this).Assemblyдля краткости.
Шри Харша Чилакапати
1
@SriHarshaChilakapati typeof(this) не будет работать. this.GetType().Assemblyявляется наиболее близким к тому, что вы сказали, но это рискованно, потому что он обнаружит унаследованный суперкласс, который может находиться в другой сборке.
Джон Гибб
2
@SriHarshaChilakapati typeof(this);не компилируется. Вы получаетеError 1 Type expected
Джон Гибб
26
Намного проще, чем большинство всех предложенных ответов
Невозможно получить доступ таким способом, если файл не является частью манифеста ресурсов, так как OP ясно заявляет, что он просто добавлен как файл.
шатается
1
Он также хотел Bitmapобъект, а не Imageобъект.
vapcguy
13
Код, который я использую в нескольких своих проектах ... Предполагается, что вы храните изображения в ресурсе только в виде растровых изображений, а не значков
Лучше всего добавить их в качестве ресурсов изображений в настройках ресурсов в проекте. Затем вы можете получить изображение напрямую, выполнив Resources.myimage. Это позволит получить изображение через сгенерированное свойство C #.
Если вы просто установите изображение в качестве встроенного ресурса, вы можете получить его с помощью:
string name ="Resources.myimage.jpg"string namespaceName ="MyCompany.MyNamespace";string resource = namespaceName +"."+ name;Type type =typeof(MyCompany.MyNamespace.MyTypeFromSameAssemblyAsResource);Bitmap image =newBitmap(type.Assembly.GetManifestResourceStream(resource));
Где MyTypeFromSameAssemblyAsResource - это любой тип, который имеется в вашей сборке.
Название «Resource_Image» вы можете узнать из проекта.
Под названием проекта вы можете найти Properties. Раскройте это. Там вы можете увидеть Resources.resxфайл. Открой это. Примените ваше имя файла как «Resource_Image».
С и ImageBox с именем "ImagePreview FormStrings.MyImageNames содержит обычный метод приведения строк get / set, который связан со списком типов прокрутки. Изображения имеют те же имена, что и связанные имена в списке, за исключением окончаний .bmp. Все растровые изображения перетаскиваются в resources.resx
В моем случае - я использовал иконки в своем ресурсе, но мне нужно было динамически добавлять их в качестве изображений для некоторых ToolStripMenuItem. Таким образом, в методе, который я создал (отсюда и приведенный ниже фрагмент кода), мне пришлось преобразовать ресурсы значков в растровые изображения, прежде чем я смог вернуть их для добавления к моему MenuItem.
Что еще нужно знать, если ваше изображение / значок имеет пробелы ("") в имени, когда вы добавляете их в свой ресурс, VS автоматически заменит эти пробелы на "_" (s). Потому что пробелы не являются допустимым символом при именовании вашего ресурса. Именно поэтому я использую Replace()метод в своем ссылочном коде. Скорее всего, вы можете просто игнорировать эту строку.
Файл изображения ресурса - «ImageName.png», расширение файла должно быть опущено.
ProjectName, возможно, более адекватно понимается как «Имя сборки», которое должно быть соответствующей текстовой записью на странице Project-> Properties.
Пример строки кода успешно выполняется с помощью сообщества VisualStudio 2015.
Ответы:
Вы используете Windows Forms? Если вы добавили изображение с помощью пользовательского интерфейса «Свойства / ресурсы», вы получите доступ к изображению из сгенерированного кода, поэтому вы можете просто сделать это:
источник
Вы можете получить ссылку на изображение следующим образом:
Если вы хотите сделать копию изображения, вам нужно сделать следующее:
Не забудьте утилизировать bmp, когда закончите. Если вы не знаете имя образа ресурса во время компиляции, вы можете использовать менеджер ресурсов:
Преимущество ResourceManager заключается в том, что вы можете использовать его там, где ресурсы Resources.myImage обычно находятся вне области видимости или где вы хотите динамически получать доступ к ресурсам. Кроме того, это работает для звуков, файлов конфигурации и т. Д.
источник
Вам нужно загрузить его из потока ресурсов.
Если вы хотите знать все имена ресурсов в вашей сборке, перейдите с:
источник
typeof(this).Assembly
для краткости.typeof(this)
не будет работать.this.GetType().Assembly
является наиболее близким к тому, что вы сказали, но это рискованно, потому что он обнаружит унаследованный суперкласс, который может находиться в другой сборке.typeof(this);
не компилируется. Вы получаетеError 1 Type expected
Намного проще, чем большинство всех предложенных ответов
источник
Bitmap
объект, а неImage
объект.Код, который я использую в нескольких своих проектах ... Предполагается, что вы храните изображения в ресурсе только в виде растровых изображений, а не значков
источник
Лучше всего добавить их в качестве ресурсов изображений в настройках ресурсов в проекте. Затем вы можете получить изображение напрямую, выполнив Resources.myimage. Это позволит получить изображение через сгенерированное свойство C #.
Если вы просто установите изображение в качестве встроенного ресурса, вы можете получить его с помощью:
Где MyTypeFromSameAssemblyAsResource - это любой тип, который имеется в вашей сборке.
источник
Используйте ниже одного. Я проверил это с помощью ячейки вида Windows.
Название «Resource_Image» вы можете узнать из проекта.
Под названием проекта вы можете найти
Properties
. Раскройте это. Там вы можете увидетьResources.resx
файл. Открой это. Примените ваше имя файла как «Resource_Image».источник
С и ImageBox с именем "ImagePreview FormStrings.MyImageNames содержит обычный метод приведения строк get / set, который связан со списком типов прокрутки. Изображения имеют те же имена, что и связанные имена в списке, за исключением окончаний .bmp. Все растровые изображения перетаскиваются в resources.resx
источник
В моем случае - я использовал иконки в своем ресурсе, но мне нужно было динамически добавлять их в качестве изображений для некоторых
ToolStripMenuItem
. Таким образом, в методе, который я создал (отсюда и приведенный ниже фрагмент кода), мне пришлось преобразовать ресурсы значков в растровые изображения, прежде чем я смог вернуть их для добавления к моемуMenuItem
.Что еще нужно знать, если ваше изображение / значок имеет пробелы ("") в имени, когда вы добавляете их в свой ресурс, VS автоматически заменит эти пробелы на "_" (s). Потому что пробелы не являются допустимым символом при именовании вашего ресурса. Именно поэтому я использую
Replace()
метод в своем ссылочном коде. Скорее всего, вы можете просто игнорировать эту строку.источник
Я предлагаю:
От 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.
источник
Вы также можете сохранить bmp в переменную следующим образом:
Надеюсь, поможет!
источник
Как ни странно, из ковыряния в конструкторе я нахожу гораздо более простой подход:
Изображение, кажется, доступно из .Properties.Resources.
Я просто использую изображение, так как все, что меня интересует, это вставить его в элемент управления с изображением на нем.
(Чистая 4.0, VS2010.)
источник
Я посмотрел на код конструктора из одного из моих проектов и заметил, что он использует эту запись
где max - это имя ресурса, который я загрузил в проект.
источник
Или вы можете использовать эту строку при работе с WPF или Silverlight, особенно если у вас уже есть исходная строка в разметке XAML:
Где ImagePath что-то вроде:
источник
источник