Tutoriales gratuitos para el aprendizaje de la programacion informatica! Recuerda que si lo puedes imaginar... lo puedes programar!

EDITOR DE IMAGEN EN VB.NET

SDEDI


SISTEMA DE INFORMACIÓN PARA LA EDICIÓN DE IMAGEN




PARA EL PROYECTO NECESITARAS :

1 FORM LLAMADO: MainForm
1 MenuStrip1
1 SaveFileDialog1
1 OpenFileDialog1
11 Button
5 TexBox
Label (depende de su diseño)

IMÁGENES DEL PROYECTO:






CODIFICACIÓN

Imports System.Drawing
Imports System.Drawing.Imaging
Public Class MAINFORM
#Region "VARIABLES Y CONSTANTES DE NIVEL DE FORMULARIO"

    ' IMAGEN ORIGINAL QUE SE CONSERVA PARA REVERTIRLA.

    Private ORIGINALIMAGE As Image = Nothing

    ' IMAGEN ACTUAL QUE SE VA A MODIFICAR Y ACTUALIZAR.

    Private CURRENTIMAGE As Image = Nothing

    ' IMAGEN QUE SE ALMACENA PARA DESHACER EL ÚLTIMO CAMBIO REALIZADO.

    Private UNDOIMAGE As Image = Nothing

    ' VALOR UTILIZADO PARA DETERMINAR EL FACTOR DE ZOOM ACTUAL.

    Private ZOOMFACTOR As Double = 1

    ' ANCHO DE LA IMAGEN EN LA PANTALLA EN PÍXELES.

    Private SCREENIMAGEWIDTH As Integer = 0

    ' ALTO DE LA IMAGEN EN LA PANTALLA EN PÍXELES.

    Private SCREENIMAGEHEIGHT As Integer = 0

    ' VALOR X ACTUAL DEL MOUSE SOBRE LA IMAGEN.

    Private X As Integer = 0

    ' VALOR Y ACTUAL DEL MOUSE SOBRE LA IMAGEN.

    Private Y As Integer = 0

    ' PORCENTAJE DEL TAMAÑO DE LA IMAGEN ACTUAL UTILIZADO PARA CREAR LA MINIATURA.

    Const THUMBNAILFACTOR As Double = 0.15
#End Region
#Region "MÉTODOS GUI"
    ''' <SUMMARY>

    ''' ACTUALIZA LAS COORDENADAS X E Y CUANDO EL MOUSE SE DESPLAZA POR MAINIMAGE

    ''' </SUMMARY>
    Private Sub MAINIMAGE_MOUSEMOVE(ByVal SENDER As Object,
        ByVal E As System.Windows.Forms.MouseEventArgs) Handles MAINIMAGE.MOUSEMOVE
        Try
            ' DETERMINE LOS LÍMITES.
            Dim LEFT As Integer = CInt((MAINIMAGE.WIDTH - SCREENIMAGEWIDTH) / 2)
            Dim TOP As Integer = CInt((MAINIMAGE.HEIGHT - SCREENIMAGEHEIGHT) / 2)
            Dim RIGHT As Integer = LEFT + SCREENIMAGEWIDTH
            Dim BOTTOM As Integer = TOP + SCREENIMAGEHEIGHT

            ' DETERMINE LA UBICACIÓN DEL MOUSE EN RELACIÓN CON LA IMAGEN.

            If E.X < LEFT Then
                X = 0
                XLABEL.TEXT = "X: 0"
            ElseIf E.X > RIGHT Then
                X = CInt(SCREENIMAGEWIDTH / ZOOMFACTOR)
                XLABEL.TEXT = "X: " & X.ToString()
            Else
                X = CInt((E.X - LEFT) / ZOOMFACTOR)
                XLABEL.TEXT = "X: " + X.ToString()
            End If
            If E.Y < TOP Then
                Y = 0
                YLABEL.TEXT = "Y: 0"
            ElseIf E.Y > BOTTOM Then
                Y = CInt(SCREENIMAGEHEIGHT / ZOOMFACTOR)
                YLABEL.TEXT = "Y: " & Y.ToString()
            Else
                Y = CInt((E.Y - TOP) / ZOOMFACTOR)
                YLABEL.TEXT = "Y: " + Y.ToString()
            End If
        Catch EX As Exception
        End Try
    End Sub
    ''' <SUMMARY>

    ''' CERRAR LA APLICACIÓN

    ''' </SUMMARY>
    Private Sub EXITAPPLICATION_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs)
        Try
            Application.Exit()
        Catch EX As Exception
        End Try
    End Sub
