buenas tardes vengo para que aprender un poco sobre el visual basic 10

Iniciado por genesisp, 24 Julio 2016, 22:15 PM

0 Miembros y 1 Visitante están viendo este tema.

genesisp

mi duda es sobre esto :/ tengo un cuadro el cual da vuelta la flecha roja en 360 grados , mi proyecto se trata de que detecte el grado exacto de la flecha roja automáticamente , ya que la flecha rotara cada cierto tiempo  :-(
yo escaneo esa imagen pero como haría para que me diera el grado exacto de la flecha roja :c directamente cada vez que cambie si podrían ayudarme les agradecía enserio es para un proyecto de la universidad



Mod: No escribir en mayúsculas

Lekim

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:

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