Principales respuestas
Cargar una imagen desde los recursos de la aplicación Visual Basic 2010 (WPF)

Pregunta
-
Hola, necesito cargar mediante código [en Visual Basic 2010 (WPF)] (es decir; en tiempo de ejecución) en una imágen ya añadida: Image1, utilizando Image1.Source = ?? necesito cargar imágenes desde los recursos, las imágenes en los recursos están añadidos en Resources (según la vista de árbol) yo los añadí en Recursos>Imágenes, he probado de todo tipo de código y no consigo que funcione, por favor ayúdenme, muchas gracias y saludos.
Respuestas
-
Hola David.
No se que tipo de recursos quieres usar, de modo que te dejo 2 de los que creo que pueden ser:
El primero consiste en añadir una imagen dentro del proyecto y establecer la accion de compilacion en 'Resource' de modo que la imagen se agrega como recurso en el ejecutable final.
Si este es el caso, puedes hacer algo asi:
' BLOQUE DE CODIGO PARA CARGAR UNA IMAGEN DESDE UNA CARPETA DEL PROYECTO, ESTABLECIENDOLA COMO RECURSO EN ACCION DE COMPILACION ' opcion con la URL absoluta Dim uri As Uri = New Uri("pack://application:,,,/NombreProyecto-ensamblado;component/carpeta/imagen.jpg") ' opcion con la URL relativa Dim uri As Uri = New Uri("/carpeta/imagen.jpg", UriKind.Relative) Image1.Source = New BitmapImage(Uri)
Y con esto ya estaria cargada, este modo es el mejor integrado con WPF y su sistema de recursos y diccionarios.
Por otro lado, es posible que hables de los recursos .resx que se siguen manteniendo en WPF, pero en el caso de las imagenes no es tan sencilla su obtencion.
Si tu imagen esta en uno de estos archivos de recursos, tienes que obtener su handle y usarlo para crear el bitmap haciendo uso del GDI de windows.
De modo que puedes hacer algo asi:
' BLOQUE DE CODIGO PARA CARGAR UNA IMAGEN DESDE UN ARCHIVO DE RECURSOS 'RESX' Dim handle As IntPtr Try ' obtener de un archivo de recursos '.resx' handle = My.Resources.Resource1.NombreImagen.GetHbitmap() Image1.Source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()) Catch ex As Exception Finally DeleteObject(handle) End Try
OJO, como haces uso de un handle del GDI de windows, debes de liberarlo explicitamente, por ello he añadido en la clausula Finally el metodo 'DeleteObject', que es una llamada a la funcion del GDI para liberar el recurso y la puedes definir asi:
<System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")> _ Private Shared Function DeleteObject(ByVal hObject As IntPtr) As Boolean End Function
Bueno, supongo que alguno de estos 2 metodos te serviran, ya comentaras como te va
Saludos
David González
MCP, MCTS
Visita mi Blog en: http://www.dgzornoza.com/- Propuesto como respuesta Antonio Lobo lunes, 23 de mayo de 2011 21:55
- Marcado como respuesta David-RR91 martes, 24 de mayo de 2011 7:28
Todas las respuestas
-
Hola que tal aqui te dejo un ejemplo de como podrias utilizar tu imagen de los recursos
Image finalImage = new Image();finalImage.Width = 80;
BitmapImage logo = new BitmapImage();
logo.BeginInit();
logo.UriSource = new Uri("pack://application:,,,/ApplicationName;component/Resources/logo.png");
logo.EndInit();finalImage.Source = logo;
Saludos, cualquier cosa estamos a la orden!
-
Hola David.
No se que tipo de recursos quieres usar, de modo que te dejo 2 de los que creo que pueden ser:
El primero consiste en añadir una imagen dentro del proyecto y establecer la accion de compilacion en 'Resource' de modo que la imagen se agrega como recurso en el ejecutable final.
Si este es el caso, puedes hacer algo asi:
' BLOQUE DE CODIGO PARA CARGAR UNA IMAGEN DESDE UNA CARPETA DEL PROYECTO, ESTABLECIENDOLA COMO RECURSO EN ACCION DE COMPILACION ' opcion con la URL absoluta Dim uri As Uri = New Uri("pack://application:,,,/NombreProyecto-ensamblado;component/carpeta/imagen.jpg") ' opcion con la URL relativa Dim uri As Uri = New Uri("/carpeta/imagen.jpg", UriKind.Relative) Image1.Source = New BitmapImage(Uri)
Y con esto ya estaria cargada, este modo es el mejor integrado con WPF y su sistema de recursos y diccionarios.
Por otro lado, es posible que hables de los recursos .resx que se siguen manteniendo en WPF, pero en el caso de las imagenes no es tan sencilla su obtencion.
Si tu imagen esta en uno de estos archivos de recursos, tienes que obtener su handle y usarlo para crear el bitmap haciendo uso del GDI de windows.
De modo que puedes hacer algo asi:
' BLOQUE DE CODIGO PARA CARGAR UNA IMAGEN DESDE UN ARCHIVO DE RECURSOS 'RESX' Dim handle As IntPtr Try ' obtener de un archivo de recursos '.resx' handle = My.Resources.Resource1.NombreImagen.GetHbitmap() Image1.Source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()) Catch ex As Exception Finally DeleteObject(handle) End Try
OJO, como haces uso de un handle del GDI de windows, debes de liberarlo explicitamente, por ello he añadido en la clausula Finally el metodo 'DeleteObject', que es una llamada a la funcion del GDI para liberar el recurso y la puedes definir asi:
<System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")> _ Private Shared Function DeleteObject(ByVal hObject As IntPtr) As Boolean End Function
Bueno, supongo que alguno de estos 2 metodos te serviran, ya comentaras como te va
Saludos
David González
MCP, MCTS
Visita mi Blog en: http://www.dgzornoza.com/- Propuesto como respuesta Antonio Lobo lunes, 23 de mayo de 2011 21:55
- Marcado como respuesta David-RR91 martes, 24 de mayo de 2011 7:28
-