#End Region
#Region "MÉTODOS ZOOM"
    ''' <SUMMARY>

    ''' ZOOMS AL 25%

    ''' </SUMMARY>
    Private Sub ZOOM25_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles ZOOM25.CLICK
        ZOOM(0.25)
    End Sub
    ''' <SUMMARY>

    ''' ZOOMS AL 50%

    ''' </SUMMARY>
    Private Sub ZOOM50_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles ZOOM50.CLICK
        ZOOM(0.5)
    End Sub
    ''' <SUMMARY>

    ''' ZOOMS AL 100%

    ''' </SUMMARY>
    Private Sub ZOOM100_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles ZOOM100.CLICK
        ZOOM(1)
    End Sub
    ''' <SUMMARY>

    ''' ZOOMS AL 150%


    ''' </SUMMARY>
Private Sub ZOOM150_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles ZOOM150.CLICK
        ZOOM(1.5)
    End Sub
    ''' <SUMMARY>

    ''' ZOOMS AL 200%

    ''' </SUMMARY>
    Private Sub ZOOM200_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles ZOOM200.CLICK
        ZOOM(2)
    End Sub
    ''' <SUMMARY>

    ''' ACTUALIZA EL MENÚ ZOOM PARA QUE SE SELECCIONE LA OPCIÓN CORRESPONDIENTE

    ''' </SUMMARY>
    ''' <REMARKS></REMARKS>
    Private Sub UPDATEZOOMMENU()
        Try
            ZOOM25.CHECKED = False
            ZOOM50.CHECKED = False
            ZOOM100.CHECKED = False
            ZOOM150.CHECKED = False
            ZOOM200.CHECKED = False
            Select Case ZOOMFACTOR
                Case 0.25
                    ZOOM25.CHECKED = True
                    Exit Select
                Case 0.5
                    ZOOM50.CHECKED = True
                    Exit Select
                Case 1
                    ZOOM100.CHECKED = True
                    Exit Select
                Case 1.5
                    ZOOM150.CHECKED = True
                    Exit Select
                Case 2
                    ZOOM200.CHECKED = True
                    Exit Select
            End Select
        Catch EX As Exception
        End Try
    End Sub
    ''' <SUMMARY>

    ''' APLICA A LA IMAGEN EL FACTOR DE ZOOM DESIGNADO DE LA IMAGEN ACTUAL.

    ''' </SUMMARY>
    Private Sub ZOOM(ByVal FACTOR As Double)
        Try

            ' GUARDE EL FACTOR EN UNA VARIABLE GLOBAL.

            ZOOMFACTOR = FACTOR

            ' OBTENGA LA IMAGEN CON EL TAMAÑO AJUSTADO.

            Dim SOURCEBITMAP As New Bitmap(CURRENTIMAGE)
            Dim DESTBITMAP As New Bitmap(CInt(SOURCEBITMAP.Width * FACTOR),
                CInt(SOURCEBITMAP.Height * FACTOR))
            Dim DESTGRAPHIC As Graphics = Graphics.FromImage(DESTBITMAP)
            DESTGRAPHIC.DrawImage(SOURCEBITMAP, 0, 0, DESTBITMAP.Width + 1,
                DESTBITMAP.Height + 1)

            ' GUARDE EL TAMAÑO DE LA IMAGEN EN LA PANTALLA EN VARIABLES GLOBALES.

            SCREENIMAGEWIDTH = DESTBITMAP.Width
            SCREENIMAGEHEIGHT = DESTBITMAP.Height
            MAINIMAGE.IMAGE = DESTBITMAP

            ' ACTUALICE LA ETIQUETA DE ZOOM DEL FORMULARIO.

            ZOOMLABEL.TEXT = "ZOOM: " & ZOOMFACTOR * 100 & "%"

            ' ACTUALICE LA SELECCIÓN DEL MENÚ ZOOM.

            UPDATEZOOMMENU()
        Catch EX As Exception
        End Try
    End Sub
#End Region

