(Roi roi, ImageProcessor ip)
| 533 | } |
| 534 | |
| 535 | float[] getIrregularProfile(Roi roi, ImageProcessor ip) { |
| 536 | if (x==null) |
| 537 | doIrregularSetup(roi); |
| 538 | float[] values = new float[(int)length]; |
| 539 | double leftOver = 1.0; |
| 540 | double distance = 0.0; |
| 541 | int index; |
| 542 | double oldx=xbase, oldy=ybase; |
| 543 | for (int i=0; i<n; i++) { |
| 544 | double len = segmentLengths[i]; |
| 545 | if (len==0.0) |
| 546 | continue; |
| 547 | double xinc = dx[i]/len; |
| 548 | double yinc = dy[i]/len; |
| 549 | double start = 1.0-leftOver; |
| 550 | double rx = xbase+x[i]+start*xinc; |
| 551 | double ry = ybase+y[i]+start*yinc; |
| 552 | double len2 = len - start; |
| 553 | int n2 = (int)len2; |
| 554 | for (int j=0; j<=n2; j++) { |
| 555 | index = (int)distance+j; |
| 556 | if (index<values.length) { |
| 557 | if (notFloat) |
| 558 | values[index] = (float)ip.getInterpolatedPixel(rx, ry); |
| 559 | else if (rgb) { |
| 560 | int rgbPixel = ((ColorProcessor)ip).getInterpolatedRGBPixel(rx, ry); |
| 561 | values[index] = Float.intBitsToFloat(rgbPixel&0xffffff); |
| 562 | } else |
| 563 | values[index] = (float)ip.getInterpolatedValue(rx, ry); |
| 564 | } |
| 565 | rx += xinc; |
| 566 | ry += yinc; |
| 567 | } |
| 568 | distance += len; |
| 569 | leftOver = len2 - n2; |
| 570 | } |
| 571 | |
| 572 | return values; |
| 573 | |
| 574 | } |
| 575 | |
| 576 | void doIrregularSetup(Roi roi) { |
| 577 | n = ((PolygonRoi)roi).getNCoordinates(); |
no test coverage detected