Saber Color de un Pixel y la Proporcion de imagen PictureBox

Y aqui os dejo el codigo

 

4 comentarios en “Saber Color de un Pixel y la Proporcion de imagen PictureBox”

  1. Hola Jonoxet, perdona por np haberte contesttado antes, he estado muy liado y no he tenido tiempo para esto.
    Este es el codigo de mi pequeño juego, no es gran cosa, pero por algo hay que empezar:

    Imports System.IO

    Public Class Form1

    Dim a As Long

    Public MiTexto As String
    Dim PosX1() As Long
    Dim PosY1() As Long
    Dim PosX2() As Long
    Dim PosY2() As Long
    Dim Signo() As String
    Dim Cuantos As Long
    Dim b As Long
    Dim Ultimo As Long

    ‘:::Ruta donde crearemos nuestro archivo txt
    Dim ruta As String = «C:\Users\jjara\Documents\Visual Studio 2010\Projects\Dibujar Lineas\»
    ‘:::Nombre del archivo
    Dim archivo As String = «Circuito.txt»
    Dim x As Integer
    Dim y As Integer

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    x = 350
    y = 150
    PcBoxBola.Location = New Point(x, y)

    a = 0
    b = 0
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs)
    Timer1.Enabled = True

    End Sub

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick

    mover()
    End Sub

    Sub LeerArchivo()
    ‘:::Creamos nuestro objeto de tipo StreamReader que nos permite leer archivos
    Dim leer As New StreamReader(ruta & archivo)

    Try
    ‘:::Indicamos mediante un While que mientras no sea el ultimo caracter repita el proceso
    While leer.Peek -1
    ‘:::Leemos cada linea del archivo TXT
    Dim linea As String = leer.ReadLine()
    ‘:::Validamos que la linea no este vacia
    If String.IsNullOrEmpty(linea) Then
    Continue While
    End If

    MiTexto = linea

    End While

    leer.Close()

    Catch ex As Exception
    MsgBox(«Se presento un problema al leer el archivo: » & ex.Message, MsgBoxStyle.Critical, «:::Aprendamos de Programación:::»)
    End Try
    End Sub

    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click

    b = 0
    Dim a As Long
    LeerArchivo()
    Cuantos = Microsoft.VisualBasic.Left(MiTexto, 3)
    ReDim PosX1(Cuantos)
    ReDim PosY1(Cuantos)
    ReDim PosX2(Cuantos)
    ReDim PosY2(Cuantos)
    ReDim Signo(Cuantos)
    PosX1(0) = 600
    PosY1(0) = 70
    PosX2(0) = 650
    PosY2(0) = 70

    For a = 1 To Cuantos
    PosX1(a) = PosX2(a – 1)
    PosY1(a) = PosY2(a – 1)
    Signo(a) = Mid(MiTexto, 7 + (10 * (a – 1)), 1)
    PosX2(a) = Mid(MiTexto, (4 + (10 * (a – 1))), 3) + PosX2(a – 1)

    If Signo(a) = «+» Then

    PosY2(a) = Mid(MiTexto, (8 + (10 * (a – 1))), 3) + PosY2(a – 1)

    ElseIf Signo(a) = «-» Then

    PosY2(a) = PosY2(a – 1) – Mid(MiTexto, (8 + (10 * (a – 1))), 3)

    End If
    Ultimo = PosX2(a)

    Next a
    Timer1.Enabled = True
    End Sub
    Private Sub mover()
    ‘NUEVO
    Dim myGraphics As Graphics = Me.CreateGraphics
    Dim myPen As Pen
    myPen = New Pen(Brushes.DarkMagenta, 1)
    myGraphics.DrawLine(myPen, 10, 10, 100, 10)
    ‘FIN NUEVO
    Dim posi1 As Long
    Dim posi2 As Long
    Dim posi3 As Long
    Dim posi4 As Long
    Dim a As Long

    Me.CreateGraphics.Clear(Color.Azure)
    PictureBox2.CreateGraphics.Clear(Color.Azure)
    If b < Ultimo Then

    For a = 0 To Cuantos
    posi1 = PosX1(a)
    posi2 = PosY1(a)
    posi3 = PosX2(a)
    posi4 = PosY2(a)

    DetectarSalida()

    PictureBox2.CreateGraphics.DrawLine(Pens.Black, posi1 – b, posi2, posi3 – b, posi4)

    PictureBox2.CreateGraphics.DrawLine(Pens.Black, posi1 – b, posi2 + 150, posi3 – b, posi4 + 150)

    Next (a)
    b = b + 25

    End If

    End Sub

    Private Sub DetectarSalida()

    Dim PosicionX As Long
    Dim PosicionY As Long
    'Dim color As Long

    PosicionX = PcBoxBola.Location.X
    PosicionY = PcBoxBola.Location.Y

    'color = Form1.PointToCliPosicionXent(color.
    ' color = PixelColor(PosicionX, PosicionY)
    End Sub

    Private Sub CmdBajar_Click(sender As System.Object, e As System.EventArgs) Handles CmdBajar.Click
    y = y + 10
    PcBoxBola.Location = New Point(x, y)
    End Sub

    Private Sub CmdSubir_Click(sender As System.Object, e As System.EventArgs) Handles CmdSubir.Click
    y = y – 10
    PcBoxBola.Location = New Point(x, y)
    End Sub

    Private Sub TextBox2_TextChanged(sender As System.Object, e As System.EventArgs)

    End Sub
    End Class
    ////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////
    En el formulario hay dos picturebox y tres botones, tambien se necesita un fichero de testo en el que está las coordenadas de la "cueva", el contenido del fichero es el siguiente:

    007100+030999100+030999150-050999300+000999400-060999200+000999200+070

    Esta solo en una lineas del fichero de testo, al que lo llamo Circuito.txt.

    Muchas gracias por tu tiempo y un saludo.

  2. Hola jonoxet, muchas gracias por este cursito, es muy interesante, te queria hacer una pregunta, yo tengo un picturebox en el cual dibujo lineas y creo una especie de cueva en el que entre dons lineas una arriba y otra abajo, tengo una imagen que la muevo, y quisiera saber como hacer para detectar si me choco con el suelo o el techo de la cueva, en VB6.0, hay una funcion en la que hago un barrido verticalenete por el picturebox y detecto donde está la linea detectando el color de los limites de la cueva y si mi imagen esta en la misma posición de la linea pues detecto la colisión, pero con VB.NET no se como hacerlo, no se detectar los limites de la cueva, me puedes ayura en esto?.
    Muchas gracias.

    • Si claro, Pasame el codigo y te ayudo, hice algo parecido hace tiempo , lo voy a buscar por si te ayuda, lo mas facil es detectar por color el pixel superior e inferior del objeto que se mueve, si el color del pixel es igual al que se establece, el objeto no se pude mover.
      Para ello deberas obtener las coordenadas del objeto que se mueve y recoger con la function, seria algo asi
      Dim pb As New PictureBox
      Dim img As New Bitmap(pb.Image)
      img.GetPixel(X_posicion – 1, Y_posicion – 1) ‘ARIBA IZQUIERDA
      img.GetPixel(X_posicion – 1, Y_posicion + loquemideenpixeleselmuñecodeY) ‘ABAJO IZQUIERDA
      img.GetPixel(X_posicion + loquemideenpixeleselmuñecodeX, Y_posicion – 1) ‘ARRIBA DERECHA
      img.GetPixel(X_posicion + loquemideenpixeleselmuñecodeX, Y_posicion + loquemideenpixeleselmuñecodeY) ‘ABAJO DERECHA

Deja un comentario