@Override public boolean run(JEXEntry optionalEntry) { if (imageData == null || !imageData.getTypeName().getType().equals(JEXData.IMAGE)) { return false; } // Run the function TreeMap<DimensionMap, String> images = ImageReader.readObjectToImagePathTable(imageData); TreeMap<DimensionMap, String> outputMap = new TreeMap<DimensionMap, String>(); int count = 0; int total = images.size(); for (DimensionMap dim : images.keySet()) { if (this.isCanceled()) { return false; } String path = images.get(dim); // File f = new File(path); // get the image ImagePlus im = new ImagePlus(path); ij.process.ImageProcessor imProc = im.getProcessor(); if (imProc == null) continue; FloatProcessor imp = (FloatProcessor) im.getProcessor().convertToFloat(); // should be a float processor int newWidth = (int) (imp.getWidth() * scale); imp.setInterpolationMethod(ImageProcessor.BILINEAR); imp = (FloatProcessor) imp.resize(newWidth); ImagePlus toSave = FunctionUtility.makeImageToSave(imp, "false", bitDepth); String finalPath = JEXWriter.saveImage(toSave); outputMap.put(dim.copy(), finalPath); Logs.log("Finished processing " + count + " of " + total + ".", 1, this); count++; // Status bar int percentage = (int) (100 * ((double) count / (double) images.size())); JEXStatics.statusBar.setProgressPercentage(percentage); } // Set the outputs output = ImageWriter.makeImageStackFromPaths("temp", outputMap); output.setDataObjectInfo("Stack binned using binning function"); // Return status return true; }