CLR: .Net / Mono / Boo / Otros CLR > VB .NET
Guardar imagen con SaveFileDialog
(1/1)
Sagma:
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 --- If Not Me.PictureBox1.Image Is Nothing Then Dim saveFileDialog1 As New SaveFileDialog saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif" saveFileDialog1.Title = "Guarda como imagen JPG o BMP" saveFileDialog1.InitialDirectory = "C:Transitofotos" saveFileDialog1.ShowDialog() If saveFileDialog1.FileName <> "" Then Dim fs As System.IO.Stream = CType(saveFileDialog1.OpenFile(), System.IO.FileStream) Me.SaveFileDialog1.FileName = Me.txt_codigo.Text Select Case saveFileDialog1.FilterIndex Case 1 Me.PictureBox1.Image.Save(fs, _ System.Drawing.Imaging.ImageFormat.Jpeg) Case 2 Me.PictureBox1.Image.Save(fs, _ System.Drawing.Imaging.ImageFormat.Bmp) Case 3 Me.PictureBox1.Image.Save(fs, _ System.Drawing.Imaging.ImageFormat.Gif) End Select fs.Close() End If End If
Y Feliz Navidad
Nebire:
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 --- Public Class Form1 Private WithEvents saveFileDialog1 As SaveFileDialog Private cancelado As Boolean Private nombreImg As String = "Imagen" Private Function salvarImagen() As Boolean Static ruta As String = "C:Transitofotos" Static extension As String = ".jpg" Static n As Integer = -1 Dim formatoImg As System.Drawing.Imaging.ImageFormat = System.Drawing.Imaging.ImageFormat.Jpeg Dim existe As Boolean = False Dim RutaAbsoluta As String = "" If Me.PictureBox1.Image IsNot Nothing Then If checkboxUsarFiledialog.Checked = True Then ' si el usuario desea seleccionar destino sobre la imagen... ' asignamos valores actuales al savefiledialog saveFileDialog1 = New SaveFileDialog saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif|Imagen PNG|*.png|Imagen TIFF|*.tiff" saveFileDialog1.DefaultExt = extension saveFileDialog1.Title = "Guarda como imagen JPG o BMP" If ruta = "" Then saveFileDialog1.InitialDirectory = "C:Transitofotos" Else saveFileDialog1.InitialDirectory = ruta ' usamos la ruta usada por última vez, es lo más probable. End If ' mostramos el objeto al usuario para que realice los cambios saveFileDialog1.ShowDialog() ' si no canceló ni dejó vacío el nombre del fichero se continúa If cancelado = False Then If saveFileDialog1.FileName <> "" Then ruta = IO.Path.GetDirectoryName(saveFileDialog1.FileName) nombreImg = IO.Path.GetFileName(saveFileDialog1.FileName) Dim s() As String = Split(saveFileDialog1.Filter, "*") s = Split(s(saveFileDialog1.FilterIndex), "|") extension = s(0) RutaAbsoluta = saveFileDialog1.FileName Else MsgBox("Se ha abortado el proceso. Se requiere especificar ruta y nombre para el archivo...") Exit Function ' proceso abortado End If Else Exit Function ' el usuario ha abortado la operación... End If Else ' cuando el usuario 'pasa' de seleccionar destino, se hace automáticamente. If ruta = "" Then ruta = "C:Transitofotos" If nombreImg = "" Then nombreImg = "Imagen" RutaAbsoluta = ruta & "" & nombreImg & "_" ' no importa si hay dos \ seguidas si no hay caracteres en medio se trata como una sola. If checkboxAutonumerado.Checked = True Then ' si se eligió autonumerar el nombre del archivo... Do ' genera un autonumerado para la imagen n += 1 existe = ExisteFichero(ruta & "" & nombreImg & n.ToString & extension) Loop While existe = True RutaAbsoluta &= n.ToString & extension Else ' si se eligió añadir fecha y hora al nombre del archivo RutaAbsoluta &= Replace(Date.Now.ToShortTimeString, ":", "_") & extension ' no se admiten los : como parte de nombre de archivos (pero necesario para la unidad). End If End If If IO.Directory.Exists(ruta) = False Then IO.Directory.CreateDirectory(ruta) End If ' tomamos el formato Select Case extension Case ".jpg" formatoImg = System.Drawing.Imaging.ImageFormat.Jpeg Case ".bmp" formatoImg = System.Drawing.Imaging.ImageFormat.Bmp Case ".gif" formatoImg = System.Drawing.Imaging.ImageFormat.Gif Case ".png" formatoImg = System.Drawing.Imaging.ImageFormat.Png Case ".tiff" formatoImg = System.Drawing.Imaging.ImageFormat.Tiff Case Else ' si no es ninguno de los anteriores automáticamente será jpg End Select ' finalmente guardamos el archivo Try Me.PictureBox1.Image.Save(RutaAbsoluta, formatoImg) Return True ' si todo fue ok devolvemos true Catch ex As System.Exception MessageBox.Show(ex.Message) End Try End If End Function Private Function ExisteFichero(ByVal rutaFichero As String) As Boolean Return IO.File.Exists(rutaFichero) End Function Private Sub saveFileDialog1_FileOk(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles saveFileDialog1.FileOk cancelado = e.Cancel End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox("El intento de guardar la imagen " & IIf(salvarImagen() = True, "tuvo éxito.", "fracasó.")) End Sub Private Sub txt_codigo_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_codigo.TextChanged nombreImg = txt_codigo.Text End SubEnd Class
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.
Sagma:
muchas gracias Nebire :gracias:, he modificado algunas cosas, pero, ya me funciona.
:beer:
Feliz Año Nuevo...
Navegación
Ir a la versión completa