#Region "MÉTODOS DE TRAZADO, CONVERSIÓN Y ACTUALIZACIÓN DE IMÁGENES"
    ''' <SUMMARY>

    ''' DIBUJA UNA IMAGEN MEDIANTE EL OBJETO COLORMATRIX DESIGNADO

    ''' </SUMMARY>
    Private Function DRAWADJUSTEDIMAGE(ByVal CMATRIX As ColorMatrix) As Boolean
        Try

            ' ACTUALICE LA OPERACIÓN DE DESHACER DE LA IMAGEN Y EL MENÚ.

            UNDOIMAGE = CType(CURRENTIMAGE.Clone(), Image)
            UNDO.ENABLED = True
            Try
                Dim BMP As New Bitmap(CURRENTIMAGE)
                Dim RC As New Rectangle(0, 0,
                    CURRENTIMAGE.Width, CURRENTIMAGE.Height)
                Dim GRAPHICSOBJECT As Graphics =
                    Graphics.FromImage(CURRENTIMAGE)

                ' ASOCIE EL OBJETO COLORMATRIX A UN OBJETO IMAGEATTRIBUTES

                Dim IMGATTR As New ImageAttributes()
                IMGATTR.SetColorMatrix(CMATRIX)

                'APLIQUE EL OBJETO COLORMATRIX

                GRAPHICSOBJECT.DrawImage(BMP, RC, 0, 0, CURRENTIMAGE.Width,
                    CURRENTIMAGE.Height, GraphicsUnit.Pixel, IMGATTR)
                GRAPHICSOBJECT.Dispose()

                ' APLIQUE EL ZOOM ACTUAL A LA IMAGEN.

                ZOOM(ZOOMFACTOR)
                Return True
            Catch
                Return False
            End Try
        Catch EX As Exception
        End Try
    End Function
    ''' <SUMMARY>

    ''' CAMBIA EL TAMAÑO DE UNA IMAGEN A UN PORCENTAJE DEL TAMAÑO ACTUAL.

    ''' </SUMMARY>
    Private Sub RESIZEIMAGE(ByVal PERCENT As Double)
        Try

            ' ACTUALICE LA OPERACIÓN DE DESHACER DE LA IMAGEN Y EL MENÚ.

            UNDOIMAGE = CType(CURRENTIMAGE.Clone(), Image)
            UNDO.ENABLED = True

            ' CAMBIE EL TAMAÑO DE LA IMAGEN.

            Dim SOURCEBITMAP As New Bitmap(CURRENTIMAGE)
            Dim DESTBITMAP As New Bitmap(CInt(SOURCEBITMAP.Width * PERCENT / 100), CInt(SOURCEBITMAP.Height * PERCENT / 100))
            Dim DESTGRAPHIC As Graphics = Graphics.FromImage(DESTBITMAP)
            DESTGRAPHIC.DrawImage(SOURCEBITMAP, 0, 0, DESTBITMAP.Width + 1, DESTBITMAP.Height + 1)
            CURRENTIMAGE = DESTBITMAP

            ' ESTABLEZCA EL ZOOM EN LA CONFIGURACIÓN DE ZOOM ACTUAL.

            ZOOM(ZOOMFACTOR)

            ' ACTUALICE LAS ETIQUETAS DE ANCHO Y ALTO DEL FORMULARIO.

            UPDATEWIDTHANDHEIGHT()
        Catch EX As Exception
        End Try
    End Sub

''' <SUMMARY>

''' CREA EL NEGATIVO DE LA IMAGEN ACTUAL

