• Martes 30 de Abril de 2024, 01:36

Autor Tema:  Guardar imagen con SaveFileDialog  (Leído 6401 veces)

Sagma

  • Miembro MUY activo
  • ***
  • Mensajes: 390
  • Nacionalidad: bo
    • Ver Perfil
Guardar imagen con SaveFileDialog
« en: Viernes 26 de Diciembre de 2008, 20:35 »
0
tengo este codigo, con que gravo la imagen en un directorio especifico. Pero necesito su ayuda ya que se desea que sea transparente para el usuario.

En este caso, cuando gravo los datos, me pide el nombre de la imagen, digito el nombre de la imagen y graba todo ok.

Lo que quiero es poner el dato que estara en el txt_codigo.text, y no asi digitando el codigo que le corresponde.

Gracias por su colaboración

Código: Text
  1.  
  2.        If Not Me.PictureBox1.Image Is Nothing Then
  3.  
  4.             Dim saveFileDialog1 As New SaveFileDialog
  5.             saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif"
  6.             saveFileDialog1.Title = "Guarda como imagen JPG o BMP"
  7.             saveFileDialog1.InitialDirectory = "C:Transitofotos"
  8.  
  9.             saveFileDialog1.ShowDialog()
  10.  
  11.             If saveFileDialog1.FileName <> "" Then
  12.  
  13.                 Dim fs As System.IO.Stream = CType(saveFileDialog1.OpenFile(), System.IO.FileStream)
  14.                 Me.SaveFileDialog1.FileName = Me.txt_codigo.Text
  15.  
  16.                 Select Case saveFileDialog1.FilterIndex
  17.                     Case 1
  18.                         Me.PictureBox1.Image.Save(fs, _
  19.                         System.Drawing.Imaging.ImageFormat.Jpeg)
  20.  
  21.                     Case 2
  22.                         Me.PictureBox1.Image.Save(fs, _
  23.                         System.Drawing.Imaging.ImageFormat.Bmp)
  24.  
  25.                     Case 3
  26.                         Me.PictureBox1.Image.Save(fs, _
  27.                         System.Drawing.Imaging.ImageFormat.Gif)
  28.                 End Select
  29.  
  30.                 fs.Close()
  31.             End If
  32.         End If
  33.  
  34.  

Y Feliz Navidad
Sagma

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Guardar imagen con SaveFileDialog
« Respuesta #1 en: Domingo 28 de Diciembre de 2008, 21:49 »
0
No estoy seguro de haberte entendido.
Lo que leo y me parece entender luego en la siguiente línea me parece otra cosa.

Dices que quieres hacer transparente al usuario el salvar la imagen. Si esto es todo y entendí correctamente lo que quieres es que el usuario no indique la ruta y el nombre para el fichero, lo que tienes que hacer es usar una ruta, nombre y extensión por defecto.

A falta de indicaciones precisas, te propongo un código que usa o no el savefiledialog a gusto... lo hago modificando el código que expones...

