function ColorPixel(P: TPoint): TColor; var DC: HDC; begin DC:= GetDC(0); Result:= GetPixel(DC,P.X,P.Y); ReleaseDC(0,DC); end;
Por ejemplo:
var P: TPoint; begin GetCursorPos(P); Color:= ColorPixel(P); end;
Escrito 27 diciembre 2010 - 07:13
function ColorPixel(P: TPoint): TColor; var DC: HDC; begin DC:= GetDC(0); Result:= GetPixel(DC,P.X,P.Y); ReleaseDC(0,DC); end;
var P: TPoint; begin GetCursorPos(P); Color:= ColorPixel(P); end;
Escrito 27 diciembre 2010 - 07:47
Escrito 27 diciembre 2010 - 08:15
Escrito 27 diciembre 2010 - 08:38
var P: TPoint; R,G,B: integer; begin GetCursorPos(P); Color:= ColorPixel(P); R := Color and $ff; G := (Color and $ff00) shr 8; B := (Color and $ff0000) shr 16; ShowMessage(format('(%d,%d,%d)',[R,G,B])); end;
Escrito 27 diciembre 2010 - 09:35
Escrito 27 diciembre 2010 - 11:07
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?
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,
Escrito 27 diciembre 2010 - 11:27
Pues como para que..... para verme mas inteligente que los demás
Seguramente ya en una anterior ocasión habías utilizado las funciones GetXValue... y no recordabas su existencia.Ya me estaba preparando para los golpes bajos , debía haber una función que lo hiciera, solo que por vago no la busqué
Salud OS
Escrito 27 diciembre 2010 - 01:55
TPoint P; GetCursorPos(&P); HWND hWnd = WindowFromPoint(P); ::ScreenToClient(hWnd, &P); HDC DC = GetDC(hWnd); COLORREF Color = GetPixel(DC, P.x, P.y); ReleaseDC(hWnd, DC);
Escrito 27 diciembre 2010 - 04:58
Que casualidadMe 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í:
Escrito 27 diciembre 2010 - 05:56
Por cierto, ¿por qué usas en handle de una ventana en vez de usar el 0?
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.