''' </SUMMARY>
Private Sub DRAWNEGATIVEIMAGE()
        Try

            ' CREE LA MATRIZ DE COLORES DE UN NEGATIVO.

            Dim CMATRIX As ColorMatrix = New ColorMatrix(New Single()() _
                               {New Single() {-1, 0, 0, 0, 0},
                                New Single() {0, -1, 0, 0, 0},
                                New Single() {0, 0, -1, 0, 0},
                                New Single() {0, 0, 0, 1, 0},
                                New Single() {0, 0, 0, 0, 1}})

            ' DIBUJE LA IMAGEN MEDIANTE LA MATRIZ DE COLORES.

            DRAWADJUSTEDIMAGE(CMATRIX)
        Catch EX As Exception
        End Try
    End Sub
    ''' <SUMMARY>

    ''' CONVIERTE LA IMAGEN ACTUAL EN ESCALA DE GRISES

    ''' </SUMMARY>
    Public Function CONVERTTOGRAYSCALE() As Boolean
        Try
            ' CREE LA MATRIZ DE COLORES DE UNA IMAGEN EN ESCALA DE GRISES.
            Dim CMATRIX As ColorMatrix = New ColorMatrix(New Single()() _
                                   {New Single() {0.299, 0.299, 0.299, 0, 0},
                                    New Single() {0.587, 0.587, 0.587, 0, 0},
                                    New Single() {0.114, 0.114, 0.114, 0, 0},
                                    New Single() {0, 0, 0, 1, 0},
                                    New Single() {0, 0, 0, 0, 1}})

            ' DIBUJE LA IMAGEN MEDIANTE LA MATRIZ DE COLORES.

            DRAWADJUSTEDIMAGE(CMATRIX)
        Catch EX As Exception
        End Try
    End Function
    ''' <SUMMARY>

    ''' CREA EL NEGATIVO DE LA IMAGEN ACTUAL

    ''' </SUMMARY>
    Private Sub NEGATIVE_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles NEGATIVE.CLICK
        DRAWNEGATIVEIMAGE()
    End Sub
    ''' <SUMMARY>

    ''' CONVIERTE LA IMAGEN ACTUAL EN ESCALA DE GRISES

    ''' </SUMMARY>

    Private Sub GRAYSCALE_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles GRAYSCALE.CLICK
        CONVERTTOGRAYSCALE()
    End Sub
    ''' <SUMMARY>

    ''' CAMBIA EL TAMAÑO DE LA IMAGEN

    ''' </SUMMARY>
    Private Sub RESIZEBUTTON_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles RESIZEBUTTON.CLICK
        Try
            Dim VALIDATIONMSG As String =
                TXTPERCENT.TAG.TOSTRING & " DEBE SER UN NUMERO ENTERO POSITIVO"

            ' VALIDE LA ENTRADA EN EL CUADRO DE TEXTO.

            With TXTPERCENT
                VALIDATIONMSG &= "."
                If .TEXT.TRIM = "" Then
                    REJECTTEXTBOX(VALIDATIONMSG, TXTPERCENT)
                    Exit Sub
                End If
                If Not IsNumeric(.TEXT.TRIM) Then
                    REJECTTEXTBOX(VALIDATIONMSG, TXTPERCENT)
                    Exit Sub
                Else
                    Dim INTEGERVALUE As Integer
                    Try
                        INTEGERVALUE = CInt(.TEXT.TRIM)
                        If INTEGERVALUE <= 0 Then
                            REJECTTEXTBOX(VALIDATIONMSG, TXTPERCENT)
                            Exit Sub
                        End If
                    Catch EXP As Exception
                        REJECTTEXTBOX(VALIDATIONMSG, TXTPERCENT)
                        Exit Sub
                    End Try
                End If
            End With

            ' LLAME AL MÉTODO RESIZEIMAGE.

            RESIZEIMAGE(CDbl(TXTPERCENT.TEXT))
        Catch EX As Exception
        End Try
    End Sub
    ''' <SUMMARY>

    ''' CONVIERTE LOS VALORES DE RECORTE EN VALORES QUE SE AJUSTAN A LA IMAGEN ACTUAL.

    ''' </SUMMARY>
    Private Sub TRANSLATECROPVALUES()
        Try
            If CInt(LEFTINPUT.TEXT) > CURRENTIMAGE.Width Then
                LEFTINPUT.TEXT = CStr(CURRENTIMAGE.Width)
            End If
            If CInt(TOPINPUT.TEXT) > CURRENTIMAGE.Height Then
                TOPINPUT.TEXT = CStr(CURRENTIMAGE.Height)
            End If
            If CInt(LEFTINPUT.TEXT) + CInt(WIDTHINPUT.TEXT) > CURRENTIMAGE.Width Then
                WIDTHINPUT.TEXT = CStr(CURRENTIMAGE.Width - CInt(LEFTINPUT.TEXT))
            End If
            If CInt(TOPINPUT.TEXT) + CInt(HEIGHTINPUT.TEXT) > CURRENTIMAGE.Height Then
                HEIGHTINPUT.TEXT = CStr(CURRENTIMAGE.Height - CInt(TOPINPUT.TEXT))
            End If
        Catch EX As Exception
        End Try
    End Sub
    ''' <SUMMARY>

    ''' RECORTA LA IMAGEN DE ACUERDO CON LOS VALORES DE RECORTE

    ''' </SUMMARY>

    ''' <PARAM NAME="SENDER"></PARAM>
    ''' <PARAM NAME="E"></PARAM>
    ''' <REMARKS></REMARKS>
    Private Sub CROPBUTTON_CLICK(ByVal SENDER As System.Object,
        ByVal E As System.EventArgs) Handles CROPBUTTON.CLICK
        Try
            If ISVALIDCROPPINGINPUT() Then
                UNDOIMAGE = CType(CURRENTIMAGE.Clone(), Image)
                UNDO.ENABLED = True
                TRANSLATECROPVALUES()
                Dim RECSOURCE As New Rectangle(
                    CInt(LEFTINPUT.TEXT), CInt(TOPINPUT.TEXT),
                    CInt(WIDTHINPUT.TEXT), CInt(HEIGHTINPUT.TEXT))
                Dim BMPCROPPED As New Bitmap(
                    CInt(WIDTHINPUT.TEXT), CInt(HEIGHTINPUT.TEXT))
                Dim GRBITMAP As Graphics = Graphics.FromImage(BMPCROPPED)
                GRBITMAP.DrawImage(CURRENTIMAGE, 0, 0,
                    RECSOURCE, GraphicsUnit.Pixel)
                CURRENTIMAGE = BMPCROPPED
                ZOOM(ZOOMFACTOR)
            End If
        Catch EX As Exception
        End Try
    End Sub

