Advertisement
Janilabo

Untitled

Dec 23rd, 2013
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.79 KB | None | 0 0
  1. {$loadlib pumbaa.dll}
  2.  
  3. procedure pp_TPAControlSegment(var TPA: TPointArray; kind: TControlKind; segment: TPointArray; accuracy: Extended);
  4. var
  5.   w, h, k, l, i, j, x, y, v, c, t, n: Integer;
  6.   o: TPoint;
  7.   b, s: TBox;
  8.   m, q: T2DBoolArray;
  9.   f, p: TPointArray;
  10.   z: TBoxArray;
  11.   a: Extended;
  12. begin
  13.   t := 0;
  14.   k := High(TPA);
  15.   l := High(segment);
  16.   if ((k > -1) and (l > -1) and (accuracy > 0) and not (accuracy > 1)) then
  17.   begin
  18.     s := pp_TPABounds(segment);
  19.     b := pp_TPABounds(TPA);
  20.     w := (b.X2 - b.X1);
  21.     h := (b.Y2 - b.Y1);
  22.     z := pp_BoxPositions(s, b);
  23.     v := High(z);
  24.     if (v > -1) then
  25.     begin
  26.       n := Ceil(pp_Percentage((accuracy * 100), (l + 1)));
  27.       WriteLn('N: ' + IntToStr(n));
  28.       p := pp_Clone(segment);
  29.       o := pp_GetOffset(Point(s.X1, s.Y1), Point(0, 0));
  30.       pp_TPAOffset(p, o);
  31.       o := pp_GetOffset(Point(z[0].X1, z[0].Y1), Point(0, 0));
  32.       pp_TBAOffset(z, o);
  33.       m := pp_Create(False, ((b.X2 - b.X1) + 1), ((b.Y2 - b.Y1) + 1));
  34.       for i := 0 to k do
  35.         m[(TPA[i].X - b.X1)][(TPA[i].Y - b.Y1)] := True;
  36.       SetLength(f, (l + 1));
  37.       q := pp_Create(False, ((b.X2 - b.X1) + 1), ((b.Y2 - b.Y1) + 1));
  38.       for i := 0 to v do
  39.       begin
  40.         c := 0;
  41.         for j := 0 to l do
  42.         begin
  43.           x := (p[j].X + z[i].X1);
  44.           y := (p[j].Y + z[i].Y1);
  45.           if m[x][y] then
  46.           begin
  47.             f[c].X := x;
  48.             f[c].Y := y;
  49.             c := (c + 1);
  50.           end;
  51.         end;
  52.         if not (c < n) then
  53.         begin
  54.           c := (c - 1);
  55.           for j := 0 to c do
  56.             q[f[j].X][f[j].Y] := True;
  57.         end;
  58.       end;
  59.       case kind of
  60.         ckExtract:
  61.         for i := 0 to k do
  62.           if q[(TPA[i].X - b.X1)][(TPA[i].Y - b.Y1)] then
  63.           begin
  64.             TPA[t] := TPA[i];
  65.             t := (t + 1);
  66.           end;
  67.         ckFilter:
  68.         for i := 0 to k do
  69.           if not q[(TPA[i].X - b.X1)][(TPA[i].Y - b.Y1)] then
  70.           begin
  71.             TPA[t] := TPA[i];
  72.             t := (t + 1);
  73.           end;
  74.       end;
  75.     end;
  76.   end;
  77.   SetLength(TPA, t);
  78. end;
  79.  
  80. procedure DebugBitmap(bmp: Integer);
  81. var
  82.   w, h: Integer;
  83. begin
  84.   GetBitmapSize(bmp, w, h);
  85.   DisplayDebugImgWindow(w, h);
  86.   DrawBitmapDebugImg(bmp);
  87. end;
  88.  
  89. var
  90.   segment, TPA: TPointArray;
  91.   b: TBox;
  92.   o: TPoint;
  93.   bmp, w, h: Integer;
  94.  
  95. begin
  96.   segment := [Point(5, 2), Point(5, 2), Point(1, 6), Point(4, 3), Point(4, 1)];
  97.   TPA := pp_TPAFromBox(IntToBox(10, 10, 20, 20));
  98.   b := pp_TPABounds(TPA);
  99.   pp_TPADimensions(TPA, w, h);
  100.   pp_TPAControlSegment(TPA, ckExtract, segment, 0.9);
  101.   bmp := CreateBitmap((w + (b.X1 * 2)), (h + (b.Y1 * 2)));
  102.   DrawTPABitmap(bmp, TPA, 255);
  103.   DrawTPABitmap(bmp, segment, 16777215);
  104.   DebugBitmap(bmp);
  105.   FreeBitmap(bmp);
  106. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement