在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;