scope regionBorder_innerPoints. static Pt[] #directions = { pt(1, 0), pt(0, 1), pt(-1, 0), pt(0, -1) // r, d, l, u }; static L<Pt> regionBorder_innerPoints(BWImage_FastRegions regions, int iRegion) { new PtBuffer out; Pt p = regions.samplePixel(iRegion); int x = p.x, y = p.y; // move up until we're at the edge of the region // probably we don't actually need to do this because of the way // the image was scanned, but we'll do it anyway while (y > 0 && regions.inRegion(iRegion, x, y-1)) y--; // found our first border pixel with background above int dir = 3; // direction up // remember first point int firstX = x, firstY = y; int safety = regions.size(); loop: do { out.add(x, y); for (int turn = 3; turn <= 6; turn++) { // try left, straight, right, back int newDir = (dir+turn) & 3; Pt d = directions[newDir]; int x2 = x+d.x, y2 = y+d.y; if (regions.inRegion(x2, y2, iRegion)) { x = x2; y = y2; dir = newDir; continue loop; } } // if we get here, the region is just 1 pixel (so we're done) break; } while ((x != firstX || y != firstY) && --safety >= 0); ret out; }
Began life as a copy of #1033758
download show line numbers debug dex old transpilations
Travelled to 3 computer(s): bhatertpkbcr, mowyntqkapby, mqqgnosmbjvj
No comments. add comment
Snippet ID: | #1033763 |
Snippet name: | regionBorder_innerPoints backup |
Eternal ID of this version: | #1033763/1 |
Text MD5: | 4cf94f6efdb69afa39d3ce19760ca768 |
Author: | stefan |
Category: | javax |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2022-01-02 05:01:58 |
Source code size: | 1236 bytes / 42 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 123 / 137 |
Referenced in: | [show references] |