Ir al contenido


Foto

[DELPHI] Obtener el color de un pixel de la pantalla


  • Por favor identifícate para responder
11 respuestas en este tema

#1 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 27 diciembre 2010 - 07:13

Obtener el color de un pixel de la pantalla:



delphi
  1. function ColorPixel(P: TPoint): TColor;
  2. var
  3.   DC: HDC;
  4. begin
  5.   DC:= GetDC(0);
  6.   Result:= GetPixel(DC,P.X,P.Y);
  7.   ReleaseDC(0,DC);
  8. end;



Por ejemplo:


delphi
  1. var
  2.   P: TPoint;
  3. begin
  4.   GetCursorPos(P);
  5.   Color:= ColorPixel(P);
  6. end;


  • 0

#2 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 27 diciembre 2010 - 07:47

Esta bueno, ¿se obtienen en hexadecimal, RGB...?


Saludos!
  • 0

#3 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 27 diciembre 2010 - 08:15

El valor que se obtiene es compatible con el tipo TColor de Delphi, es decir es un entero con el siguiente formato: 0x00bbggrr

  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 27 diciembre 2010 - 08:38

Con tu permiso amigo seoane :)



delphi
  1. var
  2.   P: TPoint;
  3.   R,G,B: integer;
  4. begin
  5.   GetCursorPos(P);
  6.   Color:= ColorPixel(P);
  7.   R := Color and $ff;
  8.   G := (Color and $ff00) shr 8;
  9.   B := (Color and $ff0000) shr 16;
  10.   ShowMessage(format('(%d,%d,%d)',[R,G,B]));
  11. end;



Código RGB obtenido de Delphi3000.com

Salud OS
  • 0

#5 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 27 diciembre 2010 - 09:35

Bien, ahora me queda mucho más claro :)


Saludos!
  • 0

#6 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 27 diciembre 2010 - 11:07

Y digo yo... ¿para que "complicarse" con operaciones a nivel bits cuando ya hay una función que convierte TColor a RGB y además que puede descomponerse empleando de forma directa, una vez devuelto por GetPixel, con la API?  ;) :p

Véase: ColorToRGB, GetRValue, GetGValue y GetBValue... que por cierto, no hay necesidad de añadir ninguna unidad... todo esto puede encontrarse en la misma unidad en donde está declarada GetDC y GetPixel: la unidad Windows que ya está por defecto añadida.  ;)

Saludos,


  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 27 diciembre 2010 - 11:13

Y digo yo... ¿para que "complicarse" con operaciones a nivel bits cuando ya hay una función que convierte TColor a RGB y además que puede descomponerse empleando de forma directa, una vez devuelto por GetPixel, con la API?  ;) :p


Pues como para que..... para verme mas inteligente que los demás :p

Véase: ColorToRGB, GetRValue, GetGValue y GetBValue... que por cierto, no hay necesidad de añadir ninguna unidad... todo esto puede encontrarse en la misma unidad en donde está declarada GetDC y GetPixel: la unidad Windows que ya está por defecto añadida.  ;)

Saludos,


Ya me estaba preparando para los golpes bajos :p, debía haber una función que lo hiciera, solo que por vago no la busqué :D :D :D

Salud OS
  • 0

#8 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 27 diciembre 2010 - 11:27

Pues como para que..... para verme mas inteligente que los demás :p


Ya saltó el ego  :D

Ya me estaba preparando para los golpes bajos :p , debía haber una función que lo hiciera, solo que por vago no la busqué :D :D :D

Salud OS

Seguramente ya en una anterior ocasión habías utilizado las funciones GetXValue... y no recordabas su existencia.

Yo me las acuerdo porque las ví hace un tiempo cuando alguien comentó en CD y como que nunca abandoné lo de tratamiento de imagen y me gusta es que se me quedó en la cabeza. Lo que no recordaba bien era el tipo de dato del parámetro... siempre me confundo si es un TColor o un RGB.

Saludos,
  • 0

#9 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 27 diciembre 2010 - 01:55

Me recuerda a una pregunta de otro foro en la que peían ayuda para conocer el color de un punto de una ventana y que contesté así:  :)



cpp
  1.   TPoint P;
  2.   GetCursorPos(&P);
  3.   HWND hWnd = WindowFromPoint(P);
  4.   ::ScreenToClient(hWnd, &P);
  5.   HDC DC = GetDC(hWnd);
  6.   COLORREF Color = GetPixel(DC, P.x, P.y);
  7.   ReleaseDC(hWnd, DC);



Saludos.
  • 0

#10 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 27 diciembre 2010 - 04:58

Me recuerda a una pregunta de otro foro en la que peían ayuda para conocer el color de un punto de una ventana y que contesté así:  :)

Que casualidad  *-)

Por cierto, ¿por qué usas en handle de una ventana en vez de usar el 0?
  • 0

#11 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 27 diciembre 2010 - 05:56

Por cierto, ¿por qué usas en handle de una ventana en vez de usar el 0?


Porque preguntaban la localización del color de un pixel en una ventana. Aunque usando 0 para localizar el HDC es suficiente, preferí mostrar en el ejemplo como localizar la ventana con la posición del ratón y tras esto crear el HDC de esa ventana para entontrar el color del pixel.

El ejemplo se complica un poco pero muestra varias cosas.  ;)

Saludos.
  • 0

#12 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 27 diciembre 2010 - 08:10


Por cierto, ¿por qué usas en handle de una ventana en vez de usar el 0?


Porque preguntaban la localización del color de un pixel en una ventana. Aunque usando 0 para localizar el HDC es suficiente, preferí mostrar en el ejemplo como localizar la ventana con la posición del ratón y tras esto crear el HDC de esa ventana para entontrar el color del pixel.

El ejemplo se complica un poco pero muestra varias cosas.  ;)

Saludos.


Siempre es interesante y educativo leer discusiones de los que si saben :) (y)

Salud OS
  • 0




IP.Board spam blocked by CleanTalk.