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 Sub
End Class