La verdad, este problema me suena que se preguntó antes, la imagen esa del cuadrado ese me suena de haberla visto antes.
De todos modos a ver si te sirve esto.
Instrucciones:
- Crea un Nuevo Proyecto
- Selecciona Aplicación de Windows Forms
- Deja todo en blanco y copia y pega el siguiente código:
Código
'//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
Como funciona:
- Copia la imagen en el portapapeles
- Haz Clic sobre el botón Pegar
- Mueve el HscrollBar para aumentar los grados del radio, hasta que coincida con el de la imagen.
Puedes usar las flechitas del HScrollBar para hacerlo de 1 en 1.
NOTA:
En el evento ButtonPaste_Click he puesto tres opciones distintas para pegar la imagen en el PictureBox pero dos de ellas están deshabilitadas.
Lo he puesto para que lo haga desde el portapapeles pero si quieres lo puedes cambiar
Otra opción es que uses un transportador de ángulos en la pantalla XD. No se, solo se me ocurre este programilla que he hecho.
s2s