none
Como comparar 2 colores en AGRB RRS feed

  • Pregunta

  • Buenas tengo este codigo que ya recorro la imagen de arriba hacia abajo pixcel a pixcel el problema que tengo es que no se como comparar que cuando pase en este caso del color

    negro que es  newBitmap.GetPixel(e.X, aa).ToString -->  A=255 G=0 R=0 B=0 

    y me detecte el color blanco newBitmap.GetPixel(e.X, aa).ToString --> A=255 G=255 R=255 B=255

    No se como compararlo

    Gracias

    Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick
            Dim newBitmap = New Bitmap(1, 1, PixelFormat.Format32bppArgb)
            newBitmap = CType(PictureBox1.Image, Bitmap)
            Me.Panel1.BackColor = newBitmap.GetPixel(e.X, e.Y)
            For aa = 0 To 309
                MsgBox(newBitmap.GetPixel(e.X, aa).ToString)
                If newBitmap.GetPixel(e.X, aa).ToString <> newBitmap.GetPixel(e.X, aa).ToString Then
                Else
                    MsgBox(newBitmap.GetPixel(e.X, aa).ToString)
                    Me.Panel1.BackColor = newBitmap.GetPixel(e.X, aa)
                End If
    
            Next
    
        End Sub

    lunes, 18 de junio de 2018 14:47

Respuestas

  • Compáralos componente a componente:

    Color c = newBitmap.GetPixel(e.X, aa)

    If c.A = 255 And c.R = 255 And c.G = 255 And c.B = 255 Then ... es blanco ...

    Tambi'en puedes poner

    If c = Color.White Then...

    Pero en este ultimo caso no estoy seguro de si te compara tambien la componente A. Siempre puedes hacer la prueba.

    • Marcado como respuesta Diablo_Rojo sábado, 23 de junio de 2018 6:46
    lunes, 18 de junio de 2018 15:08

Todas las respuestas

  • Compáralos componente a componente:

    Color c = newBitmap.GetPixel(e.X, aa)

    If c.A = 255 And c.R = 255 And c.G = 255 And c.B = 255 Then ... es blanco ...

    Tambi'en puedes poner

    If c = Color.White Then...

    Pero en este ultimo caso no estoy seguro de si te compara tambien la componente A. Siempre puedes hacer la prueba.

    • Marcado como respuesta Diablo_Rojo sábado, 23 de junio de 2018 6:46
    lunes, 18 de junio de 2018 15:08
  • Gracias por responder Alberto Poblano 

    Lo he conseguido de esta manera que me puedes decir 

    Ahora busco dibujar una lines cuando se sale del for a todo lo largo del picture

    Imports System.Drawing
    Imports System.Drawing.Imaging
    
    Public Class Form1
        Public color1 As String
    
    Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick
    
            Dim newBitmap = New Bitmap(1, 1, PixelFormat.Format32bppArgb)
            newBitmap = CType(PictureBox1.Image, Bitmap)
            color1 = newBitmap.GetPixel(e.X, e.Y).Name
            Me.Panel1.BackColor = newBitmap.GetPixel(e.X, e.Y)
            For aa = e.Y To 309
    
                
                If color1 = newBitmap.GetPixel(e.X, aa).Name Then
    
                Else
                    MsgBox(newBitmap.GetPixel(e.X, aa).Name & " " & aa)
                    Me.Panel1.BackColor = newBitmap.GetPixel(e.X, aa)
                    Exit For
                End If
    
            Next
    
        End Sub
    
    End Class

    lunes, 18 de junio de 2018 15:20
  • No consigo crear la linea justo cuando me detecta el color blanco

    Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick
    
            Dim newBitmap = New Bitmap(1, 1, PixelFormat.Format32bppArgb)
            newBitmap = CType(PictureBox1.Image, Bitmap)
            color1 = newBitmap.GetPixel(e.X, e.Y).Name
            Me.Panel1.BackColor = newBitmap.GetPixel(e.X, e.Y)
            For aa = e.Y To 309
    
    
                If color1 = newBitmap.GetPixel(e.X, aa).Name Then
    
                Else
                    MsgBox(newBitmap.GetPixel(e.X, aa).Name & " " & aa)
                    Me.Panel1.BackColor = newBitmap.GetPixel(e.X, aa)
                    Dim Picture1 As Graphics = PictureBox1.CreateGraphics
                    Picture1.DrawLine(Pens.Black, aa, aa, 0, 0)
                    Exit For
    
                End If
    
            Next
    
        End Sub

    lunes, 18 de junio de 2018 15:39
  • No consigo crear la linea justo cuando me detecta el color blanco

    ¿Dónde? No se ve nada en ese código donde se compare el color blanco. Solo se ve que compara el "color1" (que sale de un pixel) con otro pixel también obtenido con GetPixel, pero no hay ningún blanco por ningún sitio.

    Por cierto, compara los binarios de los colores (System.Drawing.Color). No compares el .Name del color. Lo primero, porque no todos los colores tienen nombre, puede haber combinaciones de R,G,B que no tengan nombre. Y lo segundo, porque será MUCHO más lento que comparar el valor binario.

    Es decir, pon simplemente Dim Color1 as System.Drawing.Color = newBitmap.GetPixel(e.X, e.Y)

    y luego compáralo usando If color1 = newBitmap.GetPixel(e.X, aa) Then ...

    No hay razón para usar un .Name en ningún sitio.

    Pero insisto, ahí no hay ningún "blanco" en ningún sitio, solo estás comparando un pixel con otro pixel, sean del color que sean.


    lunes, 18 de junio de 2018 18:06
  • Buenas Alberto Gracias por responder 

    Por que ya no lo hago por un determinado color si no que coge al pulsar el raton

    newBitmap.GetPixel(e.X, e.Y)

    asi si cambio de colores no tengo problema no tiene por que ser blanco y negro que fue el ejemplo que puse

    lunes, 18 de junio de 2018 20:01
  • Si el picture lo pongo en PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage

    me pinta la linea aqui

    pero si pongo el PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize

    me lo pinta donde me lo tiene que pintar hay alguna manera de corregir eso sea como sea la imagen me corrija la linea a pintar?

    lunes, 18 de junio de 2018 20:49
  • Este es el codigo completo 

    Imports System.Drawing
    Imports System.Drawing.Imaging
    
    Public Class Form1
        Public color1 As System.Drawing.Color
        Dim Imagen As String
        Dim Pic As Bitmap
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim [OF] As New OpenFileDialog
            [OF].ShowDialog()
            Imagen = [OF].FileName
            Pic = New Bitmap(Imagen)
            Me.PictureBox1.Image = Pic
        End Sub
        Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick
            PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
            Dim newBitmap = New Bitmap(1, 1, PixelFormat.Format32bppArgb)
            newBitmap = CType(PictureBox1.Image, Bitmap)
            color1 = newBitmap.GetPixel(e.X, e.Y)
            Me.Panel1.BackColor = newBitmap.GetPixel(e.X, e.Y)
            For aa = 0 To 309
                If color1 = newBitmap.GetPixel(100, aa) Then
                Else
                    
                    Me.Panel1.BackColor = newBitmap.GetPixel(e.X, aa)
                    Dim Picture1 As Graphics = PictureBox1.CreateGraphics
                    Picture1.DrawLine(Pens.Red, 0, aa, 200, aa)
                    Exit For
                End If
    
            Next
    
        End Sub
    
       
    
    
    End Class
    

    lunes, 18 de junio de 2018 21:01