''' <SUMMARY>

''' DETERMINA SI LOS VALORES DE RECORTE SON VÁLIDOS

''' </SUMMARY>
Private Function ISVALIDCROPPINGINPUT() As Boolean

        ' RECORRA EN ITERACIÓN LOS CUADROS DE TEXTO

        For Each TXT As TextBox In New TextBox() _
            {TOPINPUT, LEFTINPUT, WIDTHINPUT, HEIGHTINPUT}
            Dim VALIDATIONMSG As String =
                TXT.Tag.ToString & " DEBE SER UN NUMERO ENTERO POSITIVO"
            With TXT
                If (TXT Is LEFTINPUT) Or (TXT Is TOPINPUT) Then
                    VALIDATIONMSG &= " O CERO."
                Else
                    VALIDATIONMSG &= "."
                End If

                ' SI NO HAY NINGUNA ENTRADA.

                If .Text.Trim = "" Then
                    REJECTTEXTBOX(VALIDATIONMSG, TXT)
                    Return False
                End If

                ' SI NO HAY NINGUNA ENTRADA NUMÉRICA.

                If Not IsNumeric(.Text.Trim) Then
                    REJECTTEXTBOX(VALIDATIONMSG, TXT)
                    Return False
                Else
                    Dim INTEGERVALUE As Integer

                    ' DETERMINE SI LA ENTRADA ES UN NÚMERO POSITIVO.

                    Try
                        INTEGERVALUE = CInt(.Text.Trim)
                        If (TXT Is LEFTINPUT) Or (TXT Is TOPINPUT) Then
                            If INTEGERVALUE < 0 Then
                                REJECTTEXTBOX(VALIDATIONMSG, TXT)
                                Return False
                            End If
                        ElseIf INTEGERVALUE <= 0 Then
                            REJECTTEXTBOX(VALIDATIONMSG, TXT)
                            Return False
                        End If
                    Catch EXP As Exception
                        REJECTTEXTBOX(VALIDATIONMSG, TXT)
                        Return False
                    End Try
                End If
            End With
        Next
        Return True
    End Function
    Private Sub REJECTTEXTBOX(ByVal MESSAGE As String, ByVal TXT As TextBox)
        MessageBox.Show(MESSAGE, Me.TEXT, MessageBoxButtons.OK, MessageBoxIcon.Error)
        TXT.SelectAll()
        TXT.Focus()
    End Sub
    ''' <SUMMARY>

    ''' DIBUJA UN CUADRO EN EL QUE SE MUESTRA DÓNDE SE VA A PRODUCIR EL RECORTE.

    ''' </SUMMARY>
    Sub VISTA()
        Try
            If ISVALIDCROPPINGINPUT() Then

                ' VUELVA A DIBUJAR LA IMAGEN PARA QUITAR EL CUADRO DE RECORTE ANTERIOR.

                MAINIMAGE.REFRESH()
                Dim LEFT As Integer = CInt((MAINIMAGE.WIDTH - SCREENIMAGEWIDTH) / 2)
                Dim TOP As Integer = CInt((MAINIMAGE.HEIGHT - SCREENIMAGEHEIGHT) / 2)
                TRANSLATECROPVALUES()

                ' DIBUJE UN RECTÁNGULO ROJO QUE INDIQUE DÓNDE SE VA A RECORTAR LA IMAGEN.

                Dim RECCROPBOX As New Rectangle(CInt(CDbl(LEFTINPUT.TEXT) * ZOOMFACTOR + LEFT - 1),
                    CInt(CDbl(TOPINPUT.TEXT) * ZOOMFACTOR + TOP - 1), CInt(CDbl(WIDTHINPUT.TEXT) * ZOOMFACTOR),
                        CInt(CDbl(HEIGHTINPUT.TEXT) * ZOOMFACTOR))
                MAINIMAGE.CREATEGRAPHICS.DRAWRECTANGLE(Pens.Red, RECCROPBOX)
            End If
        Catch EX As Exception
        End Try
    End Sub
    Private Sub TESTBUTTON_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles TESTBUTTON.CLICK
        Call VISTA()
    End Sub
    ''' <SUMMARY>

    ''' ACTUALIZA LAS ETIQUETAS DE ANCHO Y ALTO DEL FORMULARIO.

    ''' </SUMMARY>
    Private Sub UPDATEWIDTHANDHEIGHT()
        WIDTHLABEL.TEXT = "ANCHO: " & CURRENTIMAGE.Width
        HEIGHTLABEL.TEXT = "ALTURA: " & CURRENTIMAGE.Height
    End Sub

#End Region

#Region "MÉTODOS ROTATE Y FLIP"
    ''' <SUMMARY>

    ''' GIRA O VOLTEA LA IMAGEN ACTUAL.

    ''' </SUMMARY>
    Private Sub ROTATEFLIP(ByVal DEGREES As Integer)
        Try
            ' ACTUALICE LA OPERACIÓN DE DESHACER DE LA IMAGEN Y EL MENÚ.
            UNDOIMAGE = CType(CURRENTIMAGE.Clone(), Image)
            UNDO.ENABLED = True
            Select Case DEGREES
                Case 0
                    CURRENTIMAGE.RotateFlip(RotateFlipType.RotateNoneFlipX)
                Case 1
                    CURRENTIMAGE.RotateFlip(RotateFlipType.RotateNoneFlipY)
                Case 90
                    CURRENTIMAGE.RotateFlip(RotateFlipType.Rotate90FlipNone)
                    Exit Select
                Case 180
                    CURRENTIMAGE.RotateFlip(RotateFlipType.Rotate180FlipNone)
                    Exit Select
                Case 270
                    CURRENTIMAGE.RotateFlip(RotateFlipType.Rotate270FlipNone)
                Case Else
                    Exit Select
            End Select
            ' MUESTRE LA IMAGEN ACTUAL CON OPCIONES DE ZOOM.
            ZOOM(ZOOMFACTOR)
        Catch EX As Exception
        End Try
    End Sub
    ''' <SUMMARY>

    ''' GIRA 90 GRADOS LA IMAGEN ACTUAL.

    ''' </SUMMARY>
    Private Sub ROTATE90_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles ROTATE90.CLICK
        ROTATEFLIP(90)
    End Sub

    ''' <SUMMARY>

    ''' GIRA 180 GRADOS LA IMAGEN ACTUAL

    ''' </SUMMARY>

    Private Sub ROTATE180_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles ROTATE180.CLICK
        ROTATEFLIP(180)
    End Sub
    ''' <SUMMARY>

    ''' GIRA 270 GRADOS LA IMAGEN ACTUAL

    ''' </SUMMARY>
    Private Sub ROTATE270_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles ROTATE270.CLICK
        ROTATEFLIP(270)
    End Sub
    ''' <SUMMARY>

    ''' VOLTEA LA IMAGEN ACTUAL SOBRE EL EJE Y.

    ''' </SUMMARY>
    Private Sub HORIZONTALFLIP_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles HORIZONTALFLIP.CLICK
        ROTATEFLIP(0)
        ZOOM(ZOOMFACTOR)
    End Sub
    ''' <SUMMARY>

    ''' VOLTEA LA IMAGEN ACTUAL SOBRE EL EJE X.

    ''' </SUMMARY>
    Private Sub VERTICALFLIP_CLICK(ByVal SENDER As System.Object,
     ByVal E As System.EventArgs) Handles VERTICALFLIP.CLICK
        ROTATEFLIP(1)
        ZOOM(ZOOMFACTOR)
    End Sub

#End Region

#Region "MÉTODOS REVERT Y UNDO"
    ''' <SUMMARY>

    ''' RESTABLECE LA IMAGEN ORIGINAL A SU REPRESENTACIÓN EN DISCO

    ''' </SUMMARY>
    Private Sub REVERT_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles REVERT.CLICK
        UNDOIMAGE = CType(CURRENTIMAGE.Clone(), Image)
        CURRENTIMAGE = CType(ORIGINALIMAGE.Clone(), Image)
        ZOOM(ZOOMFACTOR)
    End Sub
    ''' <SUMMARY>

    ''' RESTABLECE LA IMAGEN AL ASPECTO QUE TENÍA ANTES DE EFECTUAR EL ÚLTIMO CAMBIO.

    ''' </SUMMARY>
    Private Sub UNDO_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles UNDO.CLICK
        CURRENTIMAGE = CType(UNDOIMAGE.Clone(), Image)
        ZOOM(ZOOMFACTOR)

        ' ACTUALICE EL MENÚ DE DESHACER A DESHABILITADO.

        UNDO.ENABLED = False
     End Sub

#End Region
#Region "MÉTODOS OPEN Y SAVE"

''' <SUMMARY>

