if (virtualStack) status = outputSlices>1?(i+1)+"/"+outputSlices+", ":""; ImageProcessor ip = getSlice(imp, X1, Y1, X2, Y2, status); if (isStack) drawLine(X1, Y1, X2, Y2, imp); if (stack2==null) { stack2 = createOutputStack(imp, ip); if (stack2==null || stack2.getSize()<outputSlices) return null; // out of memory
public ImagePlus radreslice(ImagePlus imp) { ImagePlus imp2; Roi roi = imp.getRoi(); int roiType = roi!=null?roi.getType():0; Calibration origCal = imp.getCalibration(); imp2 = radslice(imp); imp2.setCalibration(imp.getCalibration()); Calibration cal = imp2.getCalibration(); cal.pixelDepth = origCal.pixelHeight; return imp2; }
ImageProcessor getSlice(ImagePlus imp, double x1, double y1, double x2, double y2, String status) { Roi roi = imp.getRoi(); int roiType = roi!=null?roi.getType():0; ImageStack stack = imp.getStack(); int stackSize = stack.getSize(); ImageProcessor ip,ip2=null; float[] line = null; for (int i=0; i<stackSize; i++) { ip = stack.getProcessor(i+1); line = getLine(ip, x1, y1, x2, y2, line); if (i==0) ip2 = ip.createProcessor(line.length, stackSize); putRow(ip2, 0, i, line, line.length); if (status!=null) IJ.showStatus("Slicing: "+status +i+"/"+stackSize); } Calibration cal = imp.getCalibration(); double zSpacing = inputZSpacing/cal.pixelWidth; if (zSpacing!=1.0) { ip2.setInterpolate(true); ip2 = ip2.resize(line.length, (int)(stackSize*zSpacing)); } return ip2; }
return; if (!showDialog(imp)) //need to update the dialog return; long startTime = System.currentTimeMillis(); rgb = imp.getType()==ImagePlus.COLOR_RGB; imp2 = radreslice(imp); if (imp2==null) return;