Necesito guardar una imagen después de la apertura de un OFD.
Este es mi código de cajero automático:

Dim ofd As New OpenFileDialog
ofd.Multiselect = True
ofd.ShowDialog()


For Each File In ofd.FileNames
   Image.FromFile(File).Save("C:\Users\Jonathan\Desktop\e\tmp.png", Imaging.ImageFormat.png)
Next

Y en la línea Image.FromFile(File).Save("C:\Users\Jonathan\Desktop\e\tmp.png", Imaging.ImageFormat.png) viene con el error.

(nota: la aplicación será construido sobre lo que es justo mi primer código, en la que se necesita para ser salvo no se copian)

InformationsquelleAutor Jonathan. | 2010-01-12

4 Comentarios

  1. 16

    Me gustaría comprobar dos cosas:

    1. De que el directorio que está ahorrando para
      existe
    2. Que tiene permisos de escritura para
      este directorio
    • Bueno, yo pensaba que me había registrado en el directorio existían, pero no muchas Gracias, realmente lo odio, aunque cuando puedo pasar años tratando de encontrar el por qué no está funcionando y, a continuación, a sabiendas de que es algo ridículamente simple 🙂
    • Me alegro de que eres la única persona en el planeta que que pasa! 🙂
  2. 6

    Abrir o guardar una Imagen pone un bloqueo en el archivo. Sobrescribir este archivo requiere que primero debe llamar a Dispose() en el objeto de la Imagen que contiene el bloqueo.

    Yo no entiendo muy bien tu código, pero tendrías que hacerlo de esta manera:

        For Each File In ofd.FileNames
            Using img As Image = Image.FromFile(File)
                img.Save("C:\Users\Jonathan\Desktop\e\tmp.png", Imaging.ImageFormat.Png)
            End Using
        Next

    La instrucción de Uso asegura que el img objeto es eliminado y el archivo de bloqueo se libera.

  3. 1

    La Imagen coloca un bloqueo.

    Por ejemplo, he utilizado este búfer de imágenes para guardar en un memorystream.

    byte[] ImageData = new Byte[0];
    if (BackGroundImage != null)
        {
            Bitmap BufferImage = new Bitmap(BackGroundImage);
            MemoryStream ImageStream = new MemoryStream();
            BufferImage.Save(ImageStream, ImageFormat.Jpeg);
            BufferImage.Dispose();
            ImageData = ImageStream.ToArray();
            ImageStream.Dispose();
    
    
            //write the length of the image data...if zero, the deserialier won't load any image
            DataStream.Write(ImageData.Length);
            DataStream.Write(ImageData, 0, ImageData.Length);
        }
        else
        {
            DataStream.Write(ImageData.Length);
        }
  4. 0

    Una razón de esto es que la secuencia (MemoryStream o cualquier otra secuencia) que se haya cargado la imagen principal de ha sido eliminado!

    Ejemplo este caso:

    Este es un método de extensión que convierte una matriz de bytes en un mapa de bits, pero el uso de la instrucción podrá disponer la secuencia de memoria, esta será la causa de este error siempre:

        public static Bitmap ToBitmap(this byte[] bytes)
        {
            if (bytes == null)
            {
                return null;
            }
            else
            {
                using(MemoryStream ms = new MemoryStream(bytes))
                {
                    return new Bitmap(ms);
                }
            }
        }

Dejar respuesta

Please enter your comment!
Please enter your name here