''' ABRE UNA IMAGEN DE UN ARCHIVO Y ACTUALIZA EL FORMULARIO.

''' </SUMMARY>

Private Sub OPENIMAGE_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles OPENIMAGE.CLICK
        If OPENFILEDIALOG1.SHOWDIALOG = Windows.FORMS.DIALOGRESULT.OK Then

            ' ABRA LA IMAGEN

            ORIGINALIMAGE = Image.FromFile(OPENFILEDIALOG1.FILENAME)
            CURRENTIMAGE = CType(ORIGINALIMAGE.Clone(), Image)

            ' DETERMINE EL ZOOM ADECUADO PARA LA VISTA INICIAL DE LA IMAGEN.

            If CURRENTIMAGE.Width / 2 > MAINIMAGE.WIDTH Or
             CURRENTIMAGE.Height / 2 > MAINIMAGE.HEIGHT Then
                ZOOM(0.25)
            ElseIf CURRENTIMAGE.Width > MAINIMAGE.WIDTH Or
             CURRENTIMAGE.Height > MAINIMAGE.HEIGHT Then
                ZOOM(0.5)
            ElseIf CURRENTIMAGE.Width * 2 < MAINIMAGE.WIDTH _
             And CURRENTIMAGE.Height * 2 < MAINIMAGE.HEIGHT Then
                ZOOM(2)
            ElseIf CURRENTIMAGE.Width * 2 > MAINIMAGE.WIDTH _
             And CURRENTIMAGE.Height * 2 > MAINIMAGE.HEIGHT Then
                ZOOM(2)
            ElseIf CURRENTIMAGE.Width * 1.5 < MAINIMAGE.WIDTH _
             And CURRENTIMAGE.Height * 2 < MAINIMAGE.HEIGHT Then
                ZOOM(1.5)
            Else
                ZOOM(1)
            End If

            ' ACTUALICE EL FORMULARIO PARA UNA NUEVA IMAGEN.

            UPDATEWIDTHANDHEIGHT()
            UNDO.ENABLED = False
            IMAGETOOLSTRIPMENUITEM.VISIBLE = True
            EDITMENU.VISIBLE = True
            SAVETHUMBNAILAS.ENABLED = True
            SAVEIMAGEAS.ENABLED = True
            RESIZING.ENABLED = True
            CROPPING.ENABLED = True
            IMAGEINFO.ENABLED = True
            MAINIMAGE.ENABLED = True
        End If
    End Sub
    ''' <SUMMARY>

    ''' GUARDA LA IMAGEN EN EL ARCHIVO ELEGIDO.

    ''' </SUMMARY>
    Private Sub SAVEIMAGEAS_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles SAVEIMAGEAS.CLICK
        If SAVEFILEDIALOG1.SHOWDIALOG() = Windows.FORMS.DIALOGRESULT.OK Then
            CURRENTIMAGE.Save(SAVEFILEDIALOG1.FILENAME, GETIMAGEFORMAT())
        End If
    End Sub
    ''' <SUMMARY>

    ''' GUARDA LA IMAGEN ACTUAL COMO UNA MINIATURA

    ''' </SUMMARY>
    Private Sub SAVETHUMBNAILAS_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles SAVETHUMBNAILAS.CLICK
        Dim SOURCEBITMAP As New Bitmap(CURRENTIMAGE)
        Dim DESTBITMAP As New Bitmap(
         CInt(SOURCEBITMAP.Width * THUMBNAILFACTOR),
          CInt(SOURCEBITMAP.Height * THUMBNAILFACTOR))
        Dim DESTGRAPHIC As Graphics = Graphics.FromImage(DESTBITMAP)
        DESTGRAPHIC.DrawImage(SOURCEBITMAP, 0, 0,
         DESTBITMAP.Width + 1, DESTBITMAP.Height + 1)
        If SAVEFILEDIALOG1.SHOWDIALOG() = Windows.FORMS.DIALOGRESULT.OK Then
            DESTBITMAP.Save(SAVEFILEDIALOG1.FILENAME, GETIMAGEFORMAT())
        End If
    End Sub
    ''' <SUMMARY>

    ''' OBTIENE EL FORMATO DE LA IMAGEN DEL CUADRO DE DIÁLOGO SAVE.

    ''' </SUMMARY>
    Private Function GETIMAGEFORMAT() As ImageFormat
        Select Case SAVEFILEDIALOG1.FILTERINDEX
            Case 1
                Return ImageFormat.Bmp
            Case 2
                Return ImageFormat.Jpeg
            Case 3
                Return ImageFormat.Gif
            Case Else
                Return ImageFormat.Tiff
        End Select
    End Function
    Private Sub EXITAPPLICATION_CLICK_1(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles EXITAPPLICATION.CLICK
        Me.CLOSE()
    End Sub
#End Region
    Private Sub BUTTON2_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles BUTTON2.CLICK
        If CDbl(TOPINPUT.TEXT) = 0 Then
            TOPINPUT.TEXT = "0"
        Else
            TOPINPUT.TEXT = CStr(Val(TOPINPUT.TEXT) + 1)
        End If
        Call VISTA()
    End Sub
    Private Sub BUTTON1_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles BUTTON1.CLICK
        If CDbl(TOPINPUT.TEXT) = 0 Then
            TOPINPUT.TEXT = "0"
        Else
            TOPINPUT.TEXT = CStr(Val(TOPINPUT.TEXT) - 1)
        End If
        Call VISTA()
    End Sub
    Private Sub BUTTON4_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles BUTTON4.CLICK
        If CDbl(LEFTINPUT.TEXT) = 0 Then
            LEFTINPUT.TEXT = "0"
        Else
            LEFTINPUT.TEXT = CStr(Val(LEFTINPUT.TEXT) - 1)
        End If
        Call VISTA()
    End Sub
    Private Sub BUTTON8_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles BUTTON8.CLICK
        If CDbl(WIDTHINPUT.TEXT) = 0 Then
            WIDTHINPUT.TEXT = "0"
        Else
            WIDTHINPUT.TEXT = CStr(Val(WIDTHINPUT.TEXT) - 1)
        End If
        Call VISTA()
    End Sub
    Private Sub BUTTON3_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles BUTTON3.CLICK
        If CDbl(LEFTINPUT.TEXT) = 0 Then
            LEFTINPUT.TEXT = "0"
        Else
            LEFTINPUT.TEXT = CStr(Val(TOPINPUT.TEXT) + 1)
        End If
        Call VISTA()
    End Sub
    Private Sub BUTTON6_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles BUTTON6.CLICK
        If CDbl(HEIGHTINPUT.TEXT) = 0 Then
            HEIGHTINPUT.TEXT = "0"
        Else
            HEIGHTINPUT.TEXT = CStr(Val(HEIGHTINPUT.TEXT) - 1)
        End If
        Call VISTA()
    End Sub
    Private Sub BUTTON7_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles BUTTON7.CLICK
        If CDbl(WIDTHINPUT.TEXT) = 0 Then
            WIDTHINPUT.TEXT = "0"
        Else
            WIDTHINPUT.TEXT = CStr(Val(WIDTHINPUT.TEXT) + 1)
        End If
        Call VISTA()
    End Sub
    Private Sub BUTTON5_CLICK(ByVal SENDER As System.Object, ByVal E As System.EventArgs) Handles BUTTON5.CLICK
        If CDbl(HEIGHTINPUT.TEXT) = 0 Then
            HEIGHTINPUT.TEXT = "0"
        Else
            HEIGHTINPUT.TEXT = CStr(Val(HEIGHTINPUT.TEXT) + 1)
        End If
        Call VISTA()
    End Sub
End Class

1 comentario:

  1. Estimado, me gustaria me puedas compartir este proyecto, y si tienes alguna cuenta paypal, te envio un dinerito :)

    ResponderEliminar