genérico error ejemplo create array c# bitmap gdi+

c# - ejemplo - Se produjo un error genérico en GDI+



image c# (8)

Cargué una imagen en un cuadro de imagen usando:

picturebox1.Image = Image.FromFile()

y lo guardo usando:

Bitmap bm = new Bitmap(pictureBox1.Image); bm.Save(FileName, ImageFormat.Bmp);

Funciona perfectamente bien al crear un nuevo archivo, pero cuando trato de reemplazar la imagen existente, me arrojan el siguiente error de tiempo de ejecución:

Se produjo un error genérico en GDI +

Entonces, ¿qué puedo hacer para resolver este problema?


prueba esto.

picturebox1.Image = Image.FromFile(FileName); Bitmap bm = new Bitmat(pictureBox1.Image); Image img = (Image)b; img.Save(FileName, ImageFormat.Bmp);


Esto también puede suceder si la ruta no existe.

Puedes crear el directorio con:

System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(FileName));


Eso porque el archivo de imagen lo usa picturebox1.Image , intente guardarlo en una ruta de archivo diferente en su lugar:

picturebox1.Image = Image.FromFile(FileName); Bitmap bm = new Bitmap(pictureBox1.Image); bm.Save(@"New File Name", ImageFormat.Bmp);

Editar: también podría agregar una copia de la imagen en primer lugar como:

picturebox1.Image = new Bitmap(Image.FromFile(FileName)); Bitmap bm = new Bitmap(pictureBox1.Image); bm.Save(FileName, ImageFormat.Bmp);//no error will occurs here.


El método FromFile bloquea el archivo, por lo tanto, use el método Image.FromStream () para leer la imagen:

byte[] bytes = System.IO.File.ReadAllBytes(filename); System.IO.MemoryStream ms = new System.IO.MemoryStream(bytes); pictureBox1.Image = Image.FromStream(ms);

Luego guarda como lo hacías antes.


Al igual que @Jalal Aldeen Saa''d dijo, el cuadro de imagen está usando el archivo y bloqueado desde el reemplazo del archivo.

//unlock file by clearing it from picture box if (picturebox1.Image != null) { picturebox1.Image.Dispose(); picturebox1.Image = null; } //put back the picture inside the pictureBox?


intenta esto, funcionará

public void SavePicture() { Bitmap bm = new Bitmap(this.myBitmap) bm.Save("Output//out.bmp" ,System.Drawing.Imaging.ImageFormat.Bmp ); }


Esto también puede suceder si olvida agregar el nombre de archivo:

bm.Save(@"C:/Temp/Download", System.Drawing.Imaging.ImageFormat.Png);

Y se puede arreglar agregando el nombre del archivo:

bm.Save(@"C:/Temp/Download/Image.png", System.Drawing.Imaging.ImageFormat.Png);

Nota: en realidad no tiene que agregar la extensión para que funcione.


Cuando un objeto Bitmap o un objeto Image se construye a partir de un archivo, el archivo permanece bloqueado durante el tiempo de vida del objeto. Como resultado, no puede cambiar una imagen y guardarla nuevamente en el mismo archivo donde se originó. http://support.microsoft.com/?id=814675

Se produjo un error genérico en GDI +, JPEG Image to MemoryStream:

Image.Save(..) // throws a GDI+ exception because the memory stream is closed

http://alperguc.blogspot.in/2008/11/c-generic-error-occurred-in-gdi.html

EDITAR: solo escribiendo desde la memoria. Guardar en un intermediario MemoryStream debería funcionar:

Por ejemplo, reemplace esto:

Bitmap newBitmap = new Bitmap(thumbBMP); thumbBMP.Dispose(); thumbBMP = null; newBitmap.Save("~/image/thumbs/" + "t" + objPropBannerImage.ImageId, ImageFormat.Jpeg);

con algo como:

string outputFileName = "..."; using (MemoryStream memory = new MemoryStream()) { using (FileStream fs = new FileStream(outputFileName, FileMode.Create, FileAccess.ReadWrite)) { thumbBMP.Save(memory, ImageFormat.Jpeg); byte[] bytes = memory.ToArray(); fs.Write(bytes, 0, bytes.Length); } }