Estoy desarrollando un 2010 de Outlook Add-In, y me carga una imagen desde un archivo XML serializado. La imagen se carga bien, y soy capaz de asignar a un objeto pictureBox en un Winform, no hay problema. El objeto se guarda en

[XmlIgnore]
public Bitmap Image
{
   get { return this.templateImage; }
   set { this.templateImage = value; }
 }

Cuando intento guardar el archivo físico en el disco duro, sin embargo, yo estoy haciendo:

string filePath = Path.Combine(dirPath, item.Id + ".jpg");
try
{
    item.Image.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (Exception e)
{
    Debug.WriteLine("DEBUG::LoadImages()::Error attempting to create image::" + e.Message);
}

y estoy recibiendo Un error genérico que se produjo en GDI+. He comprobado los permisos de escritura sobre la carpeta, y que tiene permisos de escritura. No estoy seguro de lo que está mal aquí. También he cambiado el ImageFormat a bmp y png y así sucesivamente para ver si era un problema de la conversión… pero no lo es. Podría alguien sugerir algo para probar?

  • Hay muchas razones posibles para este error.. es muy frustrante. Algunas cosas para probar: 1) Escribir en una carpeta diferente. 2) Comprobar las dimensiones del archivo. Si es demasiado grande (en algún lugar en el rango de 4000×4000) también va a tirar este error. 3) asegúrese de que el archivo no está en uso por otra cosa (incluido el código).
  • Whitehead gracias por las sugerencias. Traté de escritura para el directorio padre, también a C:\temp pero eso no funcionó. Las dimensiones del archivo es de 64 x 64 píxeles (pequeño). #3 es el único que no probé todavía. Supongo que yo podría copiar la Imagen a un objeto nuevo y trate de escribir que uno. Informe momentáneamente.
  • Whitehead TRABAJADO! Fue el hecho de que el código se ha utilizando el punto para iterar a través de lo que parece que el GDI+ no podía deshacerse de él una vez que se ha hecho.
  • Me alegra poder ayudar 🙂
InformationsquelleAutor Magnum | 2013-02-14

6 Comentarios

  1. 22

    Gracias a Simon Whitehead para responder a esta en los comentarios. Él dijo, «3) asegúrese de que el archivo no está en uso por otra cosa (incluido el código).»

    Así que el problema era que mi propio código estaba usando el elemento.Objeto de la imagen, y fue la prevención de GDI+ para llamar al método dispose() en ella. La solución es copiar el objeto en un objeto nuevo, a continuación, utilizar ese objeto a «Escribir». El código resultante es el siguiente:

    try
    {
       using (Bitmap tempImage = new Bitmap(item.Image)) 
       {
          tempImage.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);
       }    
    }
    catch (Exception e)
    {
        Debug.WriteLine("DEBUG::LoadImages()::Error attempting to create image::" + e.Message);
    }
    • Que todavía no lo soluciona, se debe disponer tempImage para liberar el bloqueo en el archivo. El uso de la con declaración.
    • gracias, he modificado mi respuesta a reflejar tu comentario.
    • Muchas gracias! Esta es la razón por la que yo estaba teniendo un problema. La creación de un nuevo objeto de mapa de bits en un bloque using resuelto este problema para mí.
  2. 7

    Yo también enfrentan el mismo error de código de línea:

    wmImg.Save(BrandImgPath,ImageFormat.Png);
    
    BrandImgPath = "D:/XYZ/fileName;

    Encontró causa:

    XYZ carpeta no existe en la unidad D:. Así que mi código era la creación de esta carpeta más tarde. Uno debe asegurarse de que si la ruta existe o no.

    if (Directory.Exists(@"D:/XYZ")) return;

    La esperanza de que pueda ayudar a alguien a resolver sus errores de código.

  3. 2


    1. Asegúrese de Que la carpeta de destino tiene permiso de lectura/escritura (marque dos veces!).

    2. El Uso Del Servidor.MapPath es mejor

    3. Asegúrese de tener espacio libre en la unidad de destino o de la carpeta.
    4. La mayoría de las veces no podemos Memoria de usuario Serpentinas En Servidores Compartidos, Así que debe asegurarse de que el proveedor nos permitan utilizarlo.

    La esperanza de Microsoft de Dar Detallado de los Errores de Excepción en lugar de «Genérico GDI+ Errror» !!!

  4. 1

    Tenido este problema mí mismo, necesaria para comprobar que la carpeta existido, GDI no dime lo que salió mal, hubiera sido bueno.

  5. 0

    En mi caso fue un error de ortografía en la ruta del directorio donde se guardaba la imagen:

    if (Directory.Exists(directory_path))
    {
     image.SaveAs(directory_path + filename);
    }

    Como gaffleck dijo que sería bueno si GDI+ había tirado más informativo excepción.

  6. 0

    Tuve el mismo excepción genérica, pero luego me dio permiso de escritura para el IIS en paralelo administrador de archivos de plesk. si estás en windows server, asegúrese de darle permiso de escritura para el usuario de IIS que se IIS_IUSR en mi servidor

    también asegúrese de que la carpeta que está intentando guardar es correcto como se ha mencionado en comentarios anteriores

Dejar respuesta

Please enter your comment!
Please enter your name here