Janilabo

corner

Aug 9th, 2013
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 9.40 KB | None | 0 0
  1. {$loadlib pumbaa.dll}
  2.  
  3. // BLACK [0] pixels is the TPA we use flood fill for.
  4. // NOTE: If you use start point to point that TPA contains (which is inside AREA!), it will floodfill
  5. // the outline pixels (TPA points) inside the area, else it will do the opposite.
  6. // ..that is, filling the white pixels (non-TPA points) inside the area.
  7.  
  8. const
  9.   CORNER_COLOR = 255; // ..with this color.
  10.   DISPLAY_DELAY = 1000; // Minimum delay that it waits before it shows the result.
  11.  
  12. {==============================================================================]
  13.   Explanation: Sets points from TPA that are inside bmp as color.
  14. [==============================================================================}
  15. procedure SetPixels(bmp: Integer; TPA: TPointArray; color: Integer);
  16. var
  17.   a, z, w, h: Integer;
  18. begin
  19.   z := High(TPA);
  20.   if (z > -1) then
  21.   begin
  22.     GetBitmapSize(bmp, w, h);
  23.     for a := 0 to z do
  24.       if ((TPA[a].X >= 0) and (TPA[a].Y >= 0) and (TPA[a].X < w) and (TPA[a].Y < h)) then
  25.         FastSetPixel(bmp, TPA[a].X, TPA[a].Y, color);
  26.   end;
  27. end;
  28.  
  29. {==============================================================================]
  30.   Explanation: Returns all the color points from bitmap as TPointArray.
  31.                Result is based on Row-by-Row.
  32. [==============================================================================}
  33. function GetBitmapColorTPA(bmp: Integer; color: Integer): TPointArray;
  34. var
  35.   w, h, x, y, r: Integer;
  36. begin
  37.   try
  38.     GetBitmapSize(bmp, w, h);
  39.   except
  40.   end;
  41.   if ((w > 0) and (h > 0)) then
  42.   begin
  43.     SetLength(Result, (w * h));
  44.     for y := 0 to (h - 1) do
  45.       for x := 0 to (w - 1) do
  46.         if (FastGetPixel(bmp, x, y) = color) then
  47.         begin
  48.           Result[r] := Point(x, y);
  49.           Inc(r);
  50.         end;
  51.   end;
  52.   SetLength(Result, r);
  53. end;
  54.  
  55. var
  56.   bmp: Integer;
  57.  
  58. procedure Example;
  59. begin
  60.  bmp := BitmapFromString(490, 361, 'meJzt3dtyorkOgNG8/0tnVw2z' +
  61.         'KQYSIvz7INlr3TexP4E6B9L9/Q0AAAAAAAAAAAAAAAAAAAAAAADzf' +
  62.         'AEks3ov1iAUkIqlFCQUkIqlFCQUkIqlFCQUkIqlFCQUkIqlFCQUkI' +
  63.         'qlFCQUkIqlFCQUkIqlFCQUkIqlFCRUA9FgHK+vIKE+dSumGwzixRU' +
  64.         'k1KdsbxjKiytIqI885pIORvDKChIq7rWVetCdl1WQUEG/hRIQ+vKa' +
  65.         'ChIqyPaGObymgoSKeF9JQ+jICypIqD9FEskIvXg1BQn1XrCPjNCLV' +
  66.         '1OQUO/F+ygJXXgpBQn1xqdxxITrvI6ChPpNQxkx4TqvoyChftScRU' +
  67.         '+4yIsoSKgfXckiKVzhFRQk1KvrTVSFZl4+QUI96RJkQtUv0hv9HNi' +
  68.         'VdEFCPekVZHRYg0vOgJpJFyTUo741hrY1uOQMqJl0QULddU9he5/M' +
  69.         'gJpJFyTUzaAO4/IaXHIG1Ey6IKFuyq1Zg0vOgJpJFyTUd82fMBpcc' +
  70.         'gbUTLogoSYUsL0PZEDNpAs6PNS069f6kSjXGVAz6YIODzXz+oXejs' +
  71.         'h1BtRMuqCTQ02+u+19FANqJl3QsaGWXLzjBz12cFUYUDPpgo4Nter' +
  72.         'iVX4Tn4sMqJl0QWeGWnvrLh/9zMEVYkDNpAs6MNTyK9veJzCgZtIF' +
  73.         'nRYqyX2vHyPJRfiNATWTLui0UHnue/EkeS7CjwyomXRBR4VKdVnbe' +
  74.         '28G1Ey6oHNCJbzplSMlvA6PDKiZdEGHhEp7zeaDpb0RNwbUTLqgQ0' +
  75.         'KlvabtvSsDaiZd0Amhkt+x7XjJL4UBNZMuaPtQJS7YcMgS9zqZATW' +
  76.         'TLmjvUIVu9+lRC13tTAbUTLqgvUMVup3tvRkDaiZd0PV3HWfWq9Ic' +
  77.         'q2v9YXWeYhRrJl3Q9VBSLzEzuxE3EK2ZdEG2d1G2d3KiNZMuqEsot' +
  78.         'eeb1txw2+jWTLqgXqEEn2xOcGNtJl0z6YJs76Js7+SkayZdUMdQms' +
  79.         '80obaBXqFeM+mCbO+ibO/k1GsmXVDfULJPMzq1UV4kYDPpgrqHUn6' +
  80.         'OoZ0N8ToNm0kXZHsXZXsnp2Ez6YJGhBJ/gnGRja8LGZtJFzQolP6j' +
  81.         'GVxySjaTLsgSKMrgklOymXRBvgAvyre8khOzmXRBfvhVlB83J6dnM' +
  82.         '+mCbO+ibO/k9GwmXZBf+ijKr1klJ2kz6YJs76Js7+QkbSZdkH8uoy' +
  83.         'j/QE1yqjaTLsg/NFqUf9o3OWGbSRdkexdleycnbDPpgvwHW0X5L+2' +
  84.         'S07aZdEH+c9ui/HfSycnbTLog27so2zs5eZtJFzQ5lLn0crGkQYym' +
  85.         'cDPpgmzvomzv5BRuJl3Q/FBG08WVjEYwgcjNpAtaEsp0rmtuKP4cv' +
  86.         'jhqdvLdP2J7F2V7J3f9i6NjJ3XsxT+1KpQBXdQWUPZpuvz1eua8zr' +
  87.         'x1g4WhzOiKhnqCz2R7Nzvz1g1s76Js7+R6fXF04NQOvHKbtaGMqdm' +
  88.         'n6aSerONfr6fN7rT7NlseavkBivqom8jz9f3r9agJHnXZK5aHWn6A' +
  89.         'omzv5GzvZkdd9ooMoTKcoZx4NHmX6P7X6zlzPOemF2UIleEM5djey' +
  90.         'Y0Y0CGjPOSa1yUJleQYhQSLCbvKoAGdMNAT7thFnlB5TlKCr7WTGz' +
  91.         'SgE2Z6wh27yBMqz0lKsL2TGzeg7ce6/QV7SRUq1WGS+7OVmGsNHdD' +
  92.         'ew937dh3lCZXnJCX43Du50e8A3Hi4G1+trzyh8pykBNs7uTfxe81l' +
  93.         '1/nueq/ukoRKcoxCvOckOdu72a736i5DqAxnKOfim4S/rul6lT39V' +
  94.         'qlvvS1nseWlRsgQKsMZyvloe3dfv1b6n377S3POByptvxsNsjzU8g' +
  95.         'MU9f4L86elOieyZf7otcC4JpvV3uw64ywPtfwART11e782l0Q+fJO' +
  96.         '/Dmjax6pus+uMszaUMTW7f1IdXI/LB33aGp+5vSc8/kw73WWohaHM' +
  97.         'qFnbMswQ/Jw1/njHad+5mvBRJtjmIqPZ3oVc/FZ2quDbr/H71Wbec' +
  98.         'Y+ee9xiglWhDOgjr4uuLWDC7Lvu8Jk/L376oNXtcYsJVv08a/4HrW' +
  99.         'jEDyJzxt/vU/El23vJR+xugyvMYXvn9Ocq22x7322zwxdepHrA6ue' +
  100.         'fxucG2Ux4D0n+EWyww5e/yWfhR7+o9OFn8n25PD5aWRdLlhhE3R2+' +
  101.         '/ORFu92UPvxMtncGDS/2E7b3zfJN+KlV3/H+8RgV1T35ZN7OtFbza' +
  102.         'roes9Y4Cu3wJNs7yRkaFD32fLb3Qmu/d11xHPnPfD9hkqMmOcZHKp' +
  103.         '55iWmhTOTR9c8ku/SsOJTMn4Q/HizPIfOcJKjcgVeZE8o4HqVavEV' +
  104.         'Hk/DYT0fKc8I8Jwkqd+BVbO+ZOn7emO1x5sv2SXja7f2d7DB/qnXa' +
  105.         'hSaEMoubvh06PlrpASU5/OsxkhzsLtt53ih01LVGhzKIm+4d0v5dM' +
  106.         'N/yw/94gOWnepXwSD+qcs7lbO8JRkSwvR8tPP9vHzph0oRH+lGVcy' +
  107.         '43NJQpjPvebPJP5udb8m3wNx8xZ8+cp3pS4pAZ2N7j1Gq7x7Am36L' +
  108.         'c9v5OfLC7/CdMYlyow0dQ8VtSe4wsya8wZI6Z+Wzf6Y+XR5Wv62up' +
  109.         '+06ePQaXoX/mkpnP9p3+eHlYAt2Vfgv9NoNb/m2r5CUzHy/z2VLxB' +
  110.         'XhfSb5sz/nIk61NlD9j2hOmPVg2fvjV0cy7L//csoSFn5yUaJjzkD' +
  111.         'lPlZDt3Uuedzskf/DJVr0xvkrDhOdMeKSc/NJHF6neaVzi8WfqdZe' +
  112.         'PHqdKwITnTHiknPxzGdctuXiGt1UUcv0unz5CoXrZjprtPGnZ3het' +
  113.         'urXt/amL19l4e38nO22qw2S25IvKbST85zUqfpRpmq/T8AfLpctz4' +
  114.         'DwnSc72brb2yrZ3m2l7uFy6PAfOc5LkuoQ6s/YJ23vmB5pj2jdAKn' +
  115.         'ZLcuYkx8hv/k9z9rD81tu8t3y+OW8dKRotw7EznKEE27tBhivb3ld' +
  116.         'M+I2butGWn3z5Aaq4/oP4zHpVerryiIf9PjLmQn/e6OKV6xZbfvLl' +
  117.         'B6hi71Ajbjeo2KcPu/fgJngf8Hre0gNae/jS6WbaO1T3243LZXvP9' +
  118.         '1vDLm2rD2jh+aunm2b7UB0vmGd1t/0RXv2Y0fa+WXWFDdLNcUKoXn' +
  119.         'dM8j2TK3+KJ68Zkz9bJltyiz3STXBIqLTfxmx+2EMGN8FjyRJfqc1' +
  120.         'ke2d2SCjbm9/cS/ZNus2A5l9km3SjnRPqyk2zre6Lf5Ynt5i2928m' +
  121.         '32WndEMdFSrVd5iPfTtxToXenrTEzOtslm6c00LleXeH7Z3HiF9H2' +
  122.         'mxAtndCp4VK8rbqtN+HP5DvewdNu9F+6QY5MNRHV07725oHDm6EQW' +
  123.         '846f5oScy51JbpRjgzVPDWaT/x7vUgPGX0jsE/TbjXrum6OzZU5OJ' +
  124.         'pP/Hu+DgnG/erOn0fKhXbO49jQy3Z3pZDHuN+R777Q2Uz+mobp+vr' +
  125.         '5FDv7555dXd/tNO8qeeLo4iht9s7XUeHh5rwKh70gIcP7iLb+7pxF' +
  126.         '9w+XS+Hh/rt+slX94gHPMef6fxYOSjzj/VPINTo7392f7Rxj3mCaT' +
  127.         '/vOGFAtvdaQn0Pfu9B90cb95jbm/lO0UMG5Lm9kFA35X5r44v0Rsw' +
  128.         '9oe43PSfdRULdfI3Z3vLm8dEsDO4jfXOJHyTU3T1Fryba5vHpLMzu' +
  129.         'I7b3EkI96vsFr7ZJtA3C+D7ihTOfUE984r2Z5kGY4Ke8diYT6kmXI' +
  130.         'KrmYXvP5OUzk1BPunzzRNUkrgzCEBvY3jMJ9eQWxKt+AxcHYY5tfP' +
  131.         'IzjVCPrr/tRM8kfBK4kL835xDq0cV3fYuZhB+fLeer1wmEevRUw5u' +
  132.         'Ei7K9l7O9JxDq0WuNeB8lk/DG4yR8+3E0oR41b28Zk/BLf6n4Pamh' +
  133.         'hLr7LUUkkYwZjJiCyV7k50fjCHX3JsX7ShomYXvn5OdHgwh117aiB' +
  134.         'Uxi0CDM9zrbexCh7mzvusZNwXy78M/zjiDU3Z8prrwjhXGGTsGIe/' +
  135.         'H2re6Euvv0p5PSZTB6CqbckXdw9SXU3UdPLd2SsL0Lsb37EurO9i5' +
  136.         'nwhQMui/vv+1IqDvfl6tlzhTMuruGHzDxI6HupChk2rA8K0bwCxRd' +
  137.         'CHUnRSG2d2m2dxdC3UlRxcxJeVYM0vyrzdwJdSdFCV9s5LcRT35SF' +
  138.         'SXUnRS88qyYT/Mgoe6k4JVnxXyaBwl1JwWvPCvm0zxIqDspeOVZMZ' +
  139.         '/mQUI9UoNHng9LyB4k1CM1eOT5sITsQUI9UoNHng9LyB4k1CM1eOT' +
  140.         '5sITsQUI9UoNHng9LyB4k1BNBuPFMWEX5IKGeCMKNZ8IqygcJ9UQQ' +
  141.         'bjwTVlE+SKgngnDjmbCK8kFCPRGEG8+EVZQPEuqVJngOLCR+kFCvN' +
  142.         'MFzYCHxg4R6pQmeAwuJHyTUj2Q5memvpX+QUD+S5WSmv5b+QUL9SJ' +
  143.         'aTmf5a+gcJ9RtlzmTuyxlBkFC/UeZM5r6cEQQJ9YY4pzHxDEwhSKg' +
  144.         '3xDmNiWdgCkFCvSHOaUw8A1MIEuo9fc5h1kkYRJBQ7+lzDrNOwiCC' +
  145.         'hPqTRCcw5TzMIkioP0l0AlPOwyyChIpQaW/mm4pxBAkVJNSuTDYbE' +
  146.         'wkSKkioXZlsNiYSJFScVvsx04QMJUioOK32Y6YJGUqQUB+RayemmZ' +
  147.         'O5BAn1KcX2YI5pGU2QUJ9SbA/mmJbRBAnVQLTqTDAz0wkSqo1udZl' +
  148.         'dcgYUJFQz6SoytfzMKEioZtJVZGr5mVGQUFeoV4t5lWBMQUJdJGAV' +
  149.         'JlWFSQUJdZ2G+ZlRIYYVJFQXMmZmOrWYV5BQvSiZk7mUY2RBQnUkZ' +
  150.         'jYmUpGpBQnVl555mEVRBhckVHeSZmAKdZldkFAjqLqW/qUZX5BQgw' +
  151.         'i7ivLVmWCQUONoO5/mGzDEIKGGkncmtfdgjkFCjfb1j9Wn2JzIOzH' +
  152.         'KIKHm0HkcbTdjoEFCTSP1CKrux0yDhJrJF/gdibkrYw0Saj7Nr9Nw' +
  153.         'Y4YbJNQSPm9sJt32zDdIqIXE/5RiJzDlIKHW8plkkFDnMOggoTKwm' +
  154.         't4Q5zTGHSRUHtbUE0HOZOhBQmVjZX2LcDajDxIqp2PX17EX584TIE' +
  155.         'iozL7+b/VBhjvnpvzJ0yBIqBI23mwbX402ng9BQhWy0yeoO92Fvjw' +
  156.         'rgoSqqO7qq3typvH0CBKqtCrLsMo5ycDzJEioPXw9WH2WfyU8EiV4' +
  157.         'wgQJtZ+v/9r+47IZT54gobb39ZOEjwk3nktBQp3px/Ubt/r47MwTL' +
  158.         'EgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIB' +
  159.         'VLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUg' +
  160.         'oIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVL' +
  161.         'KUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoI' +
  162.         'BVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKU' +
  163.         'goIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKegLIJn' +
  164.         'VexEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
  165.         'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
  166.         'IBK/gdQF2fi');
  167. end;
  168.  
  169. procedure Setup;
  170. var
  171.   TPA: TPointArray;
  172.   w, h, t, x, y: Integer;
  173. begin
  174.   Example;
  175.   GetBitmapSize(bmp, w, h);
  176.   DisplayDebugImgWindow(w, h);
  177.   DrawBitmapDebugImg(bmp);
  178.   FreeBitmap(bmp);
  179.   Example;
  180.   TPA := GetBitmapColorTPA(bmp, 0);
  181.   t := GetSystemTime;
  182.   pp_TPACorners(TPA);
  183.   WriteLn('TPACorners() finished in ' + IntToStr(GetSystemTime - t) + ' ms.');
  184.   while ((GetSystemTime - t) < DISPLAY_DELAY) do
  185.     Wait(1);
  186.   SetPixels(bmp, TPA, CORNER_COLOR);
  187.   DrawBitmapDebugImg(bmp);
  188.   FreeBitmap(bmp);
  189.   SetLength(TPA, 0);
  190. end;
  191.  
  192. begin
  193.   ClearDebug;
  194.   Setup;
  195. end.
Advertisement
Add Comment
Please, Sign In to add comment