Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Obtener color de pixel de la pantalla de windows???

Estas en el tema de Obtener color de pixel de la pantalla de windows??? en el foro de Visual Basic clásico en Foros del Web. Buenas! Alguien sabe como se podria obtener el color de un pixel de la pantalla de windows fuera del programa en ejecucion?? Yo lo hacia ...
  #1 (permalink)  
Antiguo 30/04/2009, 10:32
 
Fecha de Ingreso: diciembre-2005
Mensajes: 50
Antigüedad: 18 años, 5 meses
Puntos: 0
Obtener color de pixel de la pantalla de windows???

Buenas!
Alguien sabe como se podria obtener el color de un pixel de la pantalla de windows fuera del programa en ejecucion??

Yo lo hacia con un picturebox por ejemplo y me tiraba en color en hexadecimal en un text.
Pero esta vez necesito hacerlo fuera de lo que seria el form..
Alguien sabe como se puede hacer??

Gracias!!
  #2 (permalink)  
Antiguo 30/04/2009, 17:48
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Respuesta: Obtener color de pixel de la pantalla de windows???

Hola, proba esto:

Código vb:
Ver original
  1. Option Explicit
  2.  
  3. Private Type POINTAPI
  4.     x As Long
  5.     y As Long
  6. End Type
  7.  
  8. Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
  9. Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  10. Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
  11.  
  12. Private Sub Form_Load()
  13.     Timer1.Interval = 100
  14. End Sub
  15.  
  16. Private Sub Timer1_Timer()
  17.     Dim tPOS As POINTAPI
  18.     Dim sTmp As String
  19.     Dim lColor As Long
  20.     Dim lDC As Long
  21.     lDC = GetWindowDC(0)
  22.     Call GetCursorPos(tPOS)
  23.     lColor = GetPixel(lDC, tPOS.x, tPOS.y)
  24.     Me.BackColor = lColor
  25.     sTmp = Right$("000000" & Hex(lColor), 6)
  26.     Me.Caption = "R:" & Right$(sTmp, 2) & " G:" & Mid$(sTmp, 3, 2) & " B:" & Left$(sTmp, 2)
  27. End Sub

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #3 (permalink)  
Antiguo 30/04/2009, 18:44
 
Fecha de Ingreso: diciembre-2005
Mensajes: 50
Antigüedad: 18 años, 5 meses
Puntos: 0
De acuerdo Respuesta: Obtener color de pixel de la pantalla de windows???

uhh seba, sos un capo... respondiste a mi pregunta!
Muchisimas gracias!
Saludos!
  #4 (permalink)  
Antiguo 29/03/2010, 13:32
Avatar de joj9  
Fecha de Ingreso: marzo-2010
Mensajes: 24
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Obtener color de pixel de la pantalla de windows???

Una preguntilla, y no habría alguna manera de hacer eso pero sin un timer??? sino que directamente lo haga al mover el raton???
esk para el evento mousemove se tiene que indicar sobre que objeto se va ha mover (Ej: picture1_mousemove), y si es para toda la pantalla, o todo el formulario dificil...
Aver si alguien podría ayudarme.

Muchas gracias de antemano! :)
  #5 (permalink)  
Antiguo 29/03/2010, 14:04
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Obtener color de pixel de la pantalla de windows???

No está muy claro lo que preguntas.
La sub la puedes usar cuando y como quieras. No necesitas un timer.
Puedes llamarla desde el mousemove o desde el click de cualquier objeto de tu formulario.
Solo tienes que renombrar la sub y usarla donde la necesites.
Aunque también se puede convertir en función y que devuelva el valor:
Nota: Las declaraciones de las funciones y la variable de tipo pointapi hay que copiarlas del mensaje anterior.

Código vb:
Ver original
  1. Private Function MiraColorPixel() As Long
  2.     Dim tPOS As POINTAPI
  3.     Dim lColor As Long
  4.     Dim lDC As Long
  5.     lDC = GetWindowDC(0)
  6.     Call GetCursorPos(tPOS)
  7.     MiraColorPixel = GetPixel(lDC, tPOS.X, tPOS.Y)
  8. End Function
2 Pictures. Cargamos una imagen en Picture1 y al pasar el ratón cambia el color de Picture2.

Código vb:
Ver original
  1. Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  2.   Dim ColorPixel As Long
  3.   Dim sTmp As String
  4.   ColorPixel = MiraColorPixel
  5.   sTmp = Right$("000000" & Hex(ColorPixel), 6)
  6.   Me.Caption = "R:" & Right$(sTmp, 2) & " G:" & Mid$(sTmp, 3, 2) & " B:" & Left$(sTmp, 2)
  7.   Picture2.BackColor = ColorPixel
  8. End Sub

