'//Programado por Lekim//
Option Strict Off
Imports System.Drawing.Graphics
Imports System.IO
Public Class Form1
Dim picCuadrado As New PictureBox
Dim hScrollGrados As New HScrollBar
Dim ButtonPaste As New Button
''' <summary>
''' Permite mostrar el radio inicial a 0 grados al inicio de la aplicación
''' </summary>
''' <param name="e"></param>
''' <remarks></remarks>
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
Actualizar_Radio()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Size = CType(New Point(430, 360), Drawing.Size)
'//Crea un control Picture
Me.Controls.Add(picCuadrado)
With picCuadrado
picCuadrado.BorderStyle = BorderStyle.FixedSingle
picCuadrado.Size = CType(New Point(300, 300), Drawing.Size)
End With
Me.Controls.Add(ButtonPaste)
With ButtonPaste
.Text = "Pegar"
.Location = New Point(Me.picCuadrado.Width + 20, 10)
AddHandler .Click, AddressOf ButtonPaste_Click
End With
'//Crea un control HScrollBar
Me.Controls.Add(hScrollGrados)
With hScrollGrados
.Width = 300
.Top = picCuadrado.Height '+ hScrollGrados.Height
.Minimum = 0
.Maximum = 360
.SmallChange = 1
.LargeChange = 1
'Eventos para hScrollGrados
AddHandler .Scroll, AddressOf hScroll_Scroll
AddHandler .ValueChanged, AddressOf hScroll_ValueChanged
End With
End Sub
Private Sub hScroll_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs)
Actualizar_Radio()
Me.Refresh()
End Sub
Private Sub hScroll_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs)
Actualizar_Radio()
Me.Refresh()
End Sub
Sub Actualizar_Radio()
picCuadrado.Refresh()
'//Dibuja el radio
DIBUJAR_RADIO(picCuadrado, hScrollGrados.Value, System.Drawing.Color.Blue, 5)
'//Muestra los grados
Me.CreateGraphics.DrawString(hScrollGrados.Value & "º", New Font("Arial", 30, _
FontStyle.Bold, _
GraphicsUnit.Point, 2) _
, Brushes.Blue, picCuadrado.Width + 15, 250)
End Sub
Private Sub ButtonPaste_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
'//Obtiene imagen desde internet
' Dim Client As New System.Net.WebClient()
' Client = New System.Net.WebClient
' Dim BinData As Byte() = Client.DownloadData("http://image.prntscr.com/image/c22000d107b945968d7d232228a3bcba.png") 'descarga el archivo como byte
' Dim imgStream As New MemoryStream(BinData) 'Convierte la imagen a stream
' Dim img As New Bitmap(Image.FromStream(imgStream))
' Dim img2 As New Bitmap(img, picCuadrado.Width, picCuadrado.Height)
' picCuadrado.Image = img2
'//Obtiene desde archivo
'Dim img As New Bitmap(Image.FromFile("C:\User\Documents\c22000d107b945968d7d232228a3bcba.png"))
'Dim img2 As New Bitmap(img, picCuadrado.Width, picCuadrado.Height)
'picCuadrado.Image = img2
'//Obtiene imagen desde el portapapeles
If Clipboard.GetImage IsNot Nothing Then
Dim img As New Bitmap(Clipboard.GetImage)
Dim img2 As New Bitmap(img, picCuadrado.Width, picCuadrado.Height)
picCuadrado.Image = img2
End If
Actualizar_Radio()
End Sub
''' <summary>
''' Función para dibujar un radio
''' </summary>
''' <param name="objPicture"></param>
''' <param name="Grados"></param>
''' <param name="mColor"></param>
''' <param name="Grosor"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function DIBUJAR_RADIO(ByVal objPicture As PictureBox, _
ByVal Grados As Integer, _
ByVal mColor As Color, _
ByVal Grosor As Integer) As Boolean
Dim X1 As Integer
Dim Y1 As Integer
Dim X2 As Integer
Dim Y2 As Integer
Dim Angulo As Integer 'Ángulo en grados
Dim RadioLong As Integer 'Longitud del radio
'CENTRO IMAGEN
X1 = CInt(picCuadrado.Width / 2)
Y1 = CInt(picCuadrado.Height / 2)
'ÁNGULO
Angulo = Grados
RadioLong = picCuadrado.Width
'COORDENADA X E Y
X2 = CInt(Int((RadioLong * Math.Cos((360 - Angulo) * (Math.PI / 180))) + X1))
Y2 = CInt(Int((RadioLong * Math.Sin((360 - Angulo) * (Math.PI / 180))) + Y1))
'DIBUJA EL RADIO
Dim Radio As Graphics = objPicture.CreateGraphics
Dim pen As New Drawing.Pen(mColor, Grosor)
Radio.DrawLine(pen, X1, Y1, X2, Y2)
Return Nothing
End Function
End Class