delphi之找色和色块

找色和色块,是模拟的重要基础。

有时候,需要确定某点是否出现某种颜色,有时候需要判断色块是否出现在某位置

有时候,需要看范围内是否出现色块。

function IsColor(bmp:TBitmap; x,y:integer; c:TColor):boolean;
var
  row:pRGBTripArray;
  p:TRGBTriple;
begin
  row:=bmp.ScanLine[y];
  p:=row[x];
  result:=(p.rgbtBlue=GetBValue(c)) and (p.rgbtGreen=GetGValue(c))
        and (p.rgbtRed=GetRValue(c));
end;

function IsColorBlock(bmp:TBitmap; x,y,n:integer; c:TColor):boolean;
var
  i,j:integer;
begin
  result:=false;
  for j:=y to y+n-1 do
  begin
    for i:=x to x+n-1 do
    begin
      if not IsColor(bmp, i, j, c) then // 颜色不对就不是色块了
        exit;
     end;
  end;
  result:=true; // 能到这里,该位置就是色块
end;

function FindColorBlock(bmp:TBitmap; x1,y1,x2,y2,n:integer;c:TColor):TPoint;
var
  i,j:integer;
begin
  for j:=y1 to y2 do
  begin
    for i:=x1 to x2 do
    begin
      if IsColor(bmp, i, j, c) then // 先找色点
      begin
        if IsColorBlock(bmp,i,j,3,c) then // 再判色块
        begin
          result.x:=i;
          result.y:=j;
          exit; // 找到返回
        end;
      end;
    end;
  end;
  result.x:=-1;
  result.y:=-1;
end;

转载于:https://www.cnblogs.com/devlyn/archive/2010/08/27/1809821.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值