Incluir en un formulario Windows los siguientes Controles:
1.- 4 GropuBox (Imagen,Acciones,Propiedades,Direccion de Giro).
2.- 3 Botones (Cargar Imagen, Girar Imagen, Guardar Imagen).
3.- 1 Picturebox
4.- 1 Label (Grados).
5.- 1 Textbox(Grados).
6.- 2 RadioButtons(Derecha e Izquierda).
A continuacion Pego el codigo de la clase encargada de girar la Imagen.
Codigo VB.NET
Private Function girarImagen(ByVal imgOriginal As Image, ByVal grados As Decimal) As Image Try If rdbDerecha.Checked Then grados = -grados End If 'Asignamos imagen original Dim bmp As New Bitmap(imgOriginal) 'Serie de Puntos para conocer las esquinas de la imagen Dim lrg As Single = bmp.Width Dim alt As Single = bmp.Height Dim esq As Point() = {New Point(0, 0), New Point(lrg, 0), New Point(0, alt), New Point(lrg, alt)} ' Establece centro del Rectangulo Dim cx As Single = lrg / 2 Dim cy As Single = alt / 2 Dim i As Long For i = 0 To 3 esq(i).X -= cx esq(i).Y -= cy Next i Dim PI As Decimal = 3.1416 ' Rotacion. Dim angtheta As Single = Single.Parse(grados) * PI / 180.0 Dim sintheta As Single = Math.Sin(angtheta) Dim costheta As Single = Math.Cos(angtheta) Dim X As Single Dim Y As Single For i = 0 To 3 X = esq(i).X Y = esq(i).Y esq(i).X = X * costheta + Y * sintheta esq(i).Y = -X * sintheta + Y * costheta Next i ' Translacion X >= 0 and Y >=0 para todas las esquinas. Dim xmin As Single = esq(0).X Dim ymin As Single = esq(0).Y For i = 1 To 3 If xmin > esq(i).X Then xmin = esq(i).X If ymin > esq(i).Y Then ymin = esq(i).Y Next i For i = 0 To 3 esq(i).X -= xmin esq(i).Y -= ymin Next i ' Crear bitmap de salida y objetco graphics. Dim bmpSalida As New Bitmap(CInt(-2 * xmin), CInt(-2 * ymin)) Dim grSalida As Graphics = Graphics.FromImage(bmpSalida) 'Preservar Ultima Esquina ReDim Preserve esq(2) 'Pintamos resultado de imagen Girada. grSalida.DrawImage(bmp, esq) Return bmpSalida Catch ex As Exception MsgBox("Error al Girar Imagen, Error:" & ex.Message, MsgBoxStyle.Critical, "Excepcion") Return Nothing End Try End FunctionCodigo C#private Image girarImagen(Image imgOriginal, decimal grados) { try { if (rdbDerecha.Checked) { grados = -grados; } //Asignamos imagen original Bitmap bmp = new Bitmap(imgOriginal); //Serie de Puntos para conocer las esquinas de la imagen float lrg = bmp.Width; float alt = bmp.Height; Point[] esq = { new Point(0, 0), new Point(lrg, 0), new Point(0, alt), new Point(lrg, alt) }; // Establece centro del Rectangulo float cx = lrg / 2; float cy = alt / 2; long i = 0; for (i = 0; i <= 3; i++) { esq(i).X -= cx; esq(i).Y -= cy; } decimal PI = 3.1416; // Rotacion. float angtheta = float.Parse(grados) * PI / 180.0; float sintheta = Math.Sin(angtheta); float costheta = Math.Cos(angtheta); float X = 0; float Y = 0; for (i = 0; i <= 3; i++) { X = esq(i).X; Y = esq(i).Y; esq(i).X = X * costheta + Y * sintheta; esq(i).Y = -X * sintheta + Y * costheta; } // Translacion X >= 0 and Y >=0 para todas las esquinas. float xmin = esq(0).X; float ymin = esq(0).Y; for (i = 1; i <= 3; i++) { if (xmin > esq(i).X) xmin = esq(i).X; if (ymin > esq(i).Y) ymin = esq(i).Y; } for (i = 0; i <= 3; i++) { esq(i).X -= xmin; esq(i).Y -= ymin; } // Crear bitmap de salida y objetco graphics. Bitmap bmpSalida = new Bitmap(Convert.ToInt32(-2 * xmin), Convert.ToInt32(-2 * ymin)); Graphics grSalida = Graphics.FromImage(bmpSalida); //Preservar Ultima Esquina Array.Resize(ref esq, 3); //Pintamos resultado de imagen Girada. grSalida.DrawImage(bmp, esq); return bmpSalida; } catch (Exception ex) { Interaction.MsgBox("Error al Girar Imagen, Error:" + ex.Message, MsgBoxStyle.Critical, "Excepcion"); return null; } }Pues ahi esta el codigo para girar la imagen, el ejemplo completo se los dejo en el siguiente link: girarImagen.rar (75 KB) https://mega.co.nz/#!wVpmCDRA!M7jSTF2N-vGMjSGsHBAz81o9vMUg69wG3_vSG31ZuDM Cualquier pregunta o duda por aqui andamos. Saludos...
girarImagen.rar ya no está disponible para la descarga en:
ResponderEliminarhttps://mega.co.nz/#!wVpmCDRA!M7jSTF2N-vGMjSGsHBAz81o9vMUg69wG3_vSG31ZuDM
Excelente tutorial como para hacer un Copy/Paste ya que no explicaste nada, así que no ahí de otra. Otra pagina donde no aprendí anda.
ResponderEliminar