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




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