hola
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:
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
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 (vbnet) [Seleccionar]
'//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