Detectar color de un pixel

Lucaa
01 de Marzo del 2004
Necesito detectar el color de un determinado pixel q esta en la pantalla , es decir necesito q el mouse se mueva a determinada coordenada y capture el color del pixel sobre el q queda como puedo capturar el color de un pixel??????

Baltasar
01 de Marzo del 2004
puedes saber el color de un punto de la pantalla con POINT (X,Y)
No sé si eso te resolverá el problema.

yo
01 de Marzo del 2004
Como te devuelve el color???? porque pongo

Hola = Point(45, 23)
MsgBox Hola

Y lo q me muestra es el numero 11061408
como se q color es ese?

yo
01 de Marzo del 2004
Me fije y siempre pongas las coordenadas q pongas da el mismo numero

Baltasar
01 de Marzo del 2004
POINT te devuelve el color de ese pixel de la pantalla, por supuesto haciendo referencia a un control form o picture.

Pon un picture con una foto o cualquier dibujo, este código y mueve el ratón sobre dicha foto. Verás el valor del color en el caption del formulario.

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim Color As Long
Dim Color1, Color2, Color3 As Integer
Color = Picture1.Point(X, Y)
Color1 = Int(Color / 65536)
Color = Color Mod 65536
Color2 = Int(Color / 256)
Color = Color Mod 256
Color3 = Color
Caption = "Rojo: " & Color3 & " - Verde: " & Color2 & " - Azul: " & Color1
End Sub

Saludos

yo
01 de Marzo del 2004
Y si necesito ver el color de un pixel q no esta dentro del formulario sino q esta en otra ventana como podria hacer?

Baltasar
01 de Marzo del 2004
Sabía que lo preguntarías ;-)

Abre un proyecto nuevo, y ponle simplemente un timer y un textbox no demasiado pequeño (que quepan 20 caracteres). El formulario haz que sea tan pequeño como puedas (para que te permita ver el resto de la pantalla).

en el código del formulario pones:

Dim z As POINTAPI

Private Sub Form_Load()
Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer()
Dim Color As Long
Dim Color1, Color2, Color3 As Integer
GetCursorPos z
screendc = CreateDC("DISPLAY", "", "", 0&)
Color = GetPixel(screendc, z.x, z.y)
'Picture1.BackColor = GetPixel(screendc, z.x, z.y)
DeleteDC (screendc)
Color1 = Int(Color / 65536)
Color = Color Mod 65536
Color2 = Int(Color / 256)
Color = Color Mod 256
Color3 = Color
Text1 = "Rojo: " & Color3 & " - Verde: " & Color2 & " - Azul: " & Color1
End Sub


Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim Color As Long
Dim Color1, Color2, Color3 As Integer
Color = Picture1.Point(x, y)
Color1 = Int(Color / 65536)
Color = Color Mod 65536
Color2 = Int(Color / 256)
Color = Color Mod 256
Color3 = Color
Caption = "Rojo: " & Color3 & " - Verde: " & Color2 & " - Azul: " & Color1
End Sub

Y ahora agregas un módulo y le pones el siguiente código:

Declare Function CreateDC& Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, _
ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Any)
Declare Function DeleteDC& Lib "gdi32" (ByVal hdc As Long)
Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, _
ByVal y As Long) As Long

Type POINTAPI
x As Long
y As Long
End Type

Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Ejecuta el programa, y cambia de pantalla (mininiza el visua basic, por ejemplo) y haz una excursión por tu escritorio, verás los valores de cada pixel de la pantalla.

Saludos.

yo
01 de Marzo del 2004
Muchisimas gracias!!!!!!!!!!!!!!!!!!!!!!!!!!!

Baltasar
01 de Marzo del 2004
Sabes lo que me gustaría? que si haces algo interesante con esas ideas, pues que lo expongas aquí. Por ejemplo una lupa (es lo que yo he hecho).

Saludos

yo
01 de Marzo del 2004
lo q pasa es q no creo q les interese lo q voy a hacer , es decir , esto lo necesito para un juego online.
Es un juego donde hay q estar siempre horas y horas tirando dados para sacar unos atributos mas o menos buenos (maximo 18) , entonces con esto queria detectar los pixeles en blanco del 18 y q automaticamente tire loa dados hasta q toque un 18

Baltasar
01 de Marzo del 2004
Jajajaj, tramposo !

Bueno, cada uno que lo aplique donde lo necesite.

Un saludo y suerte con el programa

P.D.: lo de tramposo es broma.

Miguel
01 de Marzo del 2004
Una consulta como podria hacer lo mismo, es decir capturar el color de un pixel, pero no con el mouse sino colocando yo las coordenadas....y seria sobre cualquier punto de la pantalla...me podrias dar un ejemplo...gracias

Baltasar
01 de Marzo del 2004
En el ejemplo que he puesto anteriormente verás que se usan unas coordenadas X e Y, tú se las asignas y ya está.

Saludos