Janilabo

ZoomTPA

Aug 26th, 2013
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.12 KB | None | 0 0
  1. procedure ZoomTPA(var TPA: TPointArray; Times: Integer);
  2. var
  3.   w, h, l, i, x, y, width, height: Integer;
  4.   m: array of TBoolArray;
  5.   b: TBox;
  6. begin
  7.   if (times <> 0) then
  8.   begin
  9.     l := Length(TPA);
  10.     if (l > 0) then
  11.     begin
  12.       b := GetTPABounds(TPA);
  13.       w := ((b.X2 - b.X1) + 1);
  14.       h := ((b.Y2 - b.Y1) + 1);
  15.       if (times > 0) then
  16.       begin
  17.         width := (w * times);
  18.         height := (h * times);
  19.       end else
  20.       begin
  21.         times := Abs(times);
  22.         width := (w div times);
  23.         height := (h div times);
  24.       end;
  25.       SetLength(m, w);
  26.       for x := 0 to (w - 1) do
  27.       begin
  28.         SetLength(m[x], h);
  29.         for y := 0 to (h - 1) do
  30.           m[x][y] := False;
  31.       end;
  32.       for i := 0 to (l - 1) do
  33.         m[(TPA[i].X - b.X1)][(TPA[i].Y - b.Y1)] := True;
  34.       SetLength(TPA, 0);
  35.       l := 0;
  36.       for y := 0 to (height - 1) do
  37.         for x := 0 to (width - 1) do
  38.           if m[((x * w) div width)][((y * h) div height)] then
  39.           begin
  40.             SetLength(TPA, (l + 1));
  41.             TPA[l] := Point((x + b.X1), (y + b.Y1));
  42.             Inc(l);
  43.           end;
  44.     end;
  45.   end;
  46. end;
  47.  
  48. procedure SetPixels(bmp: Integer; TPA: TPointArray; color: Integer);
  49. var
  50.   a, b, w, h: Integer;
  51. begin
  52.   b := High(TPA);
  53.   if (b > -1) then
  54.   begin
  55.     try
  56.       GetBitmapSize(bmp, w, h);
  57.     except
  58.       Exit;
  59.     end;
  60.     for a := 0 to b do
  61.       if ((TPA[a].X > -1) and (TPA[a].Y > -1) and (TPA[a].X < w) and (TPA[a].Y < h)) then
  62.         FastSetPixel(bmp, TPA[a].X, TPA[a].Y, color);
  63.   end;
  64. end;
  65.  
  66. var
  67.   TPA: TPointArray;
  68.   bmp: Integer;
  69.   b: TBox;
  70.  
  71. const
  72.   ZOOM = 2;
  73.  
  74. begin
  75.   bmp := CreateBitmap(500, 500);
  76.   TPA := [Point(11, 12), Point(13, 14), Point(15, 16), Point(17, 18)];
  77.   b := GetTPABounds(TPA);
  78.   WriteLn((b.X2 - b.X1) + 1);
  79.   WriteLn((b.Y2 - b.Y1) + 1);
  80.   WriteLn(ToStr(b));
  81.   ZoomTPA(TPA, ZOOM);
  82.   b := GetTPABounds(TPA);
  83.   WriteLn((b.X2 - b.X1) + 1);
  84.   WriteLn((b.Y2 - b.Y1) + 1);
  85.   WriteLn(ToStr(b));
  86.   SetPixels(bmp, TPA, 255);
  87.   DisplayDebugImgWindow(500, 500);
  88.   DrawBitmapDebugImg(bmp);
  89.   WriteLn(ToStr(TPA));
  90. end.
Advertisement
Add Comment
Please, Sign In to add comment