找色和色块,是模拟的重要基础。
有时候,需要确定某点是否出现某种颜色,有时候需要判断色块是否出现在某位置
有时候,需要看范围内是否出现色块。
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/rogee/archive/2010/09/15/1827237.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)