Mirror

How to detect a color within a range of pixels around the mouse cursor (Views: 100)


Problem/Question/Abstract:

I need to search for a pixel of a given TColor around the mouse cursor position. My main problem is that I have to search in a range of pixels around the center of the mouse's actual position starting with one pixel.

Answer:

function FindPixelOnCanvas(
  canvas: TCanvas; {canvas to find pixel on}
  const startAt: TPoint; {start position}
  tolerance: Integer; {pixel range to check}
  color: TColor; {color to look for}
  const rect: TRect; {dimension of canvas}
  var foundPos: TPoint {returns last position tested}
  ): Boolean; {returns true if color found, false if not}
var
  i, k, n: Integer;
begin
  Result := False;
  for n := 0 to tolerance do
    for i := -n to +n do
      for k := -n to +n do
        if (Abs(i) = n) or ((Abs(k) = n) then
          begin
            foundPos := Point(startAt.X + i, startAt.Y + k);
            if PtInRect(foundPos, rect) and (Canvas.Pixels[foundPos.X, foundPos.Y] = color) then
            begin
              Result := True;
              Exit;
            end;
          end;
end;

<< Back to main page