| 561 | } |
| 562 | |
| 563 | static void ChamferedDistanceTransformSlow(uint32* out, int width, int height, int startX, int startY, int endX, int endY) |
| 564 | { |
| 565 | AutoPerf gPerf("ImgEffects - ChamferedDistanceTransform"); |
| 566 | |
| 567 | int kernelCountFwd = sizeof(gKernelValsFwd) / sizeof(int); |
| 568 | int kernelCountRev = sizeof(gKernelValsRev) / sizeof(int); |
| 569 | |
| 570 | for (int y = startY; y < endY; y++) |
| 571 | { |
| 572 | for (int x = startX; x < endX; x++) |
| 573 | { |
| 574 | for (int kernIdx = 0; kernIdx < kernelCountFwd; kernIdx++) |
| 575 | { |
| 576 | int cx = BFClamp(x + gKernelOfsFwd[kernIdx][0], 0, width - 1); |
| 577 | int cy = BFClamp(y + gKernelOfsFwd[kernIdx][1], 0, height - 1); |
| 578 | int aVal = out[cx+cy*width] + gKernelValsFwd[kernIdx]; |
| 579 | if (aVal < (int) out[x+y*width]) |
| 580 | out[x+y*width] = aVal; |
| 581 | } |
| 582 | } |
| 583 | } |
| 584 | |
| 585 | for (int y = endY - 1; y >= startY; y--) |
| 586 | { |
| 587 | for (int x = endX - 1; x >= startX; x--) |
| 588 | { |
| 589 | for (int kernIdx = 0; kernIdx < kernelCountRev; kernIdx++) |
| 590 | { |
| 591 | int cx = BFClamp(x + gKernelOfsRev[kernIdx][0], 0, width - 1); |
| 592 | int cy = BFClamp(y + gKernelOfsRev[kernIdx][1], 0, height - 1); |
| 593 | int aVal = out[cx+cy*width] + gKernelValsRev[kernIdx]; |
| 594 | if (aVal < (int) out[x+y*width]) |
| 595 | out[x+y*width] = aVal; |
| 596 | } |
| 597 | } |
| 598 | } |
| 599 | } |
| 600 | |
| 601 | static void ChamferedDistanceTransform(uint32* out, int width, int height) |
| 602 | { |
no test coverage detected