在BMP图像中,有一个用clgreen边线非填充的封闭多边形,
现在要取得这个边线为绿色的多边形里的所有像索点..
按X,Y输出到Stringlist.但为什么我取不到值?代码在哪出了问题?路过的帮看看...
var
ImagePoint: TStringList; // 记录图片点集合;function LocPointList(bmp1: TImage): TStringList;
var
Sl1: TStringList;
P: PByteArray; // 像素数组
X, Y, i, j: Integer;
SPoint, EPoint: TPoint;
IsFirst: Boolean; // 判断是否是第一次出现,第一次则为TRUE,否则为FALSH
begin
Result:=nil;
for Y := 0 to bmp1.Picture.Bitmap.Height - 1 do
begin
P := bmp1.Picture.Bitmap.ScanLine[Y]; // 将图片每一行所有像素值存入数组P
IsFirst := false;
for X := 0 to bmp1.Picture.Bitmap.Width - 1 do // 扫描每一行每一列的像素点
begin
// 当发现左边颜色是绿色时
{clgreen的RGB色是0,80,0 吗?} if P[X * 3] = 0 then
if P[X * 3 + 1] = 80 then
if P[X * 3 + 2] = 0 then
begin
if not IsFirst then // 记录同一行绿色出现的超始
begin
SPoint.X := X;
SPoint.Y := Y;
IsFirst := true;
end
else//记录同一行绿色出现的末端
begin
EPoint.X := X;
EPoint.Y := Y;
IsFirst := false; end;
// 如果出现多边形中的端点在最高位时
if X = bmp1.Picture.Bitmap.Width - 1 then
begin
IsFirst := false;
ImagePoint.Add(IntToStr(X) + ',' + IntToStr(Y)); end
else//一般情况
begin
if EPoint.X - SPoint.X > 0 then
begin
for i := EPoint.X to SPoint.X do
ImagePoint.Add(IntToStr(X) + ',' + IntToStr(Y)); end; end; end; end; end;
Result:=ImagePoint;
end;procedure TLocTestForm.BitBtn1Click(Sender: TObject);
var
ImagePoint1:TStringList;
begin
ImagePoint1 := TStringList.Create;
ImagePoint1:=LocPointList(Image1);
end;
改成:
if P[X * 3] = $00 then
if P[X * 3 + 1] = $80 then
if P[X * 3 + 2] = $00 then但是LocPointList取出的值有问题,只有一边,晕..