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

[0] Índice de Mensajes

Ir a la versión completa