function GetCanvas:TCanvas;
begin
result:= TCanvas.Create;
result.Handle := GetWindowDC(Window);
end;
function ColorRGB(SColor, i: Integer): Extended;
var
Color: TColor;
begin
Color := ColorToRGB(SColor);
Result:= 0;
case i of
1:result:= GetRValue(Color);
2:result:= GetGValue(Color);
3:result:= GetBValue(Color);
end;
end;
function SimilarColors(Color1, Color2, Tolerance: Integer): Boolean;
begin
Result:=False;
if(Abs(Round(ColorRGB(Color1, 1))-Round(ColorRGB(Color2, 1)))<=Tolerance)then
begin
if(Abs(Round(ColorRGB(Color1, 2))-Round(ColorRGB(Color2, 2)))<=Tolerance)then
begin
if(Abs(Round(ColorRGB(Color1, 3))-Round(ColorRGB(Color2, 3)))<=Tolerance)then
begin
Result:= True;
end;
end;
end;
end;
function MaskOn(mask, source: TBitmap; var x: Integer; Tolerance: Integer):TBitmap;
var
cx, cy, rc: Integer;
begin
rc:=0;
Result:= TBitmap.Create;
for cy:= 0 to mask.Height-1 do
for cx:= 0 to mask.Width-1 do
if(mask.Canvas.Pixels[cx, cy]<>0)then
Mask.Canvas.Pixels[cx, cy]:= Source.Canvas.Pixels[cx, cy];
result:=Mask;
for cy:= 0 to mask.Height-1 do
for cx:= 0 to mask.Width-1 do
if(Mask.Canvas.Pixels[cx, cy]<>0)then
if(rc=0)then
rc:= Mask.Canvas.Pixels[cx, cy]
else
if not(SimilarColors(Mask.Canvas.Pixels[cx, cy], rc, Tolerance))then
begin
ShowMessage('Exiting') ;
Exit;
end;
x:= x + mask.Width;
end;
procedure TfrmMacro.Button1Click(Sender: TObject);
var
x, y: Integer;
Rect, Rect2: TRect;
begin
Exis := TBitmap.Create;
BitBlt(Exis.Canvas.Handle, 0, 0, 15, 15, GetWindowDC(Window), 9, 9, SRCCOPY);
ImgCanvas.Picture.Bitmap:= Exis;
imgCanvas.Picture.Bitmap:= MaskOn(imgCanvas.Picture.Bitmap, Exis, x, 2);
end;