none
Leer pixeles de una imagen en VB o C# RRS feed

  • Pregunta

  • Hola, lo que deseo hacer es poder saber el color RGB de los pixeles de una imagen por ejemplo saber de que color es el pixel 23, 6

    No tengo ni la menor idea si se puede lograr y si si se puedo me gustaría saberlo 

    De antemano gracias

    viernes, 17 de enero de 2014 15:51

Respuestas

  • Si cargas la imagen en un objeto del tipo System.Drawing.Bitmap, tiene un método llamado GetPixel que te extrae un pixel por sus coordenadas y te lo devuelve en un objeto del tipo Color (que tiene propiedades para leer los RGB).

    Ojo, que es bastante lento. Para leer un pixel no hay problema, pero si pretendes usarlo en un bucle para leer todos los pixels de la imagen uno por uno, tardará un tiempo significativo.

    • Marcado como respuesta DavidPaisa05 viernes, 17 de enero de 2014 23:02
    viernes, 17 de enero de 2014 21:26

Todas las respuestas

  • Si cargas la imagen en un objeto del tipo System.Drawing.Bitmap, tiene un método llamado GetPixel que te extrae un pixel por sus coordenadas y te lo devuelve en un objeto del tipo Color (que tiene propiedades para leer los RGB).

    Ojo, que es bastante lento. Para leer un pixel no hay problema, pero si pretendes usarlo en un bucle para leer todos los pixels de la imagen uno por uno, tardará un tiempo significativo.

    • Marcado como respuesta DavidPaisa05 viernes, 17 de enero de 2014 23:02
    viernes, 17 de enero de 2014 21:26
  • el tiempo se reduce significativemente si usas un for parallel
    lunes, 11 de septiembre de 2017 0:11
  • Saludos,

    Puedes usar del espacio de nombre System.Drawing, el metodo GetPixel que recibe como parámetro tanto las posiciones en X (Int32) & Y (Int32) esta funcion esta disponible tanto en C#.NET como VB.NET. 

    Ej (VB.NET) : 

    Dim rgbColor As Color = ptbImage.GetPixel(50, 50)

    Si quieres realizar un lector de color RGB en cualquier punto del plano

    dimensional de la pantalla, tanto en las posiciones (X,Y).

    Puedes hacer lo siguiente, en el evento Tick de un timer, así te evitar

    tener un bucle, simplemente usando un hilo cada X tiempo.

            Dim bmp As New Bitmap(1, 1)
            Using g As Graphics = Graphics.FromImage(bmp)
                g.CopyFromScreen(Windows.Forms.Cursor.Position, New Point(0, 0), New Size(1, 1))
            End Using
            Dim pixel As Drawing.Color = bmp.GetPixel(0, 0)
            lblResult.Text$ = bmp.GetPixel(0, 0).ToString
            Dim point As New Point
            point.X = (Me.Width / 2) - (lblResult.Width / 2)
            point.Y = lblResult.Top
            lblResult.Location = point
            ptbImage.BackColor = pixel
            Me.Invalidate()

    Documentación oficial: https://msdn.microsoft.com/en-us/library/system.drawing.bitmap.getpixel%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=vb&f=255&MSPPError=-2147217396#code-snippet-2


    lunes, 11 de septiembre de 2017 0:42