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: = to  y + n - 1   do
  
begin
    
for  i: = 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/rogee/archive/2010/09/15/1827237.html

你可能感兴趣的:(delphi之找色和色块)