' Programa y fuente 100% libre para su uso con licencia "Reconocimiento 4.0 Internacional". Web: https://creativecommons.org/licenses/by/4.0/ ' Muchos mas ejemplos en nuestra pagina buscanos en google como A.K.Freeman o AKF-GO ' Autor: A.K.Freeman Imports System.IO Public Class Form1 'Se declara variable de la imagen Private fotoinicial As Image 'Evento al iniciar la ventana Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Try para evitar errores en la compilacion. Try 'Se asigna el icono de la ventana Me.Icon = New System.Drawing.Icon(Application.StartupPath & "\pictures.ico") 'Se declara y asigna valor aletaroia para que aparezca una imagen al inciar el programa Dim ramdomfoto As String() = Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "*.jpg") 'Se declara variable ramdom Dim rnd As New Random 'Condicion: Si el numero de ramdomfoto -1 es mayor a 0 If ramdomfoto.Count - 1 > 0 Then 'Se mostrara la imagen en visualizar foto visualizarfoto.Image = Image.FromFile(ramdomfoto(rnd.Next(1, ramdomfoto.Count - 1))) End If 'Catch de haber algo malo en el codigo saltara el mensaje. Catch ex As Exception 'Mensaje que aparecera al encontrar un error. MsgBox("Error codigo '#1'") End Try End Sub 'Evento al hacer clic en el boton Buscar(La Lupa) Private Sub btImagen(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnsubirfoto.Click 'Try para evitar errores en la compilacion. Try 'Se declara variable para abrir un archivo Dim abrir As New OpenFileDialog 'Se establece el valor del directorio donde se obtendra el archivo abrir.InitialDirectory = Environment.SpecialFolder.MyDocuments 'Se establece el filtro de las extenciones que se visualizaran abrir.Filter = "Imagenes JPG (*.jpg)|*.jpg| Imagenes PNG (*.png)|*.png| Imagenes GIF (*.gif)|*.gif| Imagenes JPEG (*.jpeg)|*.jpeg|Todos los archivos (*.*)|*.*" 'Se abre el cuadro "Abrir" abrir.ShowDialog() 'Condicion: Si abrir es distinto a vacio If abrir.FileName <> "" Then 'Se indicara que visualizarfoto abrira el archivo que se selecciono visualizarfoto.Image = Image.FromFile(abrir.FileName) 'Tambien se guarda el parametro en la variable fotoinicial fotoinicial = Image.FromFile(abrir.FileName) 'Indica como aparecera la imagen visualizarfoto.SizeMode = PictureBoxSizeMode.StretchImage End If 'Catch de haber algo malo en el codigo saltara el mensaje. Catch ex As Exception 'Mensaje que aparecera al encontrar un error. MsgBox("Error codigo '#2'") End Try End Sub 'Evento al realizar clic sobre la imagen Private Sub PictureClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles visualizarfoto.MouseClick 'Try para evitar errores en la compilacion. Try 'Mostrara la ubicacion del mouse con relacion a la imagen MsgBox(e.X & ":" & e.Y) 'Catch de haber algo malo en el codigo saltara el mensaje. Catch ex As Exception 'Mensaje que aparecera al encontrar un error. MsgBox("Error codigo '#3'") End Try End Sub ' Se declara la funcion imagenvoltear Private Function Imagenvoltear(ByVal fotoprin As Image, ByVal g As Decimal) As Image 'Try: Programado para evitar errores en el proceso Try 'Condicion: Si el radiobutton derecha esta marcado If rdbDerecha.Checked Then 'Se restara de ?????????????????????????? g = -g End If 'Se indica la imagen original Dim JIM As New Bitmap(fotoprin) 'Indica los valores del ancho de la imagen Dim ancho As Single = JIM.Width 'Indica los valores del alto de la imagen Dim alto As Single = JIM.Height 'Indica los valores de las esquinas de la imagen Dim totalaltanc As Point() = {New Point(0, 0), New Point(ancho, 0), New Point(0, alto), New Point(ancho, alto)} 'Se establece la mitad del ancho Dim anchomitad As Single = ancho / 2 'Se establece la mitad del alto Dim altomitad As Single = alto / 2 'Se declara variable "i" Dim i As Long 'Bucle: Se indica "i"=0 y se detendra cuando el valor sea 3 For i = 0 To 3 'Se resta el valor de totalaltanc menos anchomitad totalaltanc(i).X -= anchomitad 'Se resta el valor de totalaltanc menos altomitad totalaltanc(i).Y -= altomitad Next i 'Se declara PI como valor Dim PI As Decimal = 3.1416 'Se realiza la declaracion y asignacion del valor de piarg Dim piarg As Single = Single.Parse(g) * PI / 180.0 'Se halla el seno del angulo Dim senoarg As Single = Math.Sin(piarg) 'Se halla el coseno del angulo Dim cosenoarg As Single = Math.Cos(piarg) 'Se declara variable "K" del tipo single Dim K As Single 'Se declara variable "F" del tipo single Dim F As Single 'Bucle: Se indica "i"=0 y se detendra cuando el valor sea 3 For i = 0 To 3 'Se asignan el valor de "K" K = totalaltanc(i).X 'Se asignan el valor de "F" F = totalaltanc(i).Y 'Se asginan valores para totalaltanc "x" totalaltanc(i).X = K * cosenoarg + F * senoarg 'Se asginan valores para totalaltanc "y" totalaltanc(i).Y = -K * senoarg + F * cosenoarg Next i ' Se declara valor para totalaltanc "X" Dim trasx As Single = totalaltanc(0).X ' Se declara valor para totalaltanc "Y" Dim trasy As Single = totalaltanc(0).Y 'Bucle: Se indica "i"=1 y se detendra cuando el valor sea 3 For i = 1 To 3 ' Condicion: Si trasx es mayor a totalaltanc "X" If trasx > totalaltanc(i).X Then trasx = totalaltanc(i).X ' Condicion: Si trasy es mayor a totalaltanc "Y" If trasy > totalaltanc(i).Y Then trasy = totalaltanc(i).Y Next i 'Bucle: Se indica "i"=0 y se detendra cuando el valor sea 3 For i = 0 To 3 'Se resta trasx a totalaltanc "X" totalaltanc(i).X -= trasx 'Se resta trasy a totalaltanc "Y" totalaltanc(i).Y -= trasy Next i 'Se declara variable del tipo bitmap Dim bitimg As New Bitmap(CInt(-2 * trasx), CInt(-2 * trasy)) 'Se declara variable del tipo graphics Dim graimg As Graphics = Graphics.FromImage(bitimg) 'Reasigna el espacio ReDim Preserve totalaltanc(2) 'Se muestra la imagen girada graimg.DrawImage(JIM, totalaltanc) 'Retorna el valor Return bitimg 'Catch: De haber un error en el proceso se ejecutara Catch ex As Exception 'Mensaje que se mostrara de haber un error en la ejecucion MsgBox("Error codigo '#4'") 'No retorna nada Return Nothing End Try End Function Private Sub btnGirar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnfotogira.Click 'Try para evitar errores en la compilacion. Try Dim img As Image = Imagenvoltear(visualizarfoto.Image, CDec(txtGrados.Text)) If Not img Is Nothing Then visualizarfoto.Image = img End If 'Catch de haber algo malo en el codigo saltara el mensaje. Catch ex As Exception 'Mensaje que aparecera al encontrar un error. MsgBox("Error codigo '#5'") End Try End Sub 'Evento al hacer clic en guardar(en icono del disco duro) Private Sub btnG_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnguardarfoto.Click 'Try: Programado para evitar errores en el proceso Try 'Se declara la variable datoalmacenado como savefiledilog Dim datoalmacenado As New SaveFileDialog 'Se indica que se agregaran las extensiones datoalmacenado.AddExtension = True 'Se indica que no mostrara una ventana de advertencia cuando se especifique un nombre que no exita datoalmacenado.CheckFileExists = False 'Se indica que mostrara una ventana de advertencia cuando se especifique una ruta que no exita datoalmacenado.CheckPathExists = True 'Indica el filtro de extensiones datoalmacenado.Filter = "Archivo de Imagen PNG|*.png|Archivo de Imagen JPG|*.jpg|Archivo de Imagen BITMAP|*.bmp|Archivo de Imagen GIF|*.gif" 'El titulo que mostrara en la ventana de guardar datoalmacenado.Title = "Guardar Imagen" 'Se indica que el nombre del archivo estara vacio datoalmacenado.FileName = "" 'Se obtiene el valor del directorio inicial datoalmacenado.InitialDirectory = Environment.SpecialFolder.MyDocuments 'Se ejecuta el cuadro de dialogo datoalmacenado.ShowDialog() 'Condicion: Si datoalmacena es diferente a vacio If datoalmacenado.FileName <> "" Then 'Se declara la variable del tipo filestream y se asigna valor datoalmacenado Dim Varfin As System.IO.FileStream = CType(datoalmacenado.OpenFile(), System.IO.FileStream) 'Condicion: Filtro para los tipos de extensiones Select Case datoalmacenado.FilterIndex 'Caso 1 - PNG Case 1 'Se indica que el archivo sera del tipo png visualizarfoto.Image.Save(Varfin, Imaging.ImageFormat.Png) 'Caso 2 - JPEG Case 2 'Se indica que el archivo sera del tipo jpeg visualizarfoto.Image.Save(Varfin, Imaging.ImageFormat.Jpeg) 'Caso 3 - BMP Case 3 'Se indica que el archivo sera del tipo bmp visualizarfoto.Image.Save(Varfin, Imaging.ImageFormat.Bmp) 'Caso 4 - GIF Case 4 'Se indica que el archivo sera del tipo gif visualizarfoto.Image.Save(Varfin, Imaging.ImageFormat.Gif) End Select 'Se cierra la variable del tipo filestream Varfin.Close() End If 'Catch: De haber un error en el proceso se ejecutara Catch ex As Exception 'Mensaje que se mostrara de haber un error en la ejecucion MsgBox("Error codigo '#6'") End Try End Sub 'Evento al hacer clic en zoom Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnzoom.Click 'Try para evitar errores en la compilacion. Try 'Indica como aparecera la imagen Me.visualizarfoto.SizeMode = PictureBoxSizeMode.Zoom 'Catch de haber algo malo en el codigo saltara el mensaje. Catch ex As Exception 'Mensaje que aparecera al encontrar un error. MsgBox("Error codigo '#7'") End Try End Sub 'Evento al hacer clic en Ajustar Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnajustar.Click 'Try para evitar errores en la compilacion. Try 'Indica como aparecera la imagen Me.visualizarfoto.SizeMode = PictureBoxSizeMode.StretchImage 'Catch de haber algo malo en el codigo saltara el mensaje. Catch ex As Exception 'Mensaje que aparecera al encontrar un error. MsgBox("Error codigo '#8'") End Try End Sub 'Evento al hacer clic en actualuizar(el icono de las 2 fechas) Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnActualizar.Click 'Try para evitar errores en la compilacion. Try 'Se indica que se vuelve a ejecutar el evento de load Form1_Load(sender, e) 'Catch de haber algo malo en el codigo saltara el mensaje. Catch ex As Exception 'Mensaje que aparecera al encontrar un error. MsgBox("Error codigo '#9'") End Try End Sub End Class
No hay comentarios:
Publicar un comentario