none
Donde se guardan las imagenes que utiliza la aplicacion

    Question

  • Hola a todos,

    El caso es que ya estoy acabando mi aplicación y ayer hice mi primer instalable para ver si funcionaba bien en otro eqipo.
    La aplicacion tiene  una barra de herramientas con varios botones(cada uno con un icono) y cuando se pulsa sobre alguno de ellos pues se crea un picturebox al que se le carga una imagen dependiendo del boton que se haya pulsado.
    La aplicacion se instala correctamente en otro equipo pero el fallo biene cuando se pulsa algun boton de la barra de herramientas y el programa no encuentra la imagen que tiene que cargar, ya que  la imagen la cargo en el programa con la ruta que tienen las imagenes en mi equipo, por ejemplo

    @"C:\Documents and Settings\Administrator\Mis documentos\imagen.gif"

     


    El instalable lo creo con ayuda del asistente, la cuestion es que cuando creo el instalable el asistente me pregunta si quiero añadir archivos y los añado y me salen en la carpeta donde se instala la aplicacion, pero claro al tener la ruta de las imagenes en mi equipo pues da fallo.

    Mi pregunta seria como se hace para gestionar el tema de las imagenes que utiliza mi aplicacion sin que los equipos donde vaya a instalar mi aplicacion tenga que tener dichas imagenes.

    otro detalle que no entiendo es que las imagenes que les cargo a los botones de la barra de herramientas las cargo como recurso local y son las mismas(tienen la misma ruta) que las que se van cargando el los picturebox que se van creando en tiempo de ejecucion y sin embargo las imagenes de estos botones si se ven al ejecutar la aplicacion.
    ¿Que diferencia hay entre recurso local y recurso del proyecto?

    Espero no haberme explicado demasiado mal, muchas gracias a todos.

    Saludos

    Sunday, October 25, 2009 9:35 AM

Answers

  • hola

    El path de las imagenes puede trabajarlo de forma relativa a donde se encuentre tu aplicación corriendo si utilizas.


    o sea si tu ruta la armas de esta forma

    string path = Path.Combine(Application.StartupPath, "Imagenes\\imagen.gif");

    este solito usar el path donde este el .exe, mas la carpeta donde estan todas la imagenes contenidas, mas el nombre de la imagen especifica.



    Recuerda que las  imagenes que esten en un archivo de recurso .resx no hace falta que las lleven en tu instalador, ni ponerlas en el cliente, ya que al momento de crear el instaladro o sea compilar estas se agregan como parte del assembly.

    O sea no hace uso de un path para referenciarlas, sino que usas los métodos del recurso para obtener la imagen


    Adjunto una lista de link que hablan sobre el tema de recursos, seguro te aporten mas info sobre el tema:
    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Sunday, October 25, 2009 2:57 PM
  • Amigo, el problema radica en quer no se debe dejar ligado a un archivo ya que si este falta luego tienes estos problemas, bueno voy a tratar de darte varias soluciones posibles.

    Primero que nada si vas a trabajar con archivos de imagen lo ideal es que esten en la misma carpeta de la aplicación.

    Bueno si las dejas en una carpeta del sistema, al llamarlas no pongas la ruta completa, crea la ruta con la funcion que devuelve la ruta de la carpeta del sistema más la ruta al archivo que necesitas, de esa manera el sistema se encarga de darte la dirección correcta. Ejemplo.

    @"C:\Documents and Settings\Administrator\Mis documentos\imagen.gif"


    Sería: Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "imagen.gif";

    Otra opcion es crear una carpeta en el directorio c con todas las imagenes y ligarlas ahi, o poner esta carpeta en la acrpeta de tu proyecto en el directorio bin, ahi utilizas el Application.ExecutablePath para que te de la ruta al directorio de la aplicación.

    Sea cual sea de ellas que utilizes al momento de hacer el instalador en el editor tienes que poner la opcion de añadir archivos y adjunta la carpeta con las imagenes y donde se van a ubicar.

    La otra opción es adjuntar las imagenes como recurso,  de esa manera ya quedan incrustadas al proyecto y solo debes llamarla, pero esto aumenta el tamaño del ejecutable.

    Revisa el tema: Agregar y editar recursos (Visual C#)

    Suerte.
    Sunday, October 25, 2009 3:22 PM

All replies

  • hola

    El path de las imagenes puede trabajarlo de forma relativa a donde se encuentre tu aplicación corriendo si utilizas.


    o sea si tu ruta la armas de esta forma

    string path = Path.Combine(Application.StartupPath, "Imagenes\\imagen.gif");

    este solito usar el path donde este el .exe, mas la carpeta donde estan todas la imagenes contenidas, mas el nombre de la imagen especifica.



    Recuerda que las  imagenes que esten en un archivo de recurso .resx no hace falta que las lleven en tu instalador, ni ponerlas en el cliente, ya que al momento de crear el instaladro o sea compilar estas se agregan como parte del assembly.

    O sea no hace uso de un path para referenciarlas, sino que usas los métodos del recurso para obtener la imagen


    Adjunto una lista de link que hablan sobre el tema de recursos, seguro te aporten mas info sobre el tema:
    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Sunday, October 25, 2009 2:57 PM
  • Amigo, el problema radica en quer no se debe dejar ligado a un archivo ya que si este falta luego tienes estos problemas, bueno voy a tratar de darte varias soluciones posibles.

    Primero que nada si vas a trabajar con archivos de imagen lo ideal es que esten en la misma carpeta de la aplicación.

    Bueno si las dejas en una carpeta del sistema, al llamarlas no pongas la ruta completa, crea la ruta con la funcion que devuelve la ruta de la carpeta del sistema más la ruta al archivo que necesitas, de esa manera el sistema se encarga de darte la dirección correcta. Ejemplo.

    @"C:\Documents and Settings\Administrator\Mis documentos\imagen.gif"


    Sería: Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "imagen.gif";

    Otra opcion es crear una carpeta en el directorio c con todas las imagenes y ligarlas ahi, o poner esta carpeta en la acrpeta de tu proyecto en el directorio bin, ahi utilizas el Application.ExecutablePath para que te de la ruta al directorio de la aplicación.

    Sea cual sea de ellas que utilizes al momento de hacer el instalador en el editor tienes que poner la opcion de añadir archivos y adjunta la carpeta con las imagenes y donde se van a ubicar.

    La otra opción es adjuntar las imagenes como recurso,  de esa manera ya quedan incrustadas al proyecto y solo debes llamarla, pero esto aumenta el tamaño del ejecutable.

    Revisa el tema: Agregar y editar recursos (Visual C#)

    Suerte.
    Sunday, October 25, 2009 3:22 PM

  • Muchas gracias a los dos, pero me temo que sigo sin resolver el problema.

    Primero he provado a copiar en bin --> Debug una carpeta "imagenes" con todas las imagenes que utilizo y acceder a ellas mediante el metodo ExecutablePath de la siguiente forma:

    imagen =

    new Bitmap(Path.Combine(Application.StartupPath, @"imagenes\imagen.gif"));

    Esto me funciona bien en mi equipo pero al crear el instalable(en el cual añado los archivos de imagen cuando me lo pregunta el asistente) e instalarlo en otro equipo me aparecen las imagenes dentro de la misma carpeta del ejecutable pero al ejecutarlo me da el mismo fallo de antes y donde van las fotos aparece un rectangulo blanco con una cruz roja.


    Despues he optado por añadir las imagenes directamente como recursos. Por lo que he podido ver en la ayuda de MSND he pinchado con el boton secundario en el nodo propiedades le he dado a abrir y en la pestaña de recursos le he dado a agregar recurso y he añadido una imagen tipo .gif y se me abre el paint en donde copio la imagen que me hace falta.¿hay alguna otra forma de agragar la imagen directamente sin utilizar el paint? 

    Despues accedo a ella mediante:

    imagen =

    new Bitmap(nombre del proyecto.Properties.Resources.nombre_imagen);

     

    Hasta aqui creo que lo he hecho bien(¿no?) ya que me funciona, lo que pasa es que las imagenes que utilizo tienen el fondo transparente(requisito indispensable) y cuando las pongo como recurso el fondo sale blanco, por lo que ni he intentado llevarme la aplicacion a otro equipo ya que sin fondo transparente no me sirve.

    Ya no se que hacer, si teneis alguna idea será bien recibida, estoy desesperado

    Muchas gracias y saludos

     


    Monday, October 26, 2009 12:01 PM
  • Amigo, lo importatnte es que seguimos avanzando.

    Primero en el paint en la barra izquierda al final tiene la opción de hacer transparente, prueba con eso.

    Segundo, pon el metodo de carga de imagen en un try catch y muestra la excepcion co el mensaje para tener idea de que ocurre, y lo pones aqui.

    Recuerda que de acuerdo a lo que estás utilizando, las imagenes deben estar dentro de una carpeta llamada imagenes en la carpeta del ejecutable, si no usas esa carpeta entonces la ruta quedaría así:

    imagen =

    new Bitmap ( Path .Combine( Application .StartupPath, @"imagen.gif" ));

    Suerte.
    Monday, October 26, 2009 2:33 PM

  • Por finnnnnn!!!!!!!!!!!!

    Al final me funciona  con:

    imagen =  new Bitmap(Path.Combine(Application.StartupPath, @"imagenes\imagen.gif"));

    lo que pasaba es que en mi aplicacion tenia las imagenes dentro de la carpeta "imagenes" que está donde el ejecutable pero al hacer el instalable te las copiaba sueltas y de ay el fallo

    muchas gracias a los dos nuevamente, con personas como vosotros se hace mucho mas llevadero este rompecabezas que es la programacion.

    Saludos

    Monday, October 26, 2009 2:40 PM