¿Estás utilizando formularios Windows Forms? Si ha agregado la imagen usando la interfaz de usuario de Propiedades / Recursos, obtiene acceso a la imagen desde el código generado, por lo que simplemente puede hacer esto:
var bmp =newBitmap(WindowsFormsApplication1.Properties.Resources.myimage);
No, se agrega como un archivo simple a la carpeta Recursos.
Pavel Bastov
99
Ah ok En ese caso, creo que @ Hallgrim tiene la respuesta para ti usando flujos de recursos. Si está utilizando Windows Forms, le insto a que elimine la imagen y la vuelva a agregar desde la interfaz de usuario, mucho más fácil de esa manera.
Matt Hamilton
114
Puede obtener una referencia a la imagen de la siguiente manera:
Image myImage =Resources.myImage;
Si desea hacer una copia de la imagen, deberá hacer lo siguiente:
Bitmap bmp =newBitmap(Resources.myImage);
No olvide deshacerse de bmp cuando haya terminado con él. Si no conoce el nombre de la imagen del recurso en tiempo de compilación, puede usar un administrador de recursos:
El beneficio del ResourceManager es que puede usarlo donde Resources.myImage normalmente estaría fuera del alcance, o donde desea acceder dinámicamente a los recursos. Además, esto funciona para sonidos, archivos de configuración, etc.
Estoy tratando de vincular el objeto de recurso a mi cuadrícula de datos pero no aparece usando su método. La columna de la imagen de la cuadrícula de datos está en plantilla.
No debería necesitar usar la reflexión; esto parece demasiado complicado dados los métodos más simples disponibles.
Charlie Sales
Esta solución no funciona en C # / Windows Phone .NETCF --GetManifestResourceNames () solo devuelve un solo nombre, el del módulo de ensamblaje-DLL. Solo hay un recurso disponible en el manifiesto: el blob de flujo del módulo DLL. Sin C ++ y el código inseguro que le permite llamar a las llamadas a la API de Win32, francamente es un verdadero problema trabajar con esta porción de memoria.
Mark Jones
2
También puedes usar typeof(this).Assemblypara abreviar.
Sri Harsha Chilakapati
1
@SriHarshaChilakapati typeof(this)no funcionará. this.GetType().Assemblyes lo más cercano a lo que dijo, pero es arriesgado porque recogerá una superclase heredada que puede estar en un ensamblaje diferente.
John Gibb
2
@SriHarshaChilakapati typeof(this);no compila. Usted obtieneError 1 Type expected
John Gibb
26
Mucho más fácil que la mayoría de las respuestas propuestas
No se puede acceder de esa manera si el archivo no es parte del manifiesto de recursos, ya que el OP indica claramente que solo se agrega como un archivo.
tambalea el
1
También quería un Bitmapobjeto, no un Imageobjeto.
vapcguy
13
Código que uso en varios de mis proyectos ... Asume que almacena imágenes en recursos solo como mapas de bits, no íconos
Lo mejor es agregarlos como Recursos de imagen en la configuración de Recursos en el Proyecto. Luego puede obtener la imagen directamente haciendo Resources.myimage. Esto obtendrá la imagen a través de una propiedad C # generada.
Si solo configura la imagen como recurso integrado, puede obtenerla con:
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));
Donde MyTypeFromSameAssemblyAsResource es cualquier tipo que tenga en su ensamblado.
Nombre de "Resource_Image", que puedes encontrar en el proyecto.
Debajo del nombre del proyecto, puedes encontrar Properties. Expandelo. Allí puedes ver el Resources.resxarchivo. Abrelo. Aplique su nombre de archivo como "Resource_Image".
Con y ImageBox llamado "ImagePreview FormStrings.MyImageNames contiene un método regular de conversión de cadena get / set, que están vinculados a una lista de tipos de cuadro de desplazamiento. Las imágenes tienen los mismos nombres que los nombres vinculados en la lista, excepto las terminaciones .bmp. Todos los mapas de bits se arrastran a los recursos.resx
En mi caso, estaba usando iconos en mi recurso, pero necesitaba agregarlos dinámicamente como imágenes a algunos ToolStripMenuItem. Entonces, en el método que creé (que es de donde proviene el fragmento de código a continuación), tuve que convertir los recursos del icono en mapas de bits antes de poder devolverlos para agregarlos a mi MenuItem.
Algo más a tener en cuenta, si su imagen / icono tiene espacios ("") en su nombre cuando los agrega a su recurso, VS reemplazará automáticamente esos espacios con "_" (s). Porque, los espacios no son un carácter válido al nombrar su recurso. Es por eso que estoy usando el Replace()método en mi código referenciado. Probablemente puedas ignorar esa línea.
El archivo de imagen del recurso es "ImageName.png", la extensión del archivo debe omitirse.
ProjectName puede entenderse más adecuadamente como "Nombre de ensamblado", que debe ser la entrada de texto respectiva en la página Proyecto-> Propiedades.
La línea de código de ejemplo se ejecuta correctamente con VisualStudio 2015 Community.
Respuestas:
¿Estás utilizando formularios Windows Forms? Si ha agregado la imagen usando la interfaz de usuario de Propiedades / Recursos, obtiene acceso a la imagen desde el código generado, por lo que simplemente puede hacer esto:
fuente
Puede obtener una referencia a la imagen de la siguiente manera:
Si desea hacer una copia de la imagen, deberá hacer lo siguiente:
No olvide deshacerse de bmp cuando haya terminado con él. Si no conoce el nombre de la imagen del recurso en tiempo de compilación, puede usar un administrador de recursos:
El beneficio del ResourceManager es que puede usarlo donde Resources.myImage normalmente estaría fuera del alcance, o donde desea acceder dinámicamente a los recursos. Además, esto funciona para sonidos, archivos de configuración, etc.
fuente
Necesita cargarlo desde la secuencia de recursos.
Si desea conocer todos los nombres de recursos en su ensamblaje, vaya con:
fuente
typeof(this).Assembly
para abreviar.typeof(this)
no funcionará.this.GetType().Assembly
es lo más cercano a lo que dijo, pero es arriesgado porque recogerá una superclase heredada que puede estar en un ensamblaje diferente.typeof(this);
no compila. Usted obtieneError 1 Type expected
Mucho más fácil que la mayoría de las respuestas propuestas
fuente
Bitmap
objeto, no unImage
objeto.Código que uso en varios de mis proyectos ... Asume que almacena imágenes en recursos solo como mapas de bits, no íconos
fuente
Lo mejor es agregarlos como Recursos de imagen en la configuración de Recursos en el Proyecto. Luego puede obtener la imagen directamente haciendo Resources.myimage. Esto obtendrá la imagen a través de una propiedad C # generada.
Si solo configura la imagen como recurso integrado, puede obtenerla con:
Donde MyTypeFromSameAssemblyAsResource es cualquier tipo que tenga en su ensamblado.
fuente
Use debajo de uno. He probado esto con la celda de vista de cuadrícula del formulario de Windows.
Nombre de "Resource_Image", que puedes encontrar en el proyecto.
Debajo del nombre del proyecto, puedes encontrar
Properties
. Expandelo. Allí puedes ver elResources.resx
archivo. Abrelo. Aplique su nombre de archivo como "Resource_Image".fuente
Con y ImageBox llamado "ImagePreview FormStrings.MyImageNames contiene un método regular de conversión de cadena get / set, que están vinculados a una lista de tipos de cuadro de desplazamiento. Las imágenes tienen los mismos nombres que los nombres vinculados en la lista, excepto las terminaciones .bmp. Todos los mapas de bits se arrastran a los recursos.resx
fuente
En mi caso, estaba usando iconos en mi recurso, pero necesitaba agregarlos dinámicamente como imágenes a algunos
ToolStripMenuItem
. Entonces, en el método que creé (que es de donde proviene el fragmento de código a continuación), tuve que convertir los recursos del icono en mapas de bits antes de poder devolverlos para agregarlos a miMenuItem
.Algo más a tener en cuenta, si su imagen / icono tiene espacios ("") en su nombre cuando los agrega a su recurso, VS reemplazará automáticamente esos espacios con "_" (s). Porque, los espacios no son un carácter válido al nombrar su recurso. Es por eso que estoy usando el
Replace()
método en mi código referenciado. Probablemente puedas ignorar esa línea.fuente
Yo sugiero:
Desde msdn: http://msdn.microsoft.com/en-us/library/aa287676(v=vs.71).aspx
Usar Image.FromStream es mejor porque no necesita saber el formato de la imagen (bmp, png, ...).
fuente
La respuesta de JDS funcionó mejor. C # ejemplo cargando imagen:
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
Tenga en cuenta lo siguiente:
La línea de código de ejemplo se ejecuta correctamente con VisualStudio 2015 Community.
fuente
También puede guardar el bmp en una variable como esta:
¡Espero eso ayude!
fuente
Por extraño que parezca, al hurgar en el diseñador, encuentro lo que parece ser un enfoque mucho más simple:
La imagen parece estar disponible en .Properties.Resources.
Simplemente estoy usando una imagen, ya que todo lo que me interesa es pegarla en un control con una imagen en ella.
(Neto 4.0, VS2010.)
fuente
Miré el código del diseñador de uno de mis proyectos y noté que usaba esta notación
donde max es el nombre del recurso que cargué en el proyecto.
fuente
O podría usar esta línea cuando trabaje con WPF o Silverlight, especialmente cuando ya tiene la cadena de origen en el marcado XAML:
Donde ImagePath es algo así como:
fuente
fuente