| 635 | } |
| 636 | |
| 637 | private float[] getOrthoLine(ImageProcessor ip, int x1, int y1, int x2, int y2, float[] data) { |
| 638 | int w = ip.getWidth(); |
| 639 | int h = ip.getHeight(); |
| 640 | boolean checkBounds = x1<0||x1>w||y1<0||y1>h||x2<0||x2>w||y2<0||y2>h; |
| 641 | int dx = x2-x1; |
| 642 | int dy = y2-y1; |
| 643 | int n = Math.max(Math.abs(dx), Math.abs(dy)); |
| 644 | if (data==null) |
| 645 | data = new float[n]; |
| 646 | int xinc = dx/n; |
| 647 | int yinc = dy/n; |
| 648 | int width = ip.getWidth(); |
| 649 | int height = ip.getHeight(); |
| 650 | for (int i=0; i<n; i++) { |
| 651 | if (rgb) { |
| 652 | int rgbPixel = ((ColorProcessor)ip).getPixel(x1, y1); |
| 653 | data[i] = Float.intBitsToFloat(rgbPixel&0xffffff); |
| 654 | } else if (checkBounds) |
| 655 | data[i] = x1>0&&x1<width&&y1>0&&y1<height?ip.getf(x1,y1):0; |
| 656 | else |
| 657 | data[i] = ip.getf(x1,y1); |
| 658 | x1 += xinc; |
| 659 | y1 += yinc; |
| 660 | } |
| 661 | return data; |
| 662 | } |
| 663 | |
| 664 | void drawLine(double x1, double y1, double x2, double y2, ImagePlus imp) { |
| 665 | ImageCanvas ic = imp.getCanvas(); |