al final te comento por encima el código... cualquier duda pregunta.
Código: Visual Basic
  1.  
  2. Public Class Form1
  3.     Private WithEvents saveFileDialog1 As SaveFileDialog
  4.     Private cancelado As Boolean
  5.     Private nombreImg As String = "Imagen"
  6.  
  7.     Private Function salvarImagen() As Boolean
  8.         Static ruta As String = "C:Transitofotos"
  9.         Static extension As String = ".jpg"
  10.         Static n As Integer = -1
  11.  
  12.         Dim formatoImg As System.Drawing.Imaging.ImageFormat = System.Drawing.Imaging.ImageFormat.Jpeg
  13.         Dim existe As Boolean = False
  14.         Dim RutaAbsoluta As String = ""
  15.  
  16.         If Me.PictureBox1.Image IsNot Nothing Then
  17.             If checkboxUsarFiledialog.Checked = True Then  ' si el usuario desea seleccionar destino sobre la imagen...
  18.                 ' asignamos valores actuales al savefiledialog
  19.                 saveFileDialog1 = New SaveFileDialog
  20.                 saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif|Imagen PNG|*.png|Imagen TIFF|*.tiff"
  21.                 saveFileDialog1.DefaultExt = extension
  22.                 saveFileDialog1.Title = "Guarda como imagen JPG o BMP"
  23.                 If ruta = "" Then
  24.                     saveFileDialog1.InitialDirectory = "C:Transitofotos"
  25.                 Else
  26.                     saveFileDialog1.InitialDirectory = ruta ' usamos la ruta usada por última vez,  es lo más probable.
  27.                 End If
  28.                 ' mostramos el objeto al usuario para que realice los cambios
  29.                 saveFileDialog1.ShowDialog()
  30.  
  31.                 ' si no canceló ni dejó vacío el nombre del fichero se continúa
  32.                 If cancelado = False Then
  33.                     If saveFileDialog1.FileName <> "" Then
  34.                         ruta = IO.Path.GetDirectoryName(saveFileDialog1.FileName)
  35.                         nombreImg = IO.Path.GetFileName(saveFileDialog1.FileName)
  36.                         Dim s() As String = Split(saveFileDialog1.Filter, "*")
  37.                         s = Split(s(saveFileDialog1.FilterIndex), "|")
  38.                         extension = s(0)
  39.                         RutaAbsoluta = saveFileDialog1.FileName
  40.                     Else
  41.                         MsgBox("Se ha abortado el proceso. Se requiere especificar ruta y nombre para el archivo...")
  42.                         Exit Function ' proceso abortado
  43.                     End If
  44.                 Else
  45.                     Exit Function ' el usuario ha abortado la operación...
  46.                 End If
  47.             Else      ' cuando el usuario 'pasa' de seleccionar destino, se hace automáticamente.
  48.                 If ruta = "" Then ruta = "C:Transitofotos"
  49.                 If nombreImg = "" Then nombreImg = "Imagen"
  50.                 RutaAbsoluta = ruta & "" & nombreImg & "_" ' no importa si hay dos \ seguidas si no hay caracteres en medio se trata como una sola.
  51.  
  52.                 If checkboxAutonumerado.Checked = True Then ' si se eligió autonumerar el nombre del archivo...
  53.                     Do     ' genera un autonumerado para la imagen
  54.                         n += 1
  55.                         existe = ExisteFichero(ruta & "" & nombreImg & n.ToString & extension)
  56.                     Loop While existe = True
  57.                     RutaAbsoluta &= n.ToString & extension
  58.                 Else   ' si se eligió añadir fecha y hora al nombre del archivo
  59.                     RutaAbsoluta &= Replace(Date.Now.ToShortTimeString, ":", "_") & extension   ' no se admiten los : como parte de nombre de archivos (pero necesario para la unidad).
  60.                 End If
  61.             End If
  62.  
  63.             If IO.Directory.Exists(ruta) = False Then
  64.                 IO.Directory.CreateDirectory(ruta)
  65.             End If
  66.            
  67.             ' tomamos el formato
  68.             Select Case extension
  69.                 Case ".jpg"
  70.                     formatoImg = System.Drawing.Imaging.ImageFormat.Jpeg
  71.                 Case ".bmp"
  72.                     formatoImg = System.Drawing.Imaging.ImageFormat.Bmp
  73.                 Case ".gif"
  74.                     formatoImg = System.Drawing.Imaging.ImageFormat.Gif
  75.                 Case ".png"
  76.                     formatoImg = System.Drawing.Imaging.ImageFormat.Png
  77.                 Case ".tiff"
  78.                     formatoImg = System.Drawing.Imaging.ImageFormat.Tiff
  79.                 Case Else
  80.                     ' si no es ninguno de los anteriores automáticamente será jpg
  81.             End Select
  82.  
  83.             ' finalmente guardamos el archivo
  84.             Try
  85.                 Me.PictureBox1.Image.Save(RutaAbsoluta, formatoImg)
  86.                 Return True ' si todo fue ok devolvemos true
  87.             Catch ex As System.Exception
  88.                 MessageBox.Show(ex.Message)
  89.             End Try
  90.         End If
  91.     End Function
  92.  
  93.     Private Function ExisteFichero(ByVal rutaFichero As String) As Boolean
  94.         Return IO.File.Exists(rutaFichero)
  95.     End Function
  96.  
  97.     Private Sub saveFileDialog1_FileOk(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles saveFileDialog1.FileOk
  98.         cancelado = e.Cancel
  99.     End Sub
  100.  
  101.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  102.         MsgBox("El intento de guardar la imagen " & IIf(salvarImagen() = True, "tuvo éxito.", "fracasó."))
  103.     End Sub
  104.  
  105.     Private Sub txt_codigo_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_codigo.TextChanged
  106.         nombreImg = txt_codigo.Text
  107.     End Sub
  108. End Class
  109.  
  110.  

En el formulario hay 1 botón que llama a la función de guardar. Hay 2 checkbox 1 permite especificar si queremos guardar la imagen a través del savefiledialog o no, el otro determina si para guardar el nombre de la imagen usamos un método autonumerado o lo basamos en la hora actual. Hay un textbox para indicar si quremos un nombre 'base' para el nombre de la imagen, luego se le aplica el autonumerado ó la hora si no elegimos usar el savefiledialog y naturalmente un picturebox.

El savefiledialog se designa con eventos para determinar si el usuario canceló la operación en cuyo caso se aborta el proceso.

Se han añadido 2 formatos más (PNG y TIFF) que también suelen ser útiles.

Se ha incluído una comprobación de carpeta para saber si existe y en caso de que no, se crea la ruta, sino daría error,

A partir de aquí puedes hacer las modificaciones que te parezcan convenientes.
Cualquier aclaración que precises pregunta.
«Ma non troppo»
----> ModoVacaciones = False<----

Sagma

  • Miembro MUY activo
  • ***
  • Mensajes: 390
  • Nacionalidad: bo
    • Ver Perfil
Re: Guardar imagen con SaveFileDialog
« Respuesta #2 en: Lunes 29 de Diciembre de 2008, 19:53 »
0
muchas gracias Nebire  :gracias:, he modificado algunas cosas, pero, ya me funciona.

 :beer:

Feliz Año Nuevo...
Sagma