¿Es eso lo que quieres hacer?
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #6 (permalink)  
Antiguo 29/03/2010, 14:20
Avatar de joj9  
Fecha de Ingreso: marzo-2010
Mensajes: 24
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Obtener color de pixel de la pantalla de windows???

Sorry. Fallo al escribir el mensaje.

Última edición por joj9; 29/03/2010 a las 14:29
  #7 (permalink)  
Antiguo 29/03/2010, 14:27
Avatar de joj9  
Fecha de Ingreso: marzo-2010
Mensajes: 24
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Obtener color de pixel de la pantalla de windows???

Gracias por responder.
Lo que quiero hacer es exactamente lo del 2º codigo pero que no esté obligado a pasar el raton por la picture1, sino que pueda hacerlo por cualquier parte del form, o por cualquier parte de la pantalla si puede ser tambien.
Porque ya se que se puede usar como funcion, como pusiste en el primer codigo, de tal forma que quedaría así:

Código:
Private Function MiraColorPixel() As Long
    Dim tPOS As POINTAPI
    Dim lColor As Long
    Dim lDC As Long
    lDC = GetWindowDC(0)
    Call GetCursorPos(tPOS)
    MiraColorPixel = GetPixel(lDC, tPOS.X, tPOS.Y)
End Function

Private Sub picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Picture2.BackColor = MiraColorPixel
End Sub
pero seguiría restringido a la picture1 ("picture1_mousemove"), y amí lo que me interesa no es que esté restringido el movimiento a picture1 sinó a todo el form o a la pantalla entera.
  #8 (permalink)  
Antiguo 29/03/2010, 15:45
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Obtener color de pixel de la pantalla de windows???

Sigo sin llegar a aclararme de lo que quieres hacer.
El código de seba123neo funciona en cualquier parte de la pantalla.
Si lo que quieres es mirar cualquier pixel sin llevar el cursor hasta él, imagino que solo tienes que conseguir primero las coordenadas del punto que quieres mirar y luego hacer algo así:

Código vb:
Ver original
  1. Private Function MiraColorPixel(byval X as long, byVal Y As Long) As Long
  2.     Dim lDC As Long
  3.     lDC = GetWindowDC(0)
  4.     MiraColorPixel = GetPixel(lDC, X, Y)
  5. End Function
ColorPixel=MiraColorPixel (X,Y)
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #9 (permalink)  
Antiguo 29/03/2010, 16:00
Avatar de joj9  
Fecha de Ingreso: marzo-2010
Mensajes: 24
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Obtener color de pixel de la pantalla de windows???

Claro que funciona en cualquier lugar de la pantalla, pero utilizando un timer, y lo que yo quiero es sin utilizar el timer, al igual que lo hago con 2 picturebox, sin timer, para toda la pantalla sin timer. :)
  #10 (permalink)  
Antiguo 29/03/2010, 16:51
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Obtener color de pixel de la pantalla de windows???

Por eso no me entraba a mi en la cabeza.
Osea, quieres lo que había pero sin timer. Simplemente.
Pues no se. Si te vale un timer hecho en un control de usuario, que no hay que insertarlo en el form, eso si lo he visto alguna vez.
En última instancia puedes hacer una sub "sin salida" y llamarla al inicio.

Código vb:
Ver original
  1. Sub MiraPixels()
  2. Inicio:
  3.   Picture2.BackColor = MiraColorPixel
  4.   DoEvents
  5.   Goto Inicio
  6. End Sub

Igual funciona...
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #11 (permalink)  
Antiguo 30/03/2010, 14:36
Avatar de joj9  
Fecha de Ingreso: marzo-2010
Mensajes: 24
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Obtener color de pixel de la pantalla de windows???

Prefiero usar un Timer antes que el Goto, ya que el goto no me gusta usarlo nunca en programación...
Así que bueno, usare el timer :)
Y muchas gracias de todas formas pkj!!! ;)
  #12 (permalink)  
Antiguo 30/03/2010, 15:26
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Obtener color de pixel de la pantalla de windows???

El GoTo siempre se puede cambiar por un Do Loop. Total, para hacer un bucle infinto no se necesita poner mucho empeño... aparecen solos

Que haya suerte.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #13 (permalink)  
Antiguo 05/04/2010, 11:39
 
Fecha de Ingreso: octubre-2009
Mensajes: 5
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Obtener color de pixel de la pantalla de windows???

tengo una duda..
¿¿ como seria si quisiera sacar un promedio del color de una imagen pequeña... (masomenos 100px x100px) ??


se vuelve complicado por que hay que tener en cuenta los porcentajes de RGB? comparandolo con el numero en hexadecimal.. o es mas simple.. ???
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:41.