Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {$loadlib pumbaa.dll}
- // BLACK [0] pixels is the TPA we use flood fill for.
- // NOTE: If you use start point to point that TPA contains (which is inside AREA!), it will floodfill
- // the outline pixels (TPA points) inside the area, else it will do the opposite.
- // ..that is, filling the white pixels (non-TPA points) inside the area.
- const
- CORNER_COLOR = 255; // ..with this color.
- DISPLAY_DELAY = 1000; // Minimum delay that it waits before it shows the result.
- {==============================================================================]
- Explanation: Sets points from TPA that are inside bmp as color.
- [==============================================================================}
- procedure SetPixels(bmp: Integer; TPA: TPointArray; color: Integer);
- var
- a, z, w, h: Integer;
- begin
- z := High(TPA);
- if (z > -1) then
- begin
- GetBitmapSize(bmp, w, h);
- for a := 0 to z do
- if ((TPA[a].X >= 0) and (TPA[a].Y >= 0) and (TPA[a].X < w) and (TPA[a].Y < h)) then
- FastSetPixel(bmp, TPA[a].X, TPA[a].Y, color);
- end;
- end;
- {==============================================================================]
- Explanation: Returns all the color points from bitmap as TPointArray.
- Result is based on Row-by-Row.
- [==============================================================================}
- function GetBitmapColorTPA(bmp: Integer; color: Integer): TPointArray;
- var
- w, h, x, y, r: Integer;
- begin
- try
- GetBitmapSize(bmp, w, h);
- except
- end;
- if ((w > 0) and (h > 0)) then
- begin
- SetLength(Result, (w * h));
- for y := 0 to (h - 1) do
- for x := 0 to (w - 1) do
- if (FastGetPixel(bmp, x, y) = color) then
- begin
- Result[r] := Point(x, y);
- Inc(r);
- end;
- end;
- SetLength(Result, r);
- end;
- var
- bmp: Integer;
- procedure Example;
- begin
- bmp := BitmapFromString(490, 361, 'meJzt3dtyorkOgNG8/0tnVw2z' +
- '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' +
- '55iWmhTOTR9c8ku/SsOJTMn4Q/HizPIfOcJKjcgVeZE8o4HqVavEV' +
- 'Hk/DYT0fKc8I8Jwkqd+BVbO+ZOn7emO1x5sv2SXja7f2d7DB/qnXa' +
- 'hSaEMoubvh06PlrpASU5/OsxkhzsLtt53ih01LVGhzKIm+4d0v5dM' +
- 'N/yw/94gOWnepXwSD+qcs7lbO8JRkSwvR8tPP9vHzph0oRH+lGVcy' +
- '43NJQpjPvebPJP5udb8m3wNx8xZ8+cp3pS4pAZ2N7j1Gq7x7Am36L' +
- 'c9v5OfLC7/CdMYlyow0dQ8VtSe4wsya8wZI6Z+Wzf6Y+XR5Wv62up' +
- '+06ePQaXoX/mkpnP9p3+eHlYAt2Vfgv9NoNb/m2r5CUzHy/z2VLxB' +
- 'XhfSb5sz/nIk61NlD9j2hOmPVg2fvjV0cy7L//csoSFn5yUaJjzkD' +
- 'lPlZDt3Uuedzskf/DJVr0xvkrDhOdMeKSc/NJHF6neaVzi8WfqdZe' +
- 'PHqdKwITnTHiknPxzGdctuXiGt1UUcv0unz5CoXrZjprtPGnZ3het' +
- 'urXt/amL19l4e38nO22qw2S25IvKbST85zUqfpRpmq/T8AfLpctz4' +
- 'DwnSc72brb2yrZ3m2l7uFy6PAfOc5LkuoQ6s/YJ23vmB5pj2jdAKn' +
- 'ZLcuYkx8hv/k9z9rD81tu8t3y+OW8dKRotw7EznKEE27tBhivb3ld' +
- 'M+I2butGWn3z5Aaq4/oP4zHpVerryiIf9PjLmQn/e6OKV6xZbfvLl' +
- 'B6hi71Ajbjeo2KcPu/fgJngf8Hre0gNae/jS6WbaO1T3243LZXvP9' +
- '1vDLm2rD2jh+aunm2b7UB0vmGd1t/0RXv2Y0fa+WXWFDdLNcUKoXn' +
- 'dM8j2TK3+KJ68Zkz9bJltyiz3STXBIqLTfxmx+2EMGN8FjyRJfqc1' +
- 'ke2d2SCjbm9/cS/ZNus2A5l9km3SjnRPqyk2zre6Lf5Ynt5i2928m' +
- '32WndEMdFSrVd5iPfTtxToXenrTEzOtslm6c00LleXeH7Z3HiF9H2' +
- 'mxAtndCp4VK8rbqtN+HP5DvewdNu9F+6QY5MNRHV07725oHDm6EQW' +
- '846f5oScy51JbpRjgzVPDWaT/x7vUgPGX0jsE/TbjXrum6OzZU5OJ' +
- 'pP/Hu+DgnG/erOn0fKhXbO49jQy3Z3pZDHuN+R777Q2Uz+mobp+vr' +
- '5FDv7555dXd/tNO8qeeLo4iht9s7XUeHh5rwKh70gIcP7iLb+7pxF' +
- '9w+XS+Hh/rt+slX94gHPMef6fxYOSjzj/VPINTo7392f7Rxj3mCaT' +
- '/vOGFAtvdaQn0Pfu9B90cb95jbm/lO0UMG5Lm9kFA35X5r44v0Rsw' +
- '9oe43PSfdRULdfI3Z3vLm8dEsDO4jfXOJHyTU3T1Fryba5vHpLMzu' +
- 'I7b3EkI96vsFr7ZJtA3C+D7ihTOfUE984r2Z5kGY4Ke8diYT6kmXI' +
- 'KrmYXvP5OUzk1BPunzzRNUkrgzCEBvY3jMJ9eQWxKt+AxcHYY5tfP' +
- 'IzjVCPrr/tRM8kfBK4kL835xDq0cV3fYuZhB+fLeer1wmEevRUw5u' +
- 'Ei7K9l7O9JxDq0WuNeB8lk/DG4yR8+3E0oR41b28Zk/BLf6n4Pamh' +
- 'hLr7LUUkkYwZjJiCyV7k50fjCHX3JsX7ShomYXvn5OdHgwh117aiB' +
- 'Uxi0CDM9zrbexCh7mzvusZNwXy78M/zjiDU3Z8prrwjhXGGTsGIe/' +
- 'H2re6Euvv0p5PSZTB6CqbckXdw9SXU3UdPLd2SsL0Lsb37EurO9i5' +
- 'nwhQMui/vv+1IqDvfl6tlzhTMuruGHzDxI6HupChk2rA8K0bwCxRd' +
- 'CHUnRSG2d2m2dxdC3UlRxcxJeVYM0vyrzdwJdSdFCV9s5LcRT35SF' +
- 'SXUnRS88qyYT/Mgoe6k4JVnxXyaBwl1JwWvPCvm0zxIqDspeOVZMZ' +
- '/mQUI9UoNHng9LyB4k1CM1eOT5sITsQUI9UoNHng9LyB4k1CM1eOT' +
- '5sITsQUI9UoNHng9LyB4k1BNBuPFMWEX5IKGeCMKNZ8IqygcJ9UQQ' +
- 'bjwTVlE+SKgngnDjmbCK8kFCPRGEG8+EVZQPEuqVJngOLCR+kFCvN' +
- 'MFzYCHxg4R6pQmeAwuJHyTUj2Q5memvpX+QUD+S5WSmv5b+QUL9SJ' +
- 'aTmf5a+gcJ9RtlzmTuyxlBkFC/UeZM5r6cEQQJ9YY4pzHxDEwhSKg' +
- '3xDmNiWdgCkFCvSHOaUw8A1MIEuo9fc5h1kkYRJBQ7+lzDrNOwiCC' +
- 'hPqTRCcw5TzMIkioP0l0AlPOwyyChIpQaW/mm4pxBAkVJNSuTDYbE' +
- 'wkSKkioXZlsNiYSJFScVvsx04QMJUioOK32Y6YJGUqQUB+RayemmZ' +
- 'O5BAn1KcX2YI5pGU2QUJ9SbA/mmJbRBAnVQLTqTDAz0wkSqo1udZl' +
- 'dcgYUJFQz6SoytfzMKEioZtJVZGr5mVGQUFeoV4t5lWBMQUJdJGAV' +
- 'JlWFSQUJdZ2G+ZlRIYYVJFQXMmZmOrWYV5BQvSiZk7mUY2RBQnUkZ' +
- 'jYmUpGpBQnVl555mEVRBhckVHeSZmAKdZldkFAjqLqW/qUZX5BQgw' +
- 'i7ivLVmWCQUONoO5/mGzDEIKGGkncmtfdgjkFCjfb1j9Wn2JzIOzH' +
- 'KIKHm0HkcbTdjoEFCTSP1CKrux0yDhJrJF/gdibkrYw0Saj7Nr9Nw' +
- 'Y4YbJNQSPm9sJt32zDdIqIXE/5RiJzDlIKHW8plkkFDnMOggoTKwm' +
- 't4Q5zTGHSRUHtbUE0HOZOhBQmVjZX2LcDajDxIqp2PX17EX584TIE' +
- 'iozL7+b/VBhjvnpvzJ0yBIqBI23mwbX402ng9BQhWy0yeoO92Fvjw' +
- 'rgoSqqO7qq3typvH0CBKqtCrLsMo5ycDzJEioPXw9WH2WfyU8EiV4' +
- 'wgQJtZ+v/9r+47IZT54gobb39ZOEjwk3nktBQp3px/Ubt/r47MwTL' +
- 'EgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIB' +
- 'VLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUg' +
- 'oIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVL' +
- 'KUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoI' +
- 'BVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKU' +
- 'goIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKUgoIBVLKegLIJn' +
- 'VexEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
- 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
- 'IBK/gdQF2fi');
- end;
- procedure Setup;
- var
- TPA: TPointArray;
- w, h, t, x, y: Integer;
- begin
- Example;
- GetBitmapSize(bmp, w, h);
- DisplayDebugImgWindow(w, h);
- DrawBitmapDebugImg(bmp);
- FreeBitmap(bmp);
- Example;
- TPA := GetBitmapColorTPA(bmp, 0);
- t := GetSystemTime;
- pp_TPACorners(TPA);
- WriteLn('TPACorners() finished in ' + IntToStr(GetSystemTime - t) + ' ms.');
- while ((GetSystemTime - t) < DISPLAY_DELAY) do
- Wait(1);
- SetPixels(bmp, TPA, CORNER_COLOR);
- DrawBitmapDebugImg(bmp);
- FreeBitmap(bmp);
- SetLength(TPA, 0);
- end;
- begin
- ClearDebug;
- Setup;
- end.
Advertisement
Add Comment
Please, Sign In to add comment