pictureBox.Image.Save() en C# no funciona

No entiendo este problema. Porque esto generalmente funcionó hasta ahora. Este método es una reacción al hacer clic para guardar la imagen en pictureBox, que se llama lienzo. Cargo la imagen en el lienzo y luego hago algunas ediciones. Entonces quiero guardar la imagen. Si hago clic en printScreenButton antes de cargar la imagen, funciona, pero cuando cargo la imagen deja de funcionar. ¿Dónde prodría estar el problema?

private void printScreenButton_Click(object sender, EventArgs e)
      {
          canvas.Image.Save("name.png", System.Drawing.Imaging.ImageFormat.Png); 
      }

Edit:
Se crea el archivo Work == llamado name.png
No funciona == el archivo llamado name.png no se crea


Código para dibujar una imagen == poner en cuadro de imagen

` private void drawTransformedBitmap(Matrix transformationMatrix) 
        {
            Graphics g = Graphics.FromImage(canvasBitmapShow); //prepare graphics

            if (antialiasing)
            {
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
            }
            else 
            {
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
            }

            g.Clear(Color.White); //clear canvas

            g.Transform.Reset(); //clear transformations
            g.Transform = transformationMatrix; //set transformations from transformationMatrix
            g.DrawImage(canvasBitmapTarget, 0, 0); //draw from Bitmap called canvasBitmapTarget

            canvas.Invalidate(); //refresh canvas
        }`

Inicialización al principio:

canvasBitmapShow = new Bitmap(canvas.Width, canvas.Height);
canvasBitmapSource = new Bitmap(canvas.Width, canvas.Height);
canvasBitmapTarget = new Bitmap(canvas.Width, canvas.Height);
canvasBitmapBackup = new Bitmap(canvas.Width, canvas.Height);

canvas.Image = canvasBitmapShow; //set the Image

preguntado el 12 de junio de 12 a las 15:06

¿Qué error estás recibiendo? ¿Cuál es el problema real? "No funciona" no nos dice mucho. -

proporcione más código como el que está poniendo una imagen en el cuadro de imagen. -

Poner un try..catch(Exception ex) bloque alrededor del Save llame y eche un vistazo a la excepción resultante. -

¿Estás seguro de que ese archivo no se crea? Tal vez solo esté en la carpeta incorrecta, establezca una ruta completa para el nombre de archivo:

@AntonioBakula sí, estoy seguro de que es la ruta donde está el archivo .exe y cuando intento guardarlo antes de cargar la imagen => se crea el archivo, así que también intento eliminarlo y lo intento de nuevo después de cargar la imagen en el lienzo => no se creó ningún archivo, también intenté actualizar la carpeta => todavía no hay ningún archivo. -

2 Respuestas

canvas.Image.Save("nombre.png", System.Drawing.Imaging.ImageFormat.Png);

Nunca escribe código como este, no especificas la ruta completa del archivo. Lo que hace que la ubicación real del archivo dependa en gran medida del directorio de trabajo actual de su programa. El valor de Environment.CurrentDirectory. Lo que puede cambiar inesperadamente, usar un OpenFileDialog sin la propiedad RestoreDirectory establecida en verdadero sería un ejemplo.

Si no obtiene ninguna excepción, puede estar seguro de que el archivo se guardó. Exactamente sin que importe se salvó es una conjetura. Al menos use SaveFileDialog o Environment.GetFolderPath() para obtener un nombre de directorio predecible. Además, el directorio de trabajo predeterminado no funcionará en la máquina de su usuario, no puede escribir en c:\archivos de programa.

Respondido el 12 de junio de 12 a las 16:06

OMFG, saltaría de mis botas después de errores como ese. Muchas gracias. Realmente no tengo ni idea de que el cuadro de diálogo Abrir archivo haga eso. Las imágenes, por supuesto, se guardan en la carpeta desde la que se cargó la imagen original. Usaré SaveFileDialog como me aconsejaste. Problema resuelto. - user1097772

Cuando cargas una imagen, supongo que usando un Abrir archivo de diálogo, cambiaste el Directorio actual, simplemente configure RestaurarDirectorio a verdadero para evitar este comportamiento, pero tenga cuidado, aparentemente a veces se comporta de manera diferente en el sistema operativo según las respuestas aquí

Tal vez la forma más fácil de solucionar el problema es usando el Carpeta especial para guardar su archivo.

contestado el 23 de mayo de 17 a las 11:05

Muchas gracias por tu respuesta. - user1097772

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.