Guardar cambios en Imagen

03/06/2005 - 21:30 por Kone | Informe spam
Hola buenas, resulta que abro una imagen. Hago cambios en ella, y al guardar
obtengo la excepcion: "Error genérico en GDI+".
La imagen la guardo con: Image.Save(this.Text,
(Image.FromFile(this.Text)).RawFormat)

this.Text pues contiene el titulo de la ventana que es la ruta de la imagen
que abro. Sin embargo uso: Image.Save(@"c:\mis imagenes\imagen.jpg",
(Image.FromFile(this.Text)).RawFormat) por ejemplo, si funciona.

Alguna idea?

saludos y gracias

Preguntas similare

Leer las respuestas

#1 Julio Casal
04/06/2005 - 14:40 | Informe spam
Qué tal Kone. Haz verificado si es que la ruta que tienes en el textbox
incluye el @ al principio?

Saludos.

Julio Casal
Developer Senior .Net
MCP
Angel Intelligent


"Kone" wrote:

Hola buenas, resulta que abro una imagen. Hago cambios en ella, y al guardar
obtengo la excepcion: "Error genérico en GDI+".
La imagen la guardo con: Image.Save(this.Text,
(Image.FromFile(this.Text)).RawFormat)

this.Text pues contiene el titulo de la ventana que es la ruta de la imagen
que abro. Sin embargo uso: Image.Save(@"c:\mis imagenes\imagen.jpg",
(Image.FromFile(this.Text)).RawFormat) por ejemplo, si funciona.

Alguna idea?

saludos y gracias



Respuesta Responder a este mensaje
#2 Tristan
04/06/2005 - 17:08 | Informe spam
No comprendo de que forma estás guardando la imagen ¿para que todo ese lío?
No necesitas usar esa sobrecarga de Image.Save, te bastaría con usar la
sobrecarga que no incluye formato. En todo caso, el formato lo puedes
obtener directamente de la imagen sin volverla a cargar:

tuImagen.Save(this.Text);

O en todo caso:

tuImagen.Save(this.Text, tuImagen.RawFormat);

Lo que no comprendo es lo que dices de que Image.Save especificando la ruta
manualmente si te lo guardo. Con casi seguridad las dos rutas no serán la
misma. Como prueba utilizar una variable string, y comparala con this.Text.

Lo que ocurre son dos cosas. Cuando cargas una imagen desde un archivo, se
mantiene un enlace a este mientras no hagas Dispose del objeto Image. Tal y
como haces las cosas, con seguridad el archivo está bloqueado. Cuando creas
un image desde this.Text, el archivo queda bloqueado. Pero es que además
probablemente también esté bloqueado por el control que esté visualizando la
imagen, o al menos por el objeto imagen con el que cargaste la imagen,
objeto tuImagen en mi ejemplo.

¿Me explico? Bueno, si has comprendido hasta aquí, lo que debes hacer es
crear una copia de la imagen en memoria, new bitmap(..), y hacer Dispose de
la que apunta al archivo. Es la única forma de poder desbloquear el archivo.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#3 Kone
04/06/2005 - 19:18 | Informe spam
Pues efectivamente. El error era porque el archivo estaba bloqueado. Estaba
intentando hacer lo que me dices, leer la imagen del fichero y liberarla,
pero no daba con ello. Ahora ya lo tengo tal como me has dicho. Cargo la
imagen en un Bitmap y creo uno nuevo a partir de éste. Despues libero el
primero. Ahora si funciona sin problemas.
Y funciona con this.Text claro, el problema no era ese.

un saludo y muchas gracias

Javi

"Tristan" escribió en el mensaje
news:u4Rb$
No comprendo de que forma estás guardando la imagen ¿para que todo ese
lío? No necesitas usar esa sobrecarga de Image.Save, te bastaría con usar
la sobrecarga que no incluye formato. En todo caso, el formato lo puedes
obtener directamente de la imagen sin volverla a cargar:

tuImagen.Save(this.Text);

O en todo caso:

tuImagen.Save(this.Text, tuImagen.RawFormat);

Lo que no comprendo es lo que dices de que Image.Save especificando la
ruta manualmente si te lo guardo. Con casi seguridad las dos rutas no
serán la misma. Como prueba utilizar una variable string, y comparala con
this.Text.

Lo que ocurre son dos cosas. Cuando cargas una imagen desde un archivo, se
mantiene un enlace a este mientras no hagas Dispose del objeto Image. Tal
y como haces las cosas, con seguridad el archivo está bloqueado. Cuando
creas un image desde this.Text, el archivo queda bloqueado. Pero es que
además probablemente también esté bloqueado por el control que esté
visualizando la imagen, o al menos por el objeto imagen con el que
cargaste la imagen, objeto tuImagen en mi ejemplo.

¿Me explico? Bueno, si has comprendido hasta aquí, lo que debes hacer es
crear una copia de la imagen en memoria, new bitmap(..), y hacer Dispose
de la que apunta al archivo. Es la única forma de poder desbloquear el
archivo.

Juan Carlos Badiola
MVP - C#

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida