visual form data c# bitmap save savefiledialog

c# - form - Se produce un error genérico en GDI+en Bitmap.Save() después de usar SaveFileDialog



savefiledialog c# windows forms (12)

¿Es esta una aplicación ASP.NET?

Se produjo un error genérico en GDI + en asp.net principalmente debido a la falta de permisos / permisos de acceso a la carpeta de destino.

También su código podría ser simplificado para:

using (Image image= dataObject.GetImage()) { if (image != null) { image.Save("test.bmp"); } }

Uso el siguiente bloque de código con algo más de código dentro del bloque que usa:

using (System.Drawing.Bitmap tempImg = (System.Drawing.Bitmap)tempObj.GetData(System.Windows.Forms.DataFormats.Bitmap)) { // ... tempImg.Save("..//..//testdata//tempImg.bmp", ImageFormat.Bmp); // ... }

Pero todavía me sale el error:

Se produjo un error genérico en GDI +

solo después de realizar alguna acción que no esté relacionada con el código dentro del bloque de uso. En otras ocasiones esto funciona bien. También el tempImg.bmp es un archivo temporal, así que borro el tempImg.bmp dentro del bloque que usa.

Dado que el tempImg está dentro del uso y este está eliminado, creo que el problema de bloqueo debe resolverse.

¿Puede alguien, por favor, decirme cuál es el error en este código?

Edición: System.Drawing.Image to System.Drawing.Bitmap como el tipo de tempImg .

Edición: he identificado que aparece este error solo después de crear SaveFileDialog y el usuario hace clic en "Guardar".


Deseche su objeto bitMap después de guardar la imagen:

bitMap.Dispose() oimg.Dispose() bitMap = Nothing oimg = Nothing


En mi caso, estaba guardando el archivo de mapa de bits en la misma ubicación que la fuente, así que ese es el problema. Guardo el mapa de bits en la nueva ubicación y todo está bien ahora.


En mi caso, fue una aplicación ASP.NET en la que reemplacé una única DLL y tuve que simplemente reiniciar el grupo de aplicaciones después de la implementación. Entonces funcionó bien.


Estaba enfrentando el mismo problema, al cambiar el tipo de imagen ".bmp" a ".png", su trabajo me forma


Este es un ejemplo de código de los foros de Microsoft.

// new image with transparent Alpha layer using (var bitmap = new Bitmap(330, 18, PixelFormat.Format32bppArgb)) { using (var graphics = Graphics.FromImage(bitmap)) { // add some anti-aliasing graphics.SmoothingMode = SmoothingMode.AntiAlias; using (var font = new Font("Arial", 14.0f, GraphicsUnit.Pixel)) { using (var brush = new SolidBrush(Color.White)) { // draw it graphics.DrawString(user.Email, font, brush, 0, 0); } } } // setup the response Response.Clear(); Response.ContentType = "image/png"; Response.BufferOutput = true; // write it to the output stream bitmap.Save(Response.OutputStream, ImageFormat.Png); Response.Flush(); }


Esto suele ser un indicador de que otra cosa, potencialmente otro subproceso en su propia aplicación, ya tiene el archivo de destino que está intentando guardar bloqueado en el nivel del sistema de archivos. Si miras la excepción interna, creo que debería mencionar esto. Si no está directamente en la InnerException Otra forma de confirmar esto (o descubrir lo que realmente podría ser en su lugar) es activar las excepciones de primera oportunidad en el depurador y ver qué excepción se está lanzando "debajo" Guardar y luego convertirse en este excepción genérica


Estoy tratando de guardar la imagen del recurso y también me da un error de GDI cuando uso directamente el método Bitmap.Save (filepath). Creo que podemos usar el mismo código a continuación para cualquier otra imagen de mapa de bits clonándola.

Private void SaveResourceImage() { object resBmpObject = Resource.Image1.Clone();//Bitmap Image from resource file //object resBmpObject = anyBmpImage.clone(); //for image other than resource image Bitmap resBmpImage = (Bitmap)resBmpObject; resBmpImage.Save(destFilePath, System.Drawing.Imaging.ImageFormat.Png); resBmpImage.dispose(); }


Finalmente, pude encontrar lo que estaba mal en mi código y me gustaría mencionarlo aquí, ya que creo que puede ser útil para alguien ...

Como le he dado una ruta relativa en tempImg.Save, y después de que el usuario haga clic en ''Guardar'' en SaveFileDialog, la ruta real para tempImg.Save se convierte en:

Ruta especificada por SaveFileDialog + la ruta relativa

automáticamente.

Por lo tanto, si la ruta no existe, se produce este error.

Gracias a todos por las respuestas.


Probé todas las soluciones dadas aquí, pero en vano. Encontré la solución eventualmente.

  1. Deseche los gráficos aplicados en la imagen: g.dispose();
  2. Asegúrese de que exista la ruta de guardado: System.IO.Directory.Exists(dir);

También tuve este problema una vez: sucede porque el mapa de bits se bloquea y no puede guardarlo (si lo desea, puedo encontrar la explicación exacta), así que de todos modos una solución es la siguiente: Cree un nuevo mapa de bits del tamaño del mapa de bits original. tener: copie el mapa de bits original al nuevo mapa de bits creado y luego deseche el mapa de bits original y guarde el nuevo.

Bitmap bm3 = new Bitmap(bm2);

Y luego guardar.


Un error genérico se produce en GDI + en Bitmap.Save () generalmente se recibe cuando la carpeta está protegida o el nombre del archivo no es válido.

Un error común es olvidarse de hacer un nombre y solo escribir el nombre de la carpeta solo.