Release Notes

- 1.54g 18 October 2023
  - Thanks to Yuekan Jiao, added a "16-bit histogram" option to the Image>Adjust>Threshold dialog and a '16-bit' option to the setAutoThreshold() macro function and the ImagePlus.setAutoThreshold(String) method. When this option is enabled, the full 16-bit histogram is used to calculate the threshold of 16-bit images (example).
  - Thanks to Eyal Rozenberg, the File>Import>Raw command uses the directory name as the image title when the "Open all files in folder" option is enabled.
  - Thanks to Zoltan Kis, the Process>Noise>Remove Outliers tools uses sliders for setting the radius and threshold.
  - Thanks to Nicolas De Francesco and Curtis Rueden, the macro language documentation (functions.html) is now included in ij.jar and is used by the Editor's Macros>Function Finder command.
  - Thanks to Robert Baer, the "Associate 'Show All' ROIs with slices" option in the ROI Manager's More>>Options dialog is now always enabled when ImageJ starts up.
  - Thanks to Christian Tischer, files with an "ome.tif" or "ome.tiff" extension are opened using Bio-Formats.
  - Thanks to Fred Damen and Michael Schmid, the ImageProcessor.getSliceNumber() method returns the stack position when not called from a PlugInFilter.
  - Thanks to Fred Damen, added the Dialog.getLocation(x,y) macro function.
  - Thanks to Philippe Carl, added the RoiManager.setPosition(c,z,t) macro function.
  - Thanks to Fred Damen, the second argument of the Dialog.addDirectory(label,defaultdir) function is no longer ignored when the user clicks on the "Browse" button.
  - Thanks to 'Phiir42', fixed bug with closed tables reopening after a macro finishes.
  - Thanks to 'Ender', fixed headless mode "Scale Bar" and "Show Info" bugs.
  - Thanks to Michael Schmid, fixed ImageCanvas.fitToWindow() bug with very small images or user resized windows (example).
  - Thanks to Michael Ellis and Michael Schmid, fixed a RotatedRectRoi rounding bug and a bug where newly created RotatedRectRois consisted of 5 points instead of 4.
  - Thanks to Volker Backer, fixed a Roi group bug with Fiji on Linux.
  - Thanks to Yuekan Jiao and Michael Schmid, fixed a rounding error with PointRoi.getContainedPoints().
  - Thanks to Guenter Pudmich, fixed a 1.54d regression that caused 16-bit grayscale PNGs to be opened incorrectly.
  - Thanks to Saleh Altahini, fixed bug with opening ImspectorPro MSR files.
- 1.54f 29 June 2023
  - Improved recording of the Analyze>Tools>Scale Bar command.
  - Thanks to Stephen Cross, added the Image>Overlay>Toggle Overlay command.
  - Thanks to Dennis Chang, drawString() defaults to antialiasing when the font size is 14 or greater and it is disabled by default on Macs to work around a Java/macOS text rendering bug (example macro, example script).
  - Thanks to Philippe Carl, made the ImagePanel class, used to add images to GenericDialogs, public (example).
  - Thanks to Norbert Vischer, File>New>Hyperstack adds slice labels when "Label Images" is checked in the dialog.
  - Fixed bug with getDir() macro function and IJ.getDir() method changing the default directory when they are used to choose a directory.
  - Thanks to 'sat1999', fixed bug with File.setDefaultDir() macro function and OpenDialog.setDefaultDirectory() method not working as expected when used with directory choosers added to dialog boxes.
  - Thanks to Norbert Vischer, fixed bug with Image>Color>Split Channels not correctly handling overlays.
  - Thanks to Norbert Vischer, fixed bug with Image>Color>Arrange Channels losing metadata.
  - Thanks to Jeremy Adler and Michael Schmid, fixed bug that caused Make Band to fail when the selection extended beyond the image edge.
  - Thanks to Julia Behnsen and Michael Schmid, fixed bug with automatic switching to scientific notation in results tables (test case).
  - Thanks to 'melikovk' and 'scuniff', fixed a PointRoi point count bug when points are added both programmatically and interactively.
  - Thanks to Herbie Gluender and Michael Schmid, fixed a bug with the Array.findMaxima() macro function that occurred when the first array element was NaN.
  - Thanks to Michael Cammer, fixed a 1.54e Analyze>Tools>Scale Bar regression with images that are spatially calibrated and have an ROI.
- 1.54e 4 June 2023
  - Thanks to Jerome Mutterer, added the Help>Examples>Plots>Plot with Spectrum example macro.
  - Thanks to Jerome Mutterer, selections can now be both filled and outlined. For an example, use the new Help>Examples>Macro>Easter Eggs command.
  - Thanks to Zoltan Kis, when manually switching image windows, "selectImage(title);" is recorded instead of "selectWindow(title);".
  - Thanks to Rodrigo Goncalves, added a "Do not create substack" checkbox to the Make Substack dialog.
  - Thanks to Eric Kischell, added a "Calibrate" checkbox to the Edit>Options>Conversions dialog and a setOption("CalibrateConversions",boolean) macro function (example).
  - Thanks to Chris Ambrose, the title is displayed in the status bar when the cursor is moved over an image and the alt key is down.
  - Thanks to 'Nottsuni', the Image>Show Info command displays both the pixel value range and the display range.
  - Thanks to Michael Ellis, the Edit>Selection>Interpolate command works with composite selections with holes.
  - Thanks to Philippe Carl and Michael Schmid, added the Plot.eneableLive() macro function.
  - Thanks to Jerome Mutterer, added the Color.wavelengthToColor() macro function and the Colors.wavelengthToColor() method.
  - Thanks to Michael Schmid, fixed issue with thresholding of 16-bit and float images with inverting LUTs.
  - Thanks to 'Jossie', fixed problem with Image>Color>Make Composite not working with 1 channel, 3 slice stacks (example).
  - Thanks to Michael Schmid, fixed several scale bar bugs.
  - Thanks to Philippe Carl, fixed bug with roiManager("Select",i) macro function not updating the active selection.
  - Thanks to Kurt De Vos, fixed bug with using Process>Filter>Convolve in Fiji headless mode.
  - Thanks to Alan Brooks, fixed transparency bug with the ImageRoi.setProcessor() method (example).
  - Thanks to Rodrigo Goncalves, added a warning message to the Make Substack dialog with virtual stacks opened by Fiji's FFMPEG plugin, which does not support slice deletion.
  - Thanks to Justin Conroy, fixed arrow selection scaling bug.
  - Thanks to Herbie Gluender, fixed isKeyDown() bug when using "Run" button in macro editor.
  - Thanks to Jerome Mutterer, fixed a bug with deleting a rescaled overlay image ROI with a transparent background.
- 1.54d 30 March 2023
  - Thanks to Norbert Vischer, added an '#include' statement to the macro language. For an example, use the Help>Examples>Macro>Turtle Graphics command.
  - Thanks to Stein Rorvik and Dennis Chang, added the "Full range 16-bit inversions" option to the Edit>Options>Conversions dialog and the setOption("fullRangeInversions") macro function.
  - The Image>Show Info command now displays LUT information for 16 and 32 bit images.
  - Thanks to Norbert Vischer, the Process>Binary>Convert to Mask command no longer records the unnecessary and confusing "method=Default background=Default" options.
  - Thanks to 'Maro', added the RoiManager.selectPosition(c,z,t) macro function.
  - Thanks to Wilco Kasteleijn, fixed a bug with opening 16-bit RGB PNGs (example).
  - Thanks to Christian Tischer, fixed bug that caused the ImagePlus.getDisplayRangeMin() and ImagePlus.getDisplayRangeMax() methods to not work with undisplayed composite color images.
  - Fixed GUI scaling of Image>Color>Show LUT plots.
  - Thanks to 'librethinker', fixed bug that limited Minimum and Maximum for 16-bit images in the Brightness/Contrast dialog to 0 and 65,535.
  - Thanks to 'KlMichel', fixed bug with ROI Manager "Multi Measure" command and point selections.
  - Thanks to 'jboulanger', fixed a bug with Image>Stacks>Tools>Make Substack where modifications to the newly created stack appeared in the original stack.
  - Thanks to Eric Denarier, fixed a bug with creation of selections less than one pixel in size.
  - Thanks to Corey Elowsky, fixed bug where a red cursor was saved with synchronized images.
  - Fixed a 1.53g text editor regression where Search and Debug selections were not visible on windows with "Run", "Install" and "Macro" buttons.
  - Thanks to Dennis Chang, fixed a 1.53k regression that caused the Edit>Invert command to not work as expected with density calibrated 16-bit images.
- 1.54c 6 March 2023
  - Thanks to Jerome Mutterer, added support for Turtle Graphics.
  - Thanks to Eugene Katrukha, re-implemented the Edit>Selection>Fit Spline command using Haysn Hornbeck's freely available "Fast Cubic Spline Interpolation" algorithm.
  - Thanks to Paul Evans, ImageJ now opens 10-bit tiffs.
  - Thanks to Stein Rorvik, text rendering in the Log window and tables is optimized for LCD screens on Linux and Windows,
  - Thanks to Damon Poburko, the Save command in the ROI Manager is now much faster.
  - Thanks to Fred Damen, added a Font>Monospaced checkbox menu command to the Log window.
  - Thanks to Fred Damen, the Edit>Options>Compiler command supports Java versions greater than 9.
  - Thanks to 'michihaa', the File>Import>Tiff Virtual Stack command calls the Bio-Formats Importer for files that can't be opened by the built in tiff reader.
  - Thanks to Stein Rorvik, added the TextWindow.setAntialiased(boolean) method.
  - Fixed a bug that caused the selectImage(n) macro function, where n>0, to sometimes fail in batch mode macros.
  - Thanks to 'Sethur', fixed a bug that caused the current working directory to not be transferred to plugins executed from command line macros.
  - Thanks to 'Sethur', fixed a bug the caused the ImagePlus.setPositionWithoutUpdate(c,z,t) method to not work as expected.
  - Thanks to Eugene Katrukha, fixed a bug that caused the Edit>Selection>Fit Spline command to shorten freehand line selections.
  - Thanks to 'lguerard', fixed a v1.53 regression that caused the Image>Overlay>Flatten command to not work correctly with hyperstacks.
  - Thanks to 'Sethur', fixed a v1.53t regression that caused "Average Intensity" Z projection to not work correctly with 32-bit hyperstacks.
  - Thanks to Eugene Katrukha, fixed a bug that caused the Edit>Selection>Fit Spline command to shorten freehand line selections.
  - Thanks to 'michihaa', fixed a bug that caused files with a ".tiff" extension dragged and dropped on the ">>" icon in the toolbar to not open as virtual stacks.
- 1.54b 08 January 2023
  - Fixed a 1.54a regression (changing IJ.URL2 to "http://imagej.net/ij") that caused the sample images to fail to load on Fiji.
- 1.54a 05 January 2023
  - Thanks to Herbie Gluender, added the Process>Binary>Median command and the ImageProcessor.threshold(level1,level2) method.
  - Thanks to Michael Cammer, setOption("ScaleConversions",boolean) is recorded when doing stack conversions.
  - Thanks to Volko Straub, added the recordable RoiManager.associateROIsWithSlices(), RoiManager.restoreCentered() and RoiManager.useNamesAsLabels() macro functions.
  - Thanks to Christian Tischer, added the AVI_Reader.open(path,options) method.
  - Thanks to Wilhelm Burger, added the GenericDialog.addEnumChoice() method (BeanShell example).
  - Thanks to Wilhelm Burger, added the ImageProcessor.isThreshold() method.
  - Changed the URL constant in IJ.java from "http://imagej.nih.gov/ij" to "http://imagej.net/ij".
  - Thanks to Andrew McCall, fixed a bug that caused the Image>Transform>Rotate command to fail when rotating very large stacks, but processing is now slower because multi-threading is no longer used.
  - Thanks to 'rlazevedo1', fixed a bug that caused plot symbols to not be drawn correctly when the line width was greater that 3 (example).
  - Thanks to 'rlazevedo1', fixed a bug that caused the range arrow overlay to be included when saving a plot in tiff format.
  - Thanks to Eg Laf, fixed a bug that caused the multi-point tool to throw an exception when it was used for counting.
  - Thanks to 'Bio7', fixed minor bugs that caused compiler warnings.
  - Thanks to 'Wyn', worked around a bug in Fiji's Import>Movie (FFMPEG) command that caused the Duplicate and Reslice commands to sometimes throw exceptions.
  - Thanks to Wilhelm Burger, fixed bugs that caused some of the Image>Adjust>Threshold auto thresholding methods to not work with bilevel images.
  - Thanks to Diego Perez Dones and Olivier Burri, fixed a bug that caused the Process>Find Maxima command to not work as expected with float EDM images.
  - Thanks to 'Kavi', fixed a 1.53v regression that prevents measurement of angle selections.
- 1.53v 21 November 2022
  - Thanks to Andrey Kazak, added the String.setFontSize() macro function.
  - Thanks to Mario Faretta, added the Dialog.addImage(path) macro function.
  - Thanks to Wilhelm Burger, added the Roi.translate() macro function and Roi.translate() method (macro example, JavaScript example).
  - Thanks to Avinoam Kalma, fixed a bug that caused ImageJ to not correctly read TIFF images saved with the "deflate" compression option.
  - Thanks to Mary Brown, fixed a bug that caused the "Menu font size" setting in the Edit>Options>Appearance dialog to not be preserved in the preferences file.
  - Thanks to Hidenao Iwai, fixed a bug that caused the Image>Stacks>Reslice command to throw an exception if the selection extended beyond the image bounds.
  - Thanks to 'Alex' and Curtis Rueden, fixed a bug that caused ImageJ to freeze if "waitForUser" was entered into the "Interactive Interpreter" window.
  - Thanks to 'Olivier', fixed a bug that caused RGB DICOM files imported using Bio-Formats as hyperstacks to "loose" the metadata when converted to RGB.
  - Thanks to Wilhelm Burger, fixed a bug that caused the Roi.isLine() and Roi.isLineOrPoint() methods to return 'false' for angle selections.
  - Thanks to Curtis Rueden, fixed a bug that caused the File>Open Samples>Cache Sample Images command to not work on Fiji.
  - Thanks to Peter Zentis, fixed a 1.53k regression that caused the Image>Invert command to ignore selections when inverting 16-bit images. Note that the image may not be displayed correctly unless it uses the full pixel value range (0-65535) or a range has been set using the "Set" option of the Image>Adjust>Brightness/Contrast dialog.
- 1.53u 15 October 2022
  - Thanks to Giovanni Cardone, the Image>Transform>Bin command now supports z-binning of 4D hyperstacks.
  - Thanks to Dr. Njitram, the Analyze>Plot Profile command works with rotated rectangles.
  - The Edit>Selection>Line to Area command converts straight line selections to rotated rectangle selections.
  - Thanks to Herbie Gluender, improved recording of the Edit>Selection>Properties command and added a comment to the Edit>Options>Line Width dialog to make it clearer what the command does.
  - Thanks to Pau Carrillo-Barbera, the Selection Brush Tool is no longer disabled when activating a selection in an overlay by double clicking on it.
  - Thanks to 'John D.', made GenericDialog.resetCounters() public so it can be called by plugins using GenericDialog.addButton() (example).
  - Thanks to Dennis Chang, added the recordable Image.removeScale() macro function and the ImagePlus.removeScale() method.
  - Added the ImageProcessor.setColor(String) method.
  - Thanks to Tiago Ferreira, fixed a bug that caused toolbar contextual menus to ignore the Edit>Options>Appearance "GUI scale" setting.
  - Thanks to Jan Brocher, fixed a bug that caused the "Results" menu in a table to disappear if the table was renamed.
  - Thanks to Rene Ramekers, fixed a bug that caused the File>Import>TIFF Virtual Stack command to not correctly calibrate TIFF stacks that were not created by ImageJ.
  - Thanks to Andrey Kazak, fixed a bug that caused the Image>Overlay>From ROI Manager menu command to not transfer the ROI positions.
  - Thanks to Herbie Gluender, fixed a bug that caused the Edit>Selection>Straighten command to change the global line selection width.
  - Thanks to Nayana Gaur, fixed a bug that caused ROIs with x or y coordinates greater than 60,535 and less than 65,535 to be saved incorrectly.
  - Thanks to Christoph Gohike, fixed a bug that caused ImageJ to create TIFF files with invalid RowsPerStrip tags when the image height was greater than 65,535.
  - Thanks to Michael Schmid, fixed several bugs with Image>Stacks>Plot Z-axis Profile "Live" plots.
  - Thanks to Jerome Mutterer, fixed a bug that caused the "CP" window to not be updated when the Color Picker tool was used to pick new colors from the active image.
  - Thanks to Ko Sugawara, fixed a bug that caused the Opener.openAndAddToRecent() method to return 'false' when the file was opened successfully.
  - Thanks to Stein Rorvik, worked around a Java bug on Windows that caused the main menu bar sub-menus to not scale to larger than 17 points. Unfortunately, the main menu bar font size on Windows is still limited to 17 points regardless of the "GUI scale" setting.
  - Thanks to Stein Rorvik, fixed a bug that caused the Roi.Paste macro function to not work as expected.
  - Thanks to 'bobfRT1', fixed a scale bar width rounding error.
  - Thanks to 'rlimame', fixed a bug that caused the Edit>Selection>Rotate command to convert Rotated Rectangle selections to Polygon selections.
  - Thanks to Michael Schmid, fixed bugs that caused the Scale and Rotate commands in the ROI Manager to only work correctly when processing all the ROIs.
  - Thanks to Mark Hiner, fixed a 1.53t regression that caused the Image>Stacks>Z Project command to ignore the last slice when doing "Average" projection of 32-bit stacks.
  - Thanks to Jerome Mutterer, fixed a 1.53o regression that caused unexpected error messages when double clicking on a line in a table or in the ROI Manager when a custom action was not defined (example).
- 1.53t 24 August 2022
  - Thanks to Michael Schmid, the Analyze>Tools>Analyze Line Graph command is greatly enhanced:
    - Works on all image types.
    - Spatial calibration is read correctly.
    - Reads values for each x value in pixels.
    - Without calibration, the values are pixel coordinates, not pixel coordinates + 0.5.
    - Tries to follow the curves, even if curves cross each other.
    - Plots (and lists) different curves as different data sets.
    - Honors non-rectangular selections instead of deleting them.
    - Produces somewhat usable output even without a selection or any editing.
  - Thanks to Thomas Laurent, the String.format() macro function now accepts a variable number of numeric arguments.
  - Thanks to Stein Rorvik, the Image>Stacks>Tools>Reduce command produces a virtual stack if the source is a virtual stack created using File>Import>Image Sequence or File>Import>Stack from List.
  - Thanks to Nicolas De Francesco, the Image>Color>Invert LUTs command (used by the "Channels" tool) works with non-linear LUTs.
  - Thanks to Volko Straub, the Image>Stacks>Z Project command ignores NaNs when doing "Average" projection of 32-bit stacks.
  - Thanks to 'Danielle_Z', ImageJ now opens compressed BMP images.
  - Thanks to Philippe Carl, the ROI Manager's "Labels" checkbox is no longer enabled on Windows when clicking on "Show All" and ROIs are now automatically updated in the ROI Manager after being modified by holding down the shift or alt key.
  - Thanks to Dennis Chang and Michael Schmid, added the is("FFT") macro function.
  - Thanks to 'Leonicolash' and Volker Backer, fixed a bug that caused the Table.sort() macro function to fail after using saveAs("Results", path).
  - Thanks to Daniel Leswasserman, fixed a bug that sometimes caused the "Dir:" field of the File>Import>Image Sequence dialog to be too wide.
  - Thanks to Michael Schmid, fixed a bug that caused the Roi.getImageID() method to throw a NullPointerException.
  - Fixed a bug that caused sample images to not open on Windows 10 with Java 1.8.0_172.
  - Thanks to Christophe Leterrier, fixed a bug that caused 32-bit to 16-bit conversions of multichannel images to not work as expected.
  - Thanks to Stein Rorvik, fixed a bug that caused the File>Import>Stack From List command to not preserve EXIF data.
  - Thanks to Stein Rorvik, fixed several bugs related to scaling of stacks with overlays.
  - Thanks to Fred Damen, fixed a 1.52u regression that caused getStatistics().mean values of single point selections to be incorrect.
  - Thanks to Mark Hiner, fixed a 1.53h regression that sometimes caused line selection bounds to be too large.
- 1.53s 19 May 2022
  - Thanks to Stein Rorvik, added the Edit>Selection>Translate command, the ROI Manager Scale and Rotate commands, and the RoiManager.scale(), RoiManager.rotate(), RoiManager.translate(), RoiManager.selectByName() and RoiManager.getIndex() macro functions.
  - Thanks to Fred Damen, added the Image>HyperStacks>Make Subset command, an alias for the Image>Stacks>Tools>Make Substack command.
  - Thanks to Fred Damen, GenericDialog sliders are mouse wheel controllable and TextFields on Linux are not as tall.
  - Thanks to Wilhelm Burger, the ClassChecker no longer deletes files and only runs when the Compile and Run command is used.
  - Thanks to Stein Rorvik, added the Dialog.addImageChoice(label,default) macro function.
  - Thanks to Michael Schmid, fixed several plot legand issues (example).
  - Thanks to Laurent Thomas, units of imported tiffs are converted to microns if the pixel width is <= 0.001 cm (previously it was <= 0.0001 cm).
  - Thanks to Lance Davidson, ImageJ now correctly opens CSV files that start with a 0xFEFF character (zero width no-break space).
  - Thanks to Tiago Ferreira, fixed a bug that caused commands and keyboard shortcuts installed by StartupMacros.txt in the Plugins>Macros menu to be deleted when a macro tool was added to the toolbar.
  - Thanks to 'DentedDuck', fixed a bug that caused the Image>Transform>Rotate command to increase the image width or height by one pixel if the angle was 0 or 90 degrees and "Enlage image" was checked.
  - Thanks to Norbert Vischer, fixed a bug that caused an exception to occur when duplicating a stack and the "Range:" field was empty.
  - Thanks to Fred Damen, fixed a bug that caused the Image>Stacks>Tools>Make Substack command to not work correctly with stacks with nSlices=1 and nFrames>1.
  - Thanks to Michael Schmid, fixed a bug that caused point selection bounds to be too wide and tall by 1 pixel (example).
  - Thanks to Stein Rorvik, fixed a bug that caused the toString(number,decimalPlaces) macro function to not work as expected.
  - Thanks to Ellie Cho and 'Research_Associate', fixed a 1.53h regression that caused ROIs to not be drawn on images displayed using setBatchMode("show").
- 1.53r 21 April 2022
  - Added a "Help" button to the Channels dialog.
  - The Image>Type>RGB Stack command converts multi-channel composite images into RGB stacks (example).
  - Set the "ClipWhenSumming" image property "true" and the Image>Stacks>Z Project command will clip at 255 when summing RGB stacks (example).
  - Added the Image>Color>Invert LUTs command.
  - Thanks to Bram van den Broek, restored the "Don't reset range" option to the Threshold dialog.
  - Thanks to Alan Brooks, the "Fill with background color" option of the Image>Transform>Rotate command is now available with 16 and 32 bit images.
  - Thanks to Philippe Carl, press shift+alt+n to create a text window with "Run" and "Install" buttons, and a language drop down menu.
  - Thanks to Stein Rorvik, added the ImageJ.getStatusBarText() method.
  - Thanks to Wilhelm Burger, added versions of the ImageProcessor getColumn() and putColumn() methods that accept float[] arguments.
  - Thanks to Alan Brooks, added the ImageProcessor.setBackgroundColor(Color) method.
  - Thanks to Stein Rorvik, fixed a bug that caused values to not be displayed correctly in Image>Math> dialogs if "Decimal places" in the Analyze>Set Measurement was set to 9.
  - Thanks to Abbas Haghshenas and Nicolas De Francesco, fixed a 1.54p regression that caused the "OK" button in dialog boxes to be left-aligned on Windows.
- 1.53q 30 March 2022
  - Thanks to Kevin Terretaz, added the More>Invert LUTs command to the "Channels" dialog.
  - Thanks to Olivier Burri, ImageJ calculates the perimeter of a "polygon" ROI the same way as a "traced" ROI if it appears to have been created by edge tracing.
  - Thanks to 'muniak', the Process>Enhance Contrast dialog displays values using 2 decimal places.
  - Thanks to Norbert Vischer, replaced, in the ImageJ source, deprecated new Integer(intOrString) and new Double(intOrString) constructors with Integer.valueOf(intOrString) and Double.valueOf(intOrString).
  - Thanks to 'TMC', added the showRow() and showCell() methods to the TextPanel class (example).
  - Thanks to Fred Damen, fixed a bug that caused bin starts in tables created by clicking on "List" in histogram windows to be rounded to integers.
  - Thanks to Herbie Gluender, fixed a bug that caused Undo of rotated images with overlays to not work as expected.
  - Thanks to Michael Schmid, fixed a regression that caused some PNG images to open as stacks.
  - Thanks to Christophe Leterrier, fixed a 1.53p regression that caused the run("Table...",options) macro function to fail.
- 1.53p 4 March 2022
  - Thanks to Stein Rorvik, Analyze>Set Scale, when there is a rectangular selection, sets "Distance in pixels" to the largest of the selections' width and height.
  - Thanks to Ron DeSpain, drag and drop sets the default path to the source folder. The default path is listed in the Plugins>Utilities>ImageJ Properties output as "Current dir".
  - Thanks to Alan Brooks, the "B&C" dialog now uses scientific notation for small (less than 0.001) values.
  - Thanks to Michael Schmid, the macro line number is added to the "Exception" window when a macro causes an exception (example).
  - Thanks to James Manton, increased MAX_CHANNELS (maximum number of image channels in composite mode) from 7 to 8.
  - Thanks to 'JWinchester', added the recordable File.openSequence(path,options) macro function.
  - Added the Roi.setUnscalableStrokeWidth() macro function.
  - Thanks to Carl Priddy, added the Table.columnExists() macro function.
  - Thanks to Michael Schmid, added the ResultsTable.setValues() method.
  - Thanks to Peter Lunding Jensen, fixed bugs that caused the File>New>Hyperstack command to incorrectly label RGB hyperstacks.
  - Thanks to 'ALisboa', fixed a bug that caused the File>Import>Image Sequence command to throw an exception if the directory path was invalid.
  - Fixed bugs that caused saved sub-pixel resolution rounded rectangle and oval ROIs to not be reopened correctly (example).
  - Thanks to Michael Schmid, fixed a bug that caused "Synchronize Windows" to throw a NullPointerException when using the "Close All" command.
  - Thanks to Michael Schmid, fixed a bug that caused zero-length lines and isolated points in lines to not be shown in plots.
  - Thanks to Michael Mell, fixed a bug that caused ROIs in an overlay on a single channel 3D image to not be displayed correctly if the position was set using roi.setPosition(c,z,t).
  - Thanks to Kenta Shimamoto and Christoph Gohlke, fixed a bug that caused tiff images larger than 2 GB to open upside down.
  - Thanks to Laurent Thomas, fixed a bug that caused a double-click on the rectangle ROI icon in the toolbar to display both the "ROI Defaults" dialog and the right-click menu.
  - Thanks to Laurent Thomas, fixed a bug that caused the IJ.openUrlAsString() method to not correctly interpret special characters
  - Fixed a 1.53j regression that caused activation of ROIs in an overlay by double clicking on a row in an "Overlay Elements of..." table to not work as expected.
  - Thanks to 'hwada', fixed a 1.53i regression that caused an extra click to be needed to activate and move an ROI in an overlay with labels.
  - Thanks to Gabriel Landini, fixed a 1.53g regression that caused the File>New>Image command to not work as expected when creating stacks and "Fill with" was "white" or "ramp".
- 1.53o 11 January 2022
  - Thanks to Christophe Leterrier and Peter Haub, added "Composite Sum", "Composite Max", "Composite Min" and "Composite Invert" as choices in the Image>Color>Channels Tool dialog. "Composite Min" and "Composite Invert" are useful for displaying composite images with inverted LUTs (example image, example macro).
  - Thanks to Jerome Mutterer, added support for Results Table and ROI Manager customizable actions (example).
  - Thanks to Fred Damen, the Image>Adjust>Window/Level and Analyze>Histogram windows use scientific notation as needed to display small values.
  - Thanks to Stein Rorvik, Edit>Selection>Specify respects the image origin when "Scaled units" is checked in the dialog.
  - Thanks to Stein Rorvik, ImageJ looks for the preferences file ("IJ_Prefs.txt") in the current directory, the ImageJ directory and the username/.imagej directory (username/Preferences on MacOS).
  - Thanks to Kimberly Meechan and Jan Eglinger, ImageJ restores the original look and feel after temporarily using the system look and feel with Windows dialogs.
  - Thanks to Stein Rorvik, the count field in the Process>Binary>Options dialog is saved in the preferences file.
  - Thanks to Stein Rorvik, added a "Create new stack" checkbox to the Process>Binary>Make Binary and Convert to Mask dialog boxes.
  - Thanks to Stein Rorvik, added the getDir("preferences") macro function.
  - Thanks to Fred Damen, added the ImagePlus.setDefaultDisplayRange() method (JavaScript example).
  - Thanks to Michael Schmid, fixed a bug that caused histograms of thresholded 16-bit and 32-bit images to be displayed incorrectly if the "Limit to threshold" measurement option was enabled.
  - Thanks to Stein Rorvik, fixed a bug that caused the loss of density calibration with virtual stacks.
  - Thanks to Kees Straatman, fixed a bug that caused the IJ.openImage() method to not work with images opened using Bio-Formats. As a result, the Open Next, Import>Image Sequence and Process>Batch> commands now work with images opened using Bio-Formats.
  - Thanks to Michael Cammer, fixed a bug that caused the Table.deleteRows() macro function to not work as expected with tables not named "Results".
  - Thanks to 'yogurt', fixed a bug that caused unexpected popup menus when using the selection brush tool.
  - Thanks to Christian Tischer, fixed a bug that caused some dragged and dropped "https://" URLs to not open.
  - Thanks to Hidenao Iwia, fixed a bug that caused GRAY12_UNSIGNED images to not open correctly as FileInfoVirtual stacks.
  - Thanks to Stein Rorvik, fixed a bug that caused the showMessageWithCancel() macro function to fail when run from the command line.
  - Thanks to Fred Damen, fixed a bug that caused slice labels of one slice stacks to not be displayed in the Image>Show Info window.
  - Thanks to 'IztokD', fixed a regression that caused some PNG images to open as stacks.
  - Thanks to 'CellKai', fixed a 1.53d regression that caused the RoiScaler.scale() method to sometimes not work as expected.
  - Thanks to 'odinsbane', fixed a 1.53m regression that caused exceptions to sometimes not be shown.
  - Thanks to 'chin', fixed a 1.53i regression that caused the roiManager("Show All") macro function to not work in batch mode.
- 1.53n 7 November 2021
  - Thanks to Stein Rorvik, added a "Raw values" checkbox to the Image>Adjust>Threshold dialog
  - Thanks to 'Sethur', added a DICOM preference allowing fixed scaling across slices via RescaleSlope and Intercept.
  - Thanks to Norbert Vischer, added a "Cancel" button to the waitForUser() dialog.
  - Thanks to Christopher Schmied, histogram plot outlines are drawn in dark blue to help distinguish the outline from the plot.
  - Thanks to Michael Schmid, restored the ability to select the starting and ending frame in the File>Import>AVI dialog.
  - Thanks to Joseph Chen, removed the "Don't reset range" checkbox from the Image>Adjust>Threshold dialog.
  - Thanks to Jerome Mutterer, added the Math.constrain(n,min,max) and Math.map(n,low1,high1,low2,high2) macro functions (example tool).
  - Thanks to Peter Bankhead, the ImagePlus(String,Image) constructor now supports multi-band BufferedImages.
  - Thanks to Michael Schmid, fixed bugs and improved the documentation of the Colors class.
  - Thanks to Michael Cammer, fixed a bug that caused the border color of composite images to change to the color of the channel being displayed.
  - Thanks to Michael Schmid, fixed a bug that caused macros to fail due to a race condition when converting stacks to hyperstacks.
  - Thanks to Stanislav Chizhik, fixed a bug that sometimes caused File>Import>Image Sequence to open images as the wrong type when using a filter.
  - Thanks to Romain Guiet, fixed a bug that caused the Image>Scale command to not work correctly with hyperstacks.
  - Thanks to Stein Rorvik, fixed a 1.53m regression that caused macros importing an image sequence to sometimes not open all images in a folder.
  - Thanks to Michael Schmid, fixed a 1.53m regression that caused image stacks to open slowly on Windows in batch mode.
  - Thanks to Stein Rorvik and Michael Schmid, fixed a 1.53m regression that caused macro statements like run("Macro...", "code=[...] stack") to fail.
  - Thanks to Herbie Gluender, fixed a 1.53m regression that caused the Image>Adjust>Brightness/Contrast dialog to not work as expected with 32-bit images containing NaNs.
- 1.53m 28 September 2021
  - Thanks to Zoltan Kis, the File>Import>Image Sequence dialog now displays the number of images that will be opened.
  - Thanks to Norbert Vischer, exceptions on the Event Dispatch Thread are now reported in the Log window.
  - Thanks to Remi Berthoz, the Analyze>Tools>Scale Bar command now has the ability to draw both vertical and/or horizontal scale bars.
  - Thanks to Stein Rorvik, added a "Colors..." command to the Color Picker dropdown menu and made most of the commands in that menu recordable.
  - Thanks to Esteban Fernandez, added a "Fill color:" field to the Image>Stacks>Images to Stack dialog box.
  - Thanks to Barry DeZonia, the findMinAndMax() methods in the Short/Int/Float processors are now faster (Plugins>Utilities>Benchmark runs 3% faster).
  - Thanks to Michael Schmid, added support for drag and drop to JFileChooser dialogs.
  - Thanks to Nicolas De Francesco, updated the Edit>Selection>Fit Rectangle command so that it produces more predictable results.
  - Thanks to Philippe Carl, File>Import>Image Sequence no longer limits the number of files that can be imported to 40 when "Open as separate images" is enabled.
  - Thanks to Fred Damen, improved recording of the ROI Manager's "Open..." and "Save..." commands, and made the open(path) and save(path) methods public.
  - Thanks to Michael Schmid, the File>Import>Image Sequence command no longer creates excessive image IDs.
  - Thanks to Michael Schmid, added the FolderOpener.openProcessor() method, used by the FileInfoVirtualStack class.
  - Thanks to Norbert Vischer, fixed a bug that caused the Process>Filters>Convolve command to sometimes not be correctly recorded.
  - Thanks to Fred Damen, fixed a bug that caused a null pointer exception when the File>Import>Results dialog was canceled.
  - Thanks to Ved Sharma, fixed a bug that caused an invalid macro error when assigning a string value returned by a user defined function to an array element.
  - Thanks to Fred Damen, fixed a bug that caused the RoiManager.save() method to always return true.
  - Thanks to Ved Sharma, fixed a bug that caused the ROI Manager's "OR (Combine)" command to not work as expected if the first ROI was composite.
  - Thanks to Philippe Carl, fixed a bug that caused the File>Import>Image Sequence command to not work as expected when importing stacks and the "Open as separate images" option was enabled.
  - Thanks to Philippe Carl, fixed a bug that caused the Image>Overlay>Flatten command to not work with ROIs, or the ROI Manager in "Show All" mode, on composite images.
  - Thanks to Rodrigo Goncalves, fixed a bug that caused the File>Save As>Image Sequence command to display multiple error messages when the specified directory did not exist.
  - Thanks to Herbie Gluender, fixed a bug the caused the exit(msg) macro function to fail when the argument was a number or a call to a user-defined function.
  - Thanks to Jerome Mutterer, fixed a typo in OpenDialog.java that caused the GitHub version of ImageJ to fail to compile.
  - Thanks to Daniel Nebdal, fixed a bug that caused the Plugins>Macros>Edit command to not open ".py" and ".bsh" files.
  - Thanks to Remi Berthoz, fixed a bug that caused the Image>Type>RGB Stack command to not work correctly with RGB stacks that had multiple slices and multiple frames.
  - Thanks to Stein Rorvik, fixed a bug that caused the Property.setSliceLabel() macro function to sometimes not work as expected with single images.
  - Thanks to Ved Sharma, fixed a regression that caused the roiManager("Set Fill Color",color) macro function to fail when used with a text selection.
  - Thanks to 'natalia', fixed a 1.52p regression that caused FITS images to open flipped vertically.
  - Thanks to "J Xiong", fixed a regression that caused the particle analyzer to not work the same as it did in ImageJ 1.52 with binary images that were not thresholded and the "Black background" options was not set.
  - Thanks to Hyung-song Nam, fixed a 1.53f regression that caused menus to unexpectedly popup when using the "hand" tool to scroll through images.
- 1.53k 6 July 2021
  - Thanks Mike Nelson, 16-bit images are inverted using the full pixel value range (0-65535) or, if set, using the "Unsigned 16-bit range" in the "Set" option of the Image>Adjust>Brightness/Contrast dialog.
  - Thanks to Alan Brooks, added the macOS-specific MacAdapter9 plugin, which, on Java 9 or later, supports drag and drop on the ImageJ.app and the "About ImageJ" command.
  - Thanks to Romain Guiet, the ROI Manager's "Associate 'Show All' ROIs with slices" option is now enabled by default.
  - Thanks to Gilles Carpentier, the particle analyzer now assumes the threshold is 255 unless "Black background" is not set, the image does not have an inverted LUT and fewer than half the pixels have a value of zero, in which case the threshold is set to zero.
  - Thanks to 'pdd2110', added the Property.setSliceLabel(label) macro function.
  - Thanks to 'John D.', added the GenericDialog.addButton() method (example1, example2).
  - Thanks to 'Oodegard', fixed a bug that caused the "Auto-next slice" option of the point tool to not work as expected with hyperstacks.
  - Thanks to Michael Schmid, fixed a bug that caused NaN values in tables read from a file to be strings instead of numbers.
  - Thanks to Gabriel Landini and Michael Schmid, fixed a bug that caused the "Top Hat" filter to fail when applying it to a stack one slice at a time.
  - Thanks to Laurent Thomas, fixed a bug that caused the Image>Stacks>Set Slice command to not work as expected with hyperstacks.
  - Thanks to Laurent Thomas, fixed a bug that caused hyperstacks to be displayed incorrectly if the Z or T sliders where moved quickly and the images were slow to load.
  - Thanks to Michael Schmid, fixed a bug that sometimes caused the WindowManager.getIDList() method to throw an exception.
- 1.53j 13 May 2021
  - Thanks to 'VolkerH', the table created by Image>Overlay>List Elements now displays row numbers and arrow selection 'X' and 'Y' values are the coordinates of the arrow tip.
  - Thanks to Stein Rorvik, added the Color.setForegroundValue() and Color.setBackgroundValue() macro functions and the Toolbar.setForegroundValue(), Toolbar.setBackgroundValue(), ImageProcessor.setGlobalForegroundColor() and ImageProcessor.setGlobalBackgroundColor() methods.
  - Thanks to Norbert Vischer, added the IJ.checksum() macro function, which returns the MD5 (or SHA-256) checksum from a string or file (example).
  - Thanks to Michael Schmid, added the Fit.doWeightedFit(equation,x,y,weights[,initialGuesses]) macro function.
  - Thanks to Norbert Vischer, added the Plot.removeNaNs macro function.
  - Thanks to Laurent Thomas, added support for scrollbars in GenericDialog TextAreas.
  - Thanks to Fred Damen, added the Zoom.in(imp), Zoom.out(imp), Zoom.unzoom(imp) and Zoom.maximize(imp) methods.
  - Thanks to John Dunsmuir, added the PointRoi.addPoint(x,y,position) method.
  - Thanks to Fred Damen, fixed bugs that caused programmatic image window zooming to not work reliably (example).
  - Thanks to Michael Schmid, fixed a bug with HTMLDialogs that caused the initial scroll position to be at the end when displaying more text than what fits in the window.
  - Thanks to 'Sethur', fixed bugs that caused DICOM files using newer VRs (from 2014 and later), such as UC and UR, to fail.
  - Thanks to Bruno Vellutini, fixed a bug that caused images rotated interactively using the "Enlarge image" and "Preview" options to not have the grid lines removed after the rotation.
  - Thanks to Jerome Mutterer, fixed a bug that caused the Prefs.savePreferences() method to throw a null pointer exception if the "ImageJ" window was not open.
  - Thanks to Stein Rorvik, fixed a bug that caused the slice label to be incorrect after importing an image sequence and "Start" was greater than 1 and "Count" was 1.
  - Thanks to Stein Rorvik, fixed a bug that caused the Images to Stack command to ignore slice labels when the "Use titles as labels" option was not enabled.
  - Thanks to 'ghf', worked around a Fiji bug that caused the File>Import>Image Sequence command to fail if the folder contained a ".h5" file.
  - Thanks to Jerome Mutterer, fixed bugs that caused the Stack.setDisplayMode(), Stack.setSlice(), Stack.setFrame() and Stack.setPosition() macro functions to not work as expected in batch mode, and the ImagePlus.setDisplayMode(), ImagePlus.setZ(), ImagePlus.setSetT() and ImagePlus.setPosition() methods to not work as expected when the image was not displayed.
  - Thanks to Nicolas Montes, fixed a bug that caused the particle analyzer to throw an exception when both the "Composite ROIs" and "Show: Outlines" options where used.
  - Thanks to Christian Kremser, fixed a 1.53i regression that caused macro statements like "n=Dialog.getNumber()+1" to generate and error.
  - Thanks to Christian Tischer, fixed a regression that caused the ROI Manager to not set the hyperstack position of ROIs without a c,z,t position.
- 1.53i 24 March 2021
  - Thanks to Jerome Mutterer, added the "Apply LUTs" checkbox to the command finder (Plugins>Utilities>Find Commands).
  - Thanks to Norbert Vischer, the current line number, or selection range, in Editor, Table or Log windows, is displayed in the status bar. The total number of lines is displayed after Select All.
  - Thanks to Norbert Vischer, ImageJ now corrects the orientation of phone camera photos. Does not work on Fiji because it is missing Exif_Reader.jar.
  - Improved the Plugins>Utilities>Benchmark command. It now suppresses subordinate status bar messages and displays subordinate progress bars as dots.
  - Thanks to Peter Haub, the particle analyzer displays "ParticleAnalyzer: threshold has not set; assumed to be min-max" in the Log window if it was not called from a macro and a threshold was not set.
  - Thanks to Laurent Thomas, File>Save As>Image Sequence, when "Use slice labels as names" is enabled, now supports file names as long as 111 characters, excluding the extension.
  - Thanks to Michael Schmid, ImageJ displays "horizontal" in the image info line of column average plots and "vertical" with row average plots.
  - Thanks to Jerome Mutterer, added the showStatus(message,options) macro function and the IJ.showStatus(message,options) method (example).
  - Added the Overlay.update(index) macro function.
  - Added the ImagePlus.setBorderColor() method, used by Image>Color>Split Channels to colorize image borders.
  - Thanks to Laurent Thomas, added the ImageStack.getShortStackLabel(n,max), Zoom.toSelection(imp), Zoom.set(imp,mag) and Zoom.set(imp,mag,x,y) methods.
  - Thanks to Herbie Gluender, fixed a bug that caused the status bar to stop being updated after activating an overlay selection.
  - Thanks to Fred Damen, fixed a bug with one slice stacks that caused the slice label to not be displayed on the image info line or in the Image>Show Info window.
  - Thanks to Antoneta, fixed a bug with the Flatten command that caused multi-point selections on stacks to lose counter information.
  - Thanks to Herbie Gluender, fixed a bug that caused unexpected overlay entries after running the particle analyzer with the "Add to manager" option in a batch mode macro.
  - Thanks to Norbert Vischer, fixed a bug that caused string functions added in ImageJ 1.52t (s.contains(), s.endsWith(), s.indexOf(), s.lastIndexOf(), s.lengths.startsWith()) to return a string instead of a number when used in an assignment statement.
  - Thanks to Robert Haase, fixed a bug with the roiManager("select",index) macro function that caused it to sometimes restore ROIs at the wrong position.
  - Thanks to Laurent Thomas, fixed a bug that caused the ContrastEnhancer.stretchHistogram() methoid to not work as expected with stacks.
  - Thanks to Michael Schmid, fixed a bug that caused WaitForUserDialogs to not be scaled on high-resolution screens.
  - Thanks to Stein Rorvik, fixed a macro interpreter bug that caused if statements using string functions to sometimes fail (e.g., "if (getTitle.length>10) ...").
  - Thanks to Norbert Vischer, fixed a bug that caused the first column of tables copied to the clipboard to be missing if the table did not have row numbers and the "Copy row numbers" option in Edit>Options>Input/Output was not enabled.
  - Thanks to Shayna Sosnowik, fixed a 1.53g regression that caused the "Properties..." command in the ROI Manager to not work as expected when changing the stroke color.
  - Thanks to Stein Rorvik, fixed a 1.53i regression that caused the str.trim() macro function to sometimes fail.
- 1.53h 04 February 2021
  - Thanks to Laura Shankman, added the Image>Overlay>Measure Overlay command.
  - Thanks to Jerome Mutterer, added the Help>Examples>Macro>Colors of 2021 example, which runs more smoothly with ImageJ 1.53h20 or later, where ROIs are not drawn in batch mode.
  - Added the Help>Examples>JavaScript>Dialog Demo and Help>Examples>Macro>Save All Images examples.
  - Thanks to Christophe Leterrier, Image>Type>RGB Color converts hyperstacks of HSB stacks to stacks of RGB images.
  - Thanks to Alex Zwetsloot, line selections are no longer activated by double clicks with the segmented and freehand line tools.
  - Thanks to Norbert Vischer, added the Color.set(string), Color.set(number), Color.foreground, Color.background, Color.setForeground(r,g,b), Color.setBackground(r,b,g), Color.setForeground(string),Color.setBackground(string), Color.toString(r,g,b), Color.toArray(color), Color.setLut(reds, greens, blues) and Color.getLut(reds, greens, blues) macro functions.
  - Thanks to Raniere Silva, added the Overlay.xor() macro function.
  - Added the Overlay.fill() macro function.
  - Thanks to Stein Rorvik, added the File.isFile() macro function.
  - Thanks to Raniere Silva, added the getDir("cwd") ("current working directory") macro function.
  - Added the Roi.getFloatBounds() and Image.title macro functions.
  - Thanks to Alan Brooks, added the Toolbar.setIcon() method (example1, example2, example3, example4. example5).
  - Added the Overlay.xor() and Roi.xor() methods.
  - Thanks to Robert Kasumba, added the OverlayBrushTool.setWidth() method.
  - Thanks to Laurent Thomas, added the getColumn(String), getColumnAsStrings(String) and getActiveTable() methods to the ResultsTable class.
  - Thanks to Dyuks, fixed a bug that caused the TIFF reader to sometimes throw an exception when opening LZW-compressed 16-bit TIFFs.
  - Thanks to Michael Schmid, fixed a bug that could cause the JpegWriter to throw a NullPointerException if JAI ImageIO was installed.
  - Thanks to Michael Cammer, fixed a bug that caused the selectWindow(title) macro function to not work with minimized windows on Windows.
  - Fixed a bug that caused all tools to stop working after attempting to use the polygon, segmented line or angle tool on ImageJ.JS.
  - Thanks to Gabriel Landini, fixed a bug that caused the B&C tool to sometimes perform an Undo operation on RGB images.
  - Thanks to Raniere Silva and Jan Eglinger, fixed a bug that caused an exception when saving the table created by Image>Overlay>List Elements in .csv format.
  - Thanks to Raniere Silva, fixed bugs that caused the open(path) and roiManager(“Open”,path) macro functions, in macros run from the command line, to not work as expected when ‘path’ was just a file name.
  - Thanks to Michael Schmid, fixed bugs that caused the roi.getBounds() method and getSelectionBounds() macro function to not work as expected with polyline, point and straight line selections on images zoomed more than 150%.
  - Thanks to Christian Tischer, fixed a bug that caused the Image>Overlay>List Elements command to incorrectly report positions of time series overlays.
  - Thanks to Laurent Thomas, fixed a bug that sometimes caused GenericDialogs to not open URLs bound to "Help" buttons.
  - Thanks to Jan Eglinger, fixed a bug that caused the selection brush tool to behave inconsistantly when the brush width was odd and the image was hightly magnified.
  - Thanks to Christian Tischer, fixed a bug that caused overlay calibration bars to be displayed incorrectly on images zoomed less than 100%.
  - Thanks to Norbert Vischer, fixed a bug that caused the selectWindow("Results") macro function to sometimes not work as expected.
  - Fixed a 1.53h17 regression, caused by building ij.jar for Java 8, that prevented Fiji from launching.
  - Thanks to Dominik Schienstock, fixed a 1.52q regression that caused some filters to throw exceptions in headless mode.
- 1.53g 4 December 2020
  - Thanks to Jerome Mutterer, added a "Run" button to Editor windows when the file name ends with ".ijm", ".js", ".bsh" or ".py".
  - The "Overlay Masks" option in the particle anayzer now displays masks in colors taken from the Glasbey LUT.
  - Thanks to J Xiong, added "Overlay" and "Composite ROIs" checkboxes to the particle analyzer (example).
  - Thanks to Michael Doube, added an IntProcessor class that provides support for signed 32-bit int images (example).
  - Thanks to Christian Tischer, the Recorder supports Python.
  - Thanks to 'Eljonco', the "ExpandableArrays" macro option is now enabled by default. Thanks to Peter Haub, added the String.pad(n,length) macro function.
  - Thanks to Wilhelm Burger, added the addEnumChoice() and getNextEnumChoice() methods to the GenericDialog class (example).
  - Thanks to 'davidC', added the ij.gui.HistogramPlot class.
  - Thanks to Stein Rorvik, added the ImageCanvas.setLongClickDelay() and Toolbar.setLongClickDelay() methods.
  - Thanks to 'Dr. Njitram', added the recordable SubstackMaker.run(imp,rangeOrList) method.
  - Thanks to Albert Cardona, modified the ImageJ.keyPressed() method so that, if the KeyEvent is consumed, it returns immediately.
  - Thanks to Wei Ouyang, replaced the "Duplicate..." command in the default image contextual menu with "Duplicate Image", which ignores any selection and duplicates the entire image.
  - Thanks to Stein Rorvik, fixed a bug that sometimes caused images to be incorrectly added to the Window menu.
  - Thanks to Stein Rorvik, fixed a bug that caused the File>Show Folder>Image command to not work with stacks opened using File>Import>Image Sequence.
  - Thanks to 'muniak' and 'mountain_man', fixed a bug that caused the Scaler.resize() method to return an image with a calibration of Inf x Inf.
  - Thanks to Stein Rorvik, fixed a bug that caused a list of 12 'w' letters to appear after the Group entry in the ROI Properties dialog when it was called from a macro.
  - Thanks to 'davidC', fixed a bug that caused batch mode macros that created hundreds of histograms to fail.
  - Thanks to 'chrk139', fixed a bug that caused the drawOval() and fillOval() macro functions to not work for images larger than 2^29 pixels.
  - Thanks to Laurent Thomas, fixed a bug where changing the group attribute from a group>0 to 0 in the ROI Manager>Properties dialog did not work as expected.
  - Thanks to Gilles Vanwalleghem, fixed a bug that caused the run(“Reduce Dimensionality…”) macro function to throw a null pointer exception in Fiji headless mode.
  - Thanks to Laurent Thomas and Hollandi Reka, fixed a bug that caused the ROI group of saved composite selections to not be restored.
  - Thanks to Martin Hohne, fixed a bug that caused the getValue("X") and getValue("Y") macro functions to not work as expected with line selections.
  - Thanks to J Xiong, fixed a v1.50 regression that caused the particle analyzer to not work as expected when when using the “Exclude on edges” option and a composite selection.
  - Thanks to Fred Damen, fixed a 1.53c regression that caused the GenericDialog.getFont() method to sometimes return null.
  - Fixed a regression that caused the particle analyzer to sometimes fail on MacOS.
- 1.53f 25 October 2020
  - Thanks to Wei Ouyang, tool bar and image popup menus are triggered by long presses in addition to right clicks, needed because right clicks are not normally possible when ImageJ.JS is running on Android and iOS devices.
  - Thanks to Wei Ouyang, added a popup menu to the magnifying glass tool icon.
  - Added a popup menu triggered on a right click or long press inside a selection.
  - Updated the built in toolbar "Dev" menu.
  - Thanks to Michael Schmid, the text in a text selection can be edited in the Edit>Selection>Properties dialog.
  - Thanks to Stein Rorvik, the File>Import>Image Sequence dialog is used when drag and dropping a folder on the "ImageJ" window.
  - Thanks to Michael Schmid and Thomas Fischer, Undo works with overlays when translating and rotating images, and the "Overlay only" checkbox is only shown in the Translate dialog when there is an overlay.
  - Thanks to Robert Haase, added the Edit>Options>Fresh Start command, which closes all images, empties the ROI Manager, clears the Results table and enables the "Black background" option.
  - Thanks to Conner Phillips and Stein Rorvik, the Reslice command is faster on Windows when re-slicing from "Left" or "Right" and it uses an ordinary progress bar when run from a macro.
  - Thanks to Stein Rorvik, added an "Open as separate images" checkbox to the File>Import>Image Sequence dialog.
  - Thanks to Stein Rorvik, added "Foreground..." and "Background..." entries to the color picker tool popup menu.
  - Thanks to 'MIKEIII' and Dmitry Fedorov, added the Image.width, Image.height, Image.copy and Image.paste(x,y) macro functions (example).
  - Thanks to Stein Rorvik, added the Array.filter(arr,str), Math.toRadians(degrees) and Math.toDegrees(radians) functions.
  - Thanks to Nima Hojat, added the ResultsTable.addRow() method. For an example, run Help>Examples>JavaScript>Sine/Cosine Table.
  - Thanks to Philippe Carl, fixed a bug that caused the RoiManager.getSelectedIndexes() method to sometimes not work as expected.
  - Thanks to Christian Tischer, fixed a bug that slowed saving of virtual stacks in TIFF format.
  - Thanks to Thomas Fischer, fixed a bug that caused the dynamic "Value" and "Count" values in HIstogram windows to sometimes not be displayed correctly.
  - Thanks to Gaurav Joshi, fixed a bug that caused the Ctrl+F (Edit>Fill) keyboard shortcut on Windows, when used on a stack, to not display the "Proces Stack?" dialog.
  - Thanks to 'Quiroz-1', fixed a 1.53e regression that caused the imageCaculator() macro function do somethimes not work as expected.
  - Thanks to Pradeep Rajasekhar and Jan Eglinger, fixed a 1.52 regression that caused the Analyze Skeleton plugin to output incorrect Results tables.
  - Thanks to 'tongtao', fixed a regression that caused the Edit>Copy to Image Info command in the text editor to fail.
  - Thanks to Stein Rorvik, fixed a 1.53c regression in the AVI Reader that caused it to throw a null pointer exception.
  - Thanks to Eric Perlman, fixed a 1.52 regresion that caused the IJ.getImage() method to sometimes display model error dialogs.
- 1.53e 16 September 2020
  - Thanks to Michael Schmid, the color picker tool has a new icon and a right click drop down menu.
  - The "Black background" option is no longer saved in the preferences file. Add setOption("BlackBackground",true) to Edit>Options>Startup to have it set 'true' on startup.
  - Thanks to Kees Straatman, improved recording of the Edit>Selection>Add to Manager command.
  - Thanks to Michael Ellis, added a module-info.java file, used by the Java Module System, to the ImageJ source.
  - Thanks to 'mkhapp', added the RoiManager.selected macro function, which returns the number of selected ROIs in the ROI Manager (example).
  - Thanks to Fred Damen, added the ImagePlus.copyToSystem() method.
  - Thanks to Philippe Carl, fixed a bug that allowed multiple copies of the Color Picker to be opened.
  - Thanks to 'Ben', fixed a bug that caused the Table.get() macro function to return strings instead of numbers.
  - Thanks to Fred Damen and Michael Schmid, fixed a bug that caused the run("Copy to System") macro function to sometimes copy the wrong image to the system clipboard.
  - Thanks to Fred Damen, fixed a bug that caused unreliable zooming of images with selections when using the arrow keys while holding the shift or control key down.
  - Thanks to Fred Damen, fixed a bug that caused the img3=ImageCalculator.run(img1,img2,operation) method to return null if the 'operation' string did not contain 'create' or '32-bit'.
  - Thanks to Martin Hohne, fixed a 1.53c regression that caused the Counter popup menu in the Point Tool options Dialog to not work as expected after switching to a different image.
  - Thanks to Robert Svoboda, fixed a 1.53d regression on Windows that could cause the getDirectory() macro function to throw an exception or crash ImageJ.
  - Thanks to Stein Rorvik, fixed a 1.53d regression that could cause the run("Image Sequence...",options) macro function to fail.
- 1.53d 20 August 2020
  - Added drag and drop support to GenericDialog directory and file fields, based on code from Fiji's GenericDialogPlus.
  - The File>Import>Image Sequence and File>Save As>Image Sequence comnands get the directory using the new GenericDialog.addDirectoryField() method, which is based on the very useful method with the same name in Fiji's GenericDialogPlus class.
  - The File>Import>AVI comnand gets the path to the AVI file using the new GenericDialog.addFileField() method, which is also from Fiji's GenericDialogPlus class.
  - Thanks Michael Schmid, added the Process>Filters>Top Hat filter.
  - Thanks to William Berndt, added the Image>Type>HSB (32-bit) command.
  - Thanks to Laurent Thomas, added the More>>Multi Crop command to the ROI Manager.
  - Thanks to Zeynab Mousavi, the Edit>Selection>Scale command uses the centroid instead of the center of the bounding rectangle when "Centered" is checked in the dialog.
  - The Help>About ImageJ window is larger and the text is drawn in an overlay.
  - Thanks to Peter Bankhead, the MacAdapter class is now in the ij.plugin package.
  - Thanks to Norbert Vischer, legend labels can be indexed or hidden in the plot window More>>Legend... dialog.
  - Thanks to Curtis Rueden, the sample images are now loaded from https://imagej.net/images/.
  - Thanks to Jerome Mutterer, the Color Picker now has a clipboard-copyable TextArea containing the selected color in hex format.
  - Thanks to Jeff Hardin, the Image>Hyperstacks>Stack to Hyperstack command now works with virtual stacks not in CZT order.
  - The Threshold tool's "Set" function disables "Don't reset range" if the values set are outslide of the current display range.
  - The ImageStack class now accepts images of different types. Images are converted to the type specified by the setBitDepth() method or to the type of the first image added.
  - Added the Dialog.addDirectory() macro function and the GenericDialog.addDirectoryField() method (example).
  - Added the Dialog.addFile() macro function and the GenericDialog.addFileField() method.
  - Added the Dialog.addImageChoice() macro function and the GenericDialog.addImageChoice() method.
  - Added the Overlay.cropAndSave() macro function and the ImagePlus.cropAndSave() method (example).
  - Thanks to Laurent Thomas, added the RoiManager.multiCrop() macro function and RoiManager.multiCrop() method.
  - Thanks to Philippe Carl and Michael Schmid, added the LutLoader.getLut() method. For an example, run Help>Examples>JavaScript>Show all LUTs.
  - Thanks to Philippe Carl, added the String.format() macro function.
  - Thanks to Laurent Thomas, added the ImagePlus.crop(Roi[]), Overlay.createStackOverlay(Roi[]) and ImageStack.create(ImagePlus[]) methods. For an example, run Help>Examples>JavaScript>Crop Multiple Rois.
  - Added the FolderOpener.open(path, width, height, options) method, which opens a stack, or virtual stack, from a folder of images that may differ in size.
  - Added the ImageStack.setBitDepth() method.
  - Thanks to Aryeh Weiss, added the HyperStackConverter.toStack() method (example).
  - Added the StackWriter.save() method.
  - Thanks to 'bio7' and David Gault, fixed bugs that caused IJ.isJava18() to return false and JavaScript to not work when running Java 14 or later.
  - Thanks to Vivek Gupta, fixed a bug that caused the run("Add Selection...") macro function to ignore the current selection's position.
  - Thanks to Michael Cammer, fixed a bug that caused the contrast to constantly change when scrolling through a stack and the Threshold window is open.
  - Thanks to Gilles Carpentier, fixed a bug that caused the Duplicate command to propose an incorrect name when duplicating an image whose name ends in "-n", where 'n' is a digit.
  - Thanks to Gabriel Landini and Michael Schmid, fixed a bug that caused the File>Show Folder> commands to not work on some Linux systems.
  - Thanks to 'Nhaz', fixed a bug that caused the Fit.doFit() macro function to fail with equations containing "Math.erf()".
  - Thanks to Michael Schmid, fixed preview and parallelization bugs in the RankFilters (Median, Mean, Minimum, etc.).
  - Thanks to Herbie Gluender, fixed a bug that caused Table.* macro functions to ignore custom tables not displayed in the active window.
  - Thanks to Philippe Carl and Michael Schmid, fixed a bug that caused the High Resolution Plot command to not be correctly recorded in Java(script) mode.
  - Thanks to Gabriel Landini, fixed the Process>Shadows>Shadows Demo command, which was too fast on modern computers.
  - Thanks to Jerome Mutterer, fixed a bug that sometimes caused point measurements to not work as expected (example).
  - Fixed issues with script-mode recording of file paths on Windows.
  - On Macs, fixed a bug that caused the ImageJ>About ImageJ window to open slowly.
  - Thanks to Michael Cammer, fixed a bug that caused the s2=replace(s,s1,s2) and s2=s.replace(s1,s2) macro functions to fail when 's1' was a single regular expression special character and 's2' did not have a length of one.
  - Thanks to Philippe Carl, fixed a bug that caused the Image>Stacks>Tools>Concatenate command to not preserve the "Info" properties.
  - Fixed a 1.52r regression that caused ImageJ to hang when saving images with fewer than 4 pixel in TIFF format.
  - Thanks to Jan Brocher, fixed a 1.52u regression that caused the Edit>Selection>Enlarge command to not work as well as before.
  - Thanks to 'jerr', fixed a 1.52 regression that made it impossible to set the threshold by changing the textfield values.
  - Thanks to 'Emil' and Pete Bankhead, fixed a 1.53c regression that caused the Analyze>Plot Profile command not work as expected with segmented and freehand line selections on spatially calibrated images.
  - Thanks to Zeynab Mousavi, fixed a 1.52 regression that caused the getResults() macro function to unexpectadly cause a "No results found" error (example).
  - Thanks to Sumin Kim, fixed a 1.52t regression that caused Stack to Images image titles to not be the same as before for stacks with names containing spaces.
- 1.53c 26 June 2020
  - Added the Help>Examples>Tools> submenu with five tools: Circle Tool, Star Tool, Point Picker, Big Cursor and Annular Selection. These tools use the new "//@AutoInstall" directive that automatically adds them to the toolbar.
  - Added the "//@AutoInstall" and "//@AutoInstallAndHide" directives for automatically installing macros and tools in newly opened .ijm and .txt files.
  - Thanks to Louise Bishop, delete multiple points from a multi-point selection by creating a new area selection while holding down the alt key.
  - Thanks to Gabriel Landini, the LUT name is saved as an image property and displayed when you type "i" (Image>Show Info).
  - Added support for 24x24 macro tool icons. The Big Cursor and Annular Selection tools are examples.
  - Double click on an overlay selection to activate it.
  - Thanks to Christophe Leterrier and Christian Goosmann, the Image>Scale, Image>Adjust>Size, Image>Transform>Rotate, Translate, Rotate 90 Degrees Right and Rotate 90 Degrees Left commands now work with overlays.
  - Thanks to 'Emma', added sliders and an "Overlay only" option to the Image>Transform>Translate command.
  - The Color Picker is improved, including a new tool icon.
  - Toolbar buttons are one pixel larger, making the "ImageJ" window 20 pixels wider.
  - Tool icons are bolder when the GUI scale is greater than 1.0 and less the 1.5.
  - Added a "Reset" button to the Edit dialog of the Plugins>Utilities>Commands window.
  - Thanks Jerome Mutterer, added the rainbow progress bar easter egg, activated by switching to the angle tool and running a command that uses a progress bar (e.g., a radius 50 median filter on a 1000x1000 image).
  - Thanks to Fred Damen, the Compile and Run command now looks for library JAR files in both plugins/jars and plugins/lib.
  - Added the getDir("file") macro function, which returns the directory of the most recently opened or saved file.
  - Thanks Jerome Mutterer, added the Overlay.activateSelectionAndWait() macro function.
  - Thanks to 'Eljonco', added the RoiManager.getName() macro function.
  - Thanks to Laurent Thomas, added the RoiManager.setPosition() macro function and method.
  - Thanks to 'quatreulls', added the Table.saveColumnHeaders(boolean) macro function and ResultsTable.saveColumnHeaders(boolean) method.
  - Thanks to Laurent Thomas, added the ImagePlus.crop(Roi[]) and ImagePlus.crop(Roi[],options) methods (JavaScript example).
  - Thanks to Bill Christens-Barry, added the TextWindow.setFont(name,style,size) method for setting the font used in the Log window. For monospaced text, set 'name' to "Monospaced" (example).
  - Thanks to Gilles Carpentier, fixed a bug that caused NaN results when measuring line selections created by Edit>Selection>Area to Line from particle analyzer selections touching the right or bottom edge of the image.
  - Thanks to Norbert Vischer, fixed bugs that caused hyperstacks with a "select all" selection to not be correcty copied to the system clipboard.
  - Thanks to Joe Want, fixed a bug that caused the macro interpreter to sometimes generate an invalid "Numeric return value expected" message.
  - Thanks Jerome Mutterer, fixed a bug that caused the Roi.activateSelection(index) macro function to not work as expected when called twice with the same index.
  - Worked around a Java 8/Windows 10 bug that caused the "ImageJ" window menu bar font size to become very small after increasing the GUI scale.
  - Thanks to Romain Guiet and Jan Eglinger, fixed a bug that caused the multi-point tool to always reset the counter to 0.
  - Fixed a bug that caused the Edit>Selection>Fit Spline command to leave an incomplete progress bar.
  - Fixed a bug that caused the Editor's Compile and Run "Save as" dialog to sometimes not default to a folder inside the plugins folder.
  - Thanks to Laurent Thomas, fixed a bug in ROI Manager>Properties that caused it to not change the position of multiple ROIs.
  - Thanks to Michael Schmid, fixed a bug that could cause an exception with plugins using a DialogListener.
  - Thanks to Michael Schmid, fixed a bug that could cause the "Label Points" checkbox in Point Tool Options dialogs to be ignored.
  - Thanks to Christian Tischer, fixed a bug that caused the macro interpreter to not generate an "Undefined variable" error with statements like "v=v+1".
  - Thanks to Garbriel Landini, fixed a 1.52m regression that caused histogram peaks to extend above the frame.
  - Thanks to Stein Rorvik, fixed a 1.52u regression that caused File>Import>Image Sequence to display unexpected error messages in the Log window.
- 1.53b 31 May 2020
  - Thanks to Jerome Mutterer, added the "Overlay Editing Tools" toolset and the "Label Maker" tool to the toolbar's ">>" menu. Shift click on a toolset or tool in the ">>" menu to view the macro source code.
  - Thanks to Laurent Thomas, added the Edit>Options>Roi Defaults command, which adds support for ROI group names. Double click on the rectangle tool to run this command.
  - The group name, "Stroke Color:" field and the selection color are dynamically updated as the group number is changed in the Edit>Selection>Properties dialog.
  - Thanks to Jerome Mutterer, added support for tool icons read from image files located in the macros/toolsets/icons/ folder. The syntax looks like
    macro "Test Tool - icon:833.png" { }.
  - Thanks to Erod Baybay, added the Roi.setPosition(slice) macro function.
  - Thanks to Jerome Mutterer, added the Overlay.indexAt(x,y), Overlay.removeRois(name) and Overlay.getBounds(index,x,y,width,height) macro functions.
  - Thanks to Stein Rorvik, added the Roi.setJustification(str), Roi.setFontSize(size), Property.setList(str) and Property.getList macro functions.
  - Added the setOption("InterpolateLines",boolean) macro function.
  - Thanks to Adrian Martin, added the setOption("FlipFitsImages",true) macro function.
  - Thanks to Laurent Thomas, added the Roi.getGroupNames and Roi.setGroupNames() macro functions.
  - Thanks to Jan Eglinger, moved initialization of the okay and cancel buttons in GenericDialog into the constructors.
  - Thanks to Hidenao Yamada, fixed a bug that caused the FileInfoVirtualStack.deleteLastSlice() method to not work.
  - Thanks to Tom Kazimiers, fixed spelling of the ARTIST tag in the TiffDecoder.
  - Thanks to Jerome Mutterer and Michael Schmid, fixed a rounding error that caused the Measure command to not correctly measure point selectons with non-integer coordinates.
  - Thanks to Herbie Gluender, fixed bugs that caused the Rename, Duplicate, Sort and Plot Results table commands to not work if the table did not contain a ResultsTable object.
  - Thanks to Norbert Vischer, fixed a bug that caused the Stack to Hyperstack command to throw an exception.
  - Thanks to 'Hayato', fixed a bug that caused the roiManager("measure") macro function to be slow on Windows when measuring thousands of ROIs.
  - Thanks to Gilles Carpentier, fixed a bug that caused the Stack to Hyperstack command to unexpectedly display the output image in batch mode.
  - Thanks to Madison Williams, fixed a 1.52o regression that caused tables created by the Cell Counter plugin to be empty.
  - Thanks to Ron DeSpain, fixed a 1.52u regression that caused incorrect positions to be shown in the status bar after using the arrow keys to move line selections.
  - Thanks to Stein Rorvik, fixed a 1.52t regression that caused the TextRoi.setJustification() method to sometimes not work as expected.
  - Thanks to 'hwada', fixed a 1.52t regression that changed the order of the points returned by Line.getFloatPolygon().
- 1.53a 4 May 2020
  - Thanks to Michael Ellis, added support for saving and restoring persistent image properties via the Property.set(key,value) and Property.get(key) macro functions and the setProp(key,string), getProp(key), setProp(key,double) and getNumericProp(key) methods (JavaScript example).
  - Removed file sizes from entries in the File>Open Samples> submenu. Macros that use the old entries (e.g. "Blobs (25K)") continue to work.
  - Thanks to Laurent Thomas, the Overlay and RoiManager classes are now iterable. Plugins can use "for (Roi roi : rm)" instead of "for (int i = 0; i != rm.getCount(); i++)". In JavaScript, use "for each (roi in rm)" (example).
  - Thanks to Norbert Vischer, added the [&n] macro shortcut notation that allows shortcuts to be used on both numerical keypads and normal (laptop) keyboards. (example).
  - Thanks to Richard Boardman, increased the BufferedOutputStream buffer size in the FileSaver class to 32K and added the static FileSaver.setBufferSize(int) method.
  - Thanks to Michael Schmid, added the Plot.setOptions() macro function. See Help>Examples>Plots>Plot Results for an example.
  - Added the Property.get(key), Property.set(key,value), Property.getInfo, Property.getSliceLabel, Property.setSliceLabel(string) and Property.getDicomTag(string) macro functions.
  - Thanks to Michael Schmid, added the Plot.getCurrentFont(), Plot.getDefaultFont() and Tools.getNumberFromList() methods.
  - Thanks to Herbie Gluender, added the GenericDialog.getLabel() and FHT.getRawPowerSpectrum() methods.
  - Thanks to Kenneth Sloan, added the ImageProcessor.getForegroundValue() method.
  - Thanks to Curtis Rueden, added the GUI.getParentFrame() method and made GenericDialog.getParentFrame() private again.
  - Thanks to Hidenao Yamada, fixed a bug that caused the getDirectory() and getFileName() methods of the FileInfoVirtualStack class to always return null.
  - Thanks to Norbert Vischer, fixed a bug that caused the File>Import>Image Sequence command to not ignore subdirectories.
  - Thanks to Michael Cammer, fixed a 1.52v regression that caused recording to not work correctly when Preview was checked in a filter dialog.
  - Fixed a 1.52o regression that caused the Help>Examples>JavaScript>FFT Filter script to display an error message.
  - Thanks to 'Eljonco', fixed a 1.52v regression that caused the Threshold tool to sometimes freeze ImageJ.
- 1.52v 11 April 2020
  - Thanks to Norbert Vischer, macro error messages include the call stack. (example).
  - Added a "Set default directory" code choice to the Edit>Options>Startup dialog.
  - Thanks to Laurent Thomas, the RoiManager class is now iterable.
  - The run("Viridis") macro function now works on Fiji (example).
  - Thanks to Fred Damen, Java compiler error messages use the default editor font.
  - Thanks to Fred Damen and Michael Schmid, added the Math.erf(x) macro function.
  - Added the Overlay.useNamesAsLabels(boolean) macro function (example).
  - Thanks to Michael Schmid, added the Fit.getEquation(index,name,formula,macroCode) macro function (example).
  - Thanks to 'Odinsbane', added the ByteProcessor.skeletonize(foreground) method, where 'foreground' is either 0 or 255.
  - Thanks to Laurent Thomas, added the ResultsTable.getResultsTable(title) method.
  - Thanks to 'Max1', fixed a bug that caused the Edit>Selection>Scale command to not maintain the selection name, group, fill color, point type and point size.
  - Thanks to 'Odinsbane', fixed a bug that caused the ByteProcessor.skeletonize() method to not work correctly with objects touching the image edge.
  - Thanks to Stefan Helfrich and Olivier Burri, fixed a bug that caused the position of ROIs added to the ROI Manager using RoiManager.setRoi() to sometimes change.
  - Thanks to Michael Schmid, fixed a bug that sometimes caused GenericDialogs to throw an exception.
  - Thanks to Jeremy Adler, fixed a bug where changing the LUT resets the display range.
  - Thanks to 'Sh_Ty', fixed a bug the caused the Analyze>Tools>Calibration Bar command to throw an exception in headless mode.
  - Thanks to Michael Schmid, fixed a bug that caused plots with custom symbols to use the wrong color or generate an error.
  - Thanks to Nicolas De Francesco, fixed a 1.52u regression that caused incorrect straight line length measurements with spatially calibrated images.
  - Thanks to Peter Haub, fixed a 1.52u regression that caused the cursor position to not be aligned with the drawing position when creating a polygon ROI.
  - Thanks to 'Professor_OAT', fixed a 1.52s regresson that caused the deleteRows() macro function to throw an exception when deleting rows in a non-numeric table.
- 1.52u 17 March 2020
  - ROI enhancements, thanks to Michael Schmid:
    - Line and point selections have integer coordinates at pixel centers when displayed at high magnification. Area selections have integer coordinates at the top-left corner of pixels.
    - All interactively created ROIs, except rectangles and ovals, are created with subpixel resolution when the magnification is above 150%.
    - Removed the "Sub-pixel resolution" option from the Edit>Options>Plots dialog.
    - The Line to Area command is faster and more accurate
    - The Straighten command is more accurate.
    - The Image>Info command displays more information about ROIs.
    - Long-click to select ROIs from overlays now also works with lines.
    - The Measure command uses Line to Area instead of Straighten to get statistics from segmented and freehand lines with a width geater than one.
    - Fixed a bug that could (rarely) cause an exception during "wipe back" when drawing a polygon or polyline. In "wipe back" mode, the mouse behaves like an eraser when moved backwards with alt key down.
  - Thanks to Nicolas De Francesco, added the Edit>Selection>Fit Rectangle command.
  - Thanks to 'Dcolam' and Jan Eglinger, the Edit>Selection>Enlarge command no longer has a 255 pixel limit.
  - Thanks to Peter Bankhead, the default TIFF reader uses the HandleExtraFileTypes plugin when it is unable to open a file. As an example, .svs files dragged and dropped on the "ImageJ" window are now opened by the Bio-Formats plugin.
  - Added the Help>Examples>JavaScript>Overlay Text example.
  - Thanks to Laurent Thomas, added a "Install Keypad Shortcuts" command to the ROI Menu tool. Add
    call("ij.plugin.MacroInstaller.installFromJar", "/macros/RoiMenuTool.txt+");
    to the Edit>Options>Startup dialog to have the shortcuts automatically installed on startup.
  - Thanks to Laurent Thomas, the commands in the ROI Menu tool and the "Group" setting in the ROI Manager's Properties dialog are recordable.
  - Added the Math.abs(n), Math.acos(n), Math.asin(n), Math.atan(n), Math.atan2(n1,n2), Math.ceil(n), Math.cos(n), Math.exp(n), Math.floor(n), Math.log(n), Math.log10(n), Math.min(n1,n2), Math.max(n1,n2), Math.pow(n1,n2), Math.round(n), Math.sin(n), Math.sqr(n), Math.sqrt(n) and Math.tan(n) macro functions.
  - Added the RoiManager.setGroup(group) and RoiManager.selectGroup(group) macro functions.
  - Thanks to Ken Gilbert, added the getValue("image.size") macro function.
  - Thanks to Laurent Thomas, added the setOption("WaitForCompletion",false) macro function, which causes the next exec() call to return an empty string and not wait for the command being executed to finish.
  - Thanks to Nortbert Vischer, added the Array.sort(array1,array2,array3...) macro function (example).
  - Thanks to Volker Backer, added the ImagePlus.resize() method, which is recorded by the Image>Scale and Image>Adjust>Size commands.
  - Thanks to Fred Damen, added the Plot.setWindowSize() method.
  - Thanks to Lewis Muir, fixed a bug the caused the Pixel Inspection Tool's red selection box to be included with the image when saving in GIF, JPEG or PNG format.
  - Thanks to 'cooketho', fixed a bug that caused the Edit>Copy to System command to sometimes not work as expected with composite images.
  - Thanks to Fred Damen, fixed bugs that caused the TextRoi.setJustification() and TextRoi.drawPixels() methods to not work as expected.
  - Thanks to Nicolas De Francesco, fixed a bug that caused empty tables to not be opened correctly.
  - Fixed a bug that caused the Color Picker to not work correctly if the GUI scale was greater than one.
  - Thanks to Michael Schmid, fixed a bug that could cause a thread deadlock in plugins using the ImageListener interface.
  - Thanks to Michael Schmid, fixed a bug that caused the "List coordinates" option in the Edit>Selection>Properties dialog to ignore the "Origin" setting in the Image>Properties dialog.
  - Thanks to 'sebi06', fixed a 1.52p regression that caused the particle analyzer to thow an exception in headless mode.
- 1.52t 30 January 2020
  - Thanks to Laurent Thomas, added a "Group" field to the Edit>Selection>Properties dialog and an "ROI Menu" tool to the toolbar's >> menu.
  - Thanks to Norbert Vischer, added support for superscripts and subscripts in plot axis labels (example).
  - Thanks to Norbert Vischer, added a "Separate Image" option to the "Location:" menu of the Analyze>Tools>Calibration Bar dialog.
  - Selection handles are larger.
  - Added a "Bolder selections" ("Roi.setDefaultStrokeWidth(2);") code choice to the Edit>Options>Startup dialog.
  - Thanks to Mark Rivers, the Help>Examples>JavaScript>TeraByte VirtualStack example now generates test patterns and supports multiple image types.
  - Thanks to Laurent Thomas, added the Roi.getDefaultGroup, Roi.setDefaultGroup(group), Roi.getGroup, Roi.setGroup(group), Roi.getDefaultStrokeWidth and Roi.setDefaultStrokeWidth() macro functions, and the corresponding Roi class methods.
  - Added the following macro language string functions, where 's' is a string variable:
    s.charAt(i), s.contains(s2), s.endsWith(s2), s.indexOf(s2), s.lastIndexOf(s2), s.length, s.matches(s2), s.replace(s1,s2), s.startsWith(s2), s.substring(i1,i2), s.substring(i), s.toLowerCase, s.toUpperCase and s.trim.
  - Thanks to Stephen Royle, fixed a bug on macOS that caused the command-h keyboard shortcut (ImageJ>Hide ImageJ) to not work.
  - Thanks to Mark Rivers, fixed a bug that caused the cursor location and pixel value to not be displayed in the status bar for animating stacks.
  - Thanks to Jeff Spector and Michael Schmid, fixed a bug that caused the Edit>Selection>Line to Area command to not work as expected.
  - Thanks to Norbert Vischer, fixed a bug that caused a misleading error message to be displayed when using the saveAs(format,path) macro function to save in "jpg", "png" or "gif" format and the file path was incorrect.
  - Thanks to Michael Schmid, fixed a bug that caused macro recording to not work correctly if "Non-blocking filter dialogs" was enabled in the Edit>Options>Misc dialog.
  - Thanks to Michael Kaul, fixed a bug that caused the GenericDialog.addSlider() method to not use enough digits to the right of the decimal point if the value of the 'stepSize' argument was very small.
  - Thanks to Michael Schmid, fixed several live profile plot and LineWidthAdjuster bugs.
  - Thanks to Norbert Vischer, fixed a bug that caused the Image>Overay>Flatten command to throw an exception when flattening hyperstacks.
  - Thanks to Michael Schmid, fixed a bug that caused dialogs with only buttons to put the focus on the first button, which is not the "OK" button on MacOS and Linux.
  - Thanks to John Fozard and 'mountain_man', fixed a bug that caused angle measurements of lines a few pixels in length to be incorrect.
  - Thanks to 'SarenT', fixed a bug that caused the ImagePlus.getShortTitle() method to truncate file names containing spaces.
  - Thanks to Norbert Vischer, fixed a bug that caused a "Has Calibration Bar" error when attempting to adjust brightness and contrast after clicking on "Cancel" in the Analyze>Tools>Calibration Bar dialog.
  - Thanks to Fernando Garcia-Polite, fixed a 1.52q regression that caused the run("Point Tool...",options) macro function to no longer work.
  - Thanks to Michael Schmid, fixed a 1.52q regression that caused duplicate recordinging of non-blocking dialogs.
  - Thanks to Dorai Iyer, fixed a 1.52s regression that caused characters entered using the text tool to sometimes be repeated.
  - Thanks to Rodrigo Goncalves and Curtis Rueden, fixed a 1.52q regression that caused the "Movie (FFMPEG)" plugin to throw a NullPointerException.
- 1.52s 10 December 2019
  - Thanks to 'LPUoO', added the Plugins>Utilities>Commands command, which opens a list of commonly and recently used commands.
  - By default, image windows now open just below the "ImageJ" window.
  - Thanks to Norbert Vischer, adding an exclamation mark to showStatus() messages avoids status bar flicker (example).
  - Thanks to Michael Schmid, the Process>Filters>Convolve dialog displays feedback on the kernel as it is modified.
  - Added the Macros>Set as Repeat Command command to the macro editor. After running this command, the selected macro code will run each time you press 'r', the shortcut for the Process>Repeat Command command.
  - Thanks to Jerome Mutterer, added a "Splash Screen" code choice to the Edit>Options>Startup dialog.
  - Changed the shortcut for Process>Repeat Command to 'r' and the shortcut for File>Revert to shift-r.
  - Added a "Reuse 'FFT of...' window" option to the Process>FFT>FFT Options dialog.
  - Thanks to Peter Haub, chroma subsampling is disabled when saving in JPEG format if the Quality setting (Edit>Options>Input/Output) is 90 or higher, resulting in higher quality images but larger file sizes.
  - Thanks to Karen Collins, improved the FITS Writer.
  - Added the Help>Examples>JavaScript>JPEG Quality Plot example.
  - Removed the obsolete "Draw grid lines" option from the Edit>Options>Plot dialog.
  - Thanks to Michael Schmid, the ImagePlus.updateAndDraw() method adds a scroll bar to the image window if the stack size has changed to greater than one.
  - Thanks to Stein Rorvik, added the File.getDefaultDir, File.setDefaultDir(path), String.trim(string) and String.join(array) macro functions.
  - Thanks to Peter Haub, added the JpegWriter.disableChromaSubsampling() method (example script).
  - Added the ImageProcessor.setFontSize() and Plot.setFontSize() methods.
  - Thanks to 'kefe' and Herbie, fixed a bug that caused the Stack to Images command to use slice labels as image titles even when they contained "/", "\" or ":" characters.
  - Thanks to 'sudgy' and Jan Eglinger, fixed a bug the caused iteration over the points contained in an ROI to throw an exception for rectangular ROIs.
  - Thanks to Norbert Vischer, fixed a bug that caused the options dialogs for the Rounded Rectangle, Multi-point and Arrow tools to generate "Duplicate keyword" errors when the Recorder was running.
  - Thanks to Peter Haub, fixed a bug that caused the Image Calculator to not work as expected with RGB images when using the "Difference" operator and the "32-bit (float) result" option was enabled.
  - Fixed a bug that caused the "Font size" setting in the Edit>Options>Plots dialog to be ignored.
  - Thanks to Stein Rorvik, fixed a bug that caused the run("Calibration Bar...",options) macro function to ignore calls to setOption("AntialiasedText",boolean).
  - Thanks go Sethur, worked around a Windows 10 and OpenJDK bug that caused the "thumb" on scrollbars to be hard to see.
  - Thanks to Stein Rorvik, fixed a bug that caused the Analyze>Set Scale command to not be correctly recorded.
  - Thanks to Sethur, fixed a bug that caused the Image>Stacks>Tools>Substack Maker command to not carry over the calibration of hyperstacks.
  - Thanks to Sethur, fixed bugs that caused the DICOM reader to not correctly open multi-frame DICOMs, and 16-bit signed DICOMs, with RescaleSlope=1 and RescaleIntercept!=0.
  - Thanks to Stein Rorvik, fixed a macro interpreter bug that prevented array functions like newArray() and split() from being used as arguments to user-defined functions.
  - Thanks to Stein Rorvik, fixed a bug that caused the Window menu to not be updated when saving a table.
  - Thanks to Stein Rorvik, fixed a bug that caused the Image>Transform>Translate command to ignore overlays.
  - Thanks to Stein Rorvik, fixed a bug that caused right justified text in overlays to not be translated correctly.
  - Thanks to Stein Rorvik, worked around a Java bug that caused the OpenDialog.setDefaultDirectory(path) method to sometimes not work as expected on Windows when the path used "/" separators.
  - Thanks to Stein Rorvik, fixed a bug that caused macros calling open("") to not be aborted when the user clicked "Cancel" in the file open dialog and "Use JFileChooser to open/save" was enabled in the Edit>Options>Input/Output dialog box.
  - Thanks to Nicolas De Francesco, fixed a bug that caused Process>FFT>Custom Filter to only process the current stack slice even though "Process entire stack" was checked in the dialog box.
- 1.52r 26 October 2019
  - Plot enhancements, thanks to Michael Schmid:
    - The More>> menus have immediate preview.
    - New More>>Use Template menu (also with immediate preview), useful for creating plots with the same style.
    - Clicking into a rectangular area next to an axis shows the corresponding axis dialog.
    - When adding a curve to a "Live" plot, it remains when the plot is updated.
  - Thanks to Jan Eglinger, saving TIFF images and stacks to network drives is up to 10 times faster.
  - Thanks to Marcel Boeglin, the title of the selection list created by Image>Overlay>List Elements includes the image name. And, when you double click on a line, the image associated with the list is activated, the corresponding selection is activated and stacks are set to the selection position.
  - Thanks to Michael Schmid, Process>Filters>Gaussian Blur now uses a Thread Pool, reducing overhead and making it faster for small images.
  - Thanks to Stein Rorvik, you can now separately view and set the X, Y and Z dimension units in the Image>Properties dialog box.
  - Thanks to Ryan Siu, the double click interval used to complete a polygon selection is reduced from 500ms to 250ms and a confirmation dialog is displayed when completing the selection and there are more than 25 points.
  - Thanks to Stein Rorvik, the slider in the Image>Transform>Rotate dialog now shows the angle using two decimal places and the slider arrows increment/decrement by 0.1 degrees. Use the keyboard arrow keys as a shortcut to finely adjust the angle.
  - Thanks to 'felix.b', labels of multi-point tool markers get larger as the markers get larger and there are two new marker sizes ("XXL" and "XXXL").
  - Thanks to Stein Rorvik, the Image>Adjust>Coordinates command can now be used to set the Z unit.
  - GenericDialogs display an error message if show() is called instead of showDialog().
  - Added the getDir("downloads") macro function and the IJ.getDir("downloads") method.
  - Thanks to Stein Rorvik, added the Roi.getPosition(channel,slice,frame), Roi.setPosition(channel,slice,frame), Stack.setXUnit(), Stack.setYUnit(), Stack.setUnits(x,y,z,time,value), Stack.getOrthoViews(x,y,z), Stack.getOrthoViewsIDs(xy,yz,xz), File.getDirectory(path) and File.getNameWithoutExtension(path) macro functions.
  - Thanks to Leroy Olivier, added the Stack.getPointPosition(index) macro function.
  - Added the IJ.openAsByteBuffer() method (example).
  - Thanks to Michael Schmid, fixed a bug that caused the getInfo("window.title") macro function to not work as expected after opening a large text file using open("/path/to/largeFile.txt").
  - Thanks to Stein Rorvik, fixed a bug that caused min/max values of calibrated 16-bit images to be shown without decimals in the "B&C" dialog.
  - Thanks to Deborah Schmidt, fixed a bug that caused Fiji users to not be able to update via HTTPS through a proxy.
  - Worked around a macOS bug that caused the keyboard arrow keys to not function as shortcuts for the increment/decrement arrows in GenericDialog sliders.
  - Thanks to Marcel Boeglin, fixed a bug that could cause the particle analyzer to throw an exception when creating an overlay and no particles were detected.
  - Thanks to Noreen Walker, fixed a bug that caused the image type to unexpectadly to change to COLOR_256 when using the "glasbey" LUT.
  - Thanks to 'mountain_man', fixed a bug that caused images to not be displayed correctly if a LUT was applied before the image was shown.
  - Thanks to 'mountain_man', fixed a bug that caused 8-bit PNG images with LUTs to open as type COLOR_256.
  - Thanks to Jan Brocher, fixed a bug that caused the Edit>Selection>Create Selection command to ignore the "Black background" setting with non-thresholded binary images.
  - Thanks to 'mountain_man', fixed a bug that caused ImageJ to not be be able to open TIFF files saved without a file path.
  - Thanks to Birgit Moeller, fixed a bug that caused the "Label" column to not be sorted when using the "Sort" command in Results tables.
  - Thanks to lguerard and mountain_man, fixed a bug that caused an ROI's hyperstack position to be lost when adding it to the RoiManager.
  - Thanks to Philippe Carl and Michael Schmid, fixed a bug that caused OvalRoi.getMask() to sometimes return a zero-width mask.
  - Thanks to Francois Gannier and Michael Schmid, fixed a 1.52o regression that caused the "Log" window to unexpectedly become the active window.
- 1.52q 13 September 2019
  - Thanks to Michael Schmid, added the "Non-blocking filter dialogs" option to Edit>Options>Misc. The Convolve, Mean, Median, Minimum, Maximum, Variance and Image>Math commands use NonBlockingGenericDialogs when this option is enabled.
  - "Save changes?" dialogs on Windows and Linux now use "Don't Save", "Cancel" and "Save" buttons.
  - Thanks to Norbret Vischer, added the Dialog.addMessage(string,fontSize,fontColor) macro function (example).
  - Thanks to Noreen Walker, the Image>Stacks>Statistics command and the StackStatistics class now calculate the median of non-float images.
  - Drag and drop opening of images, tables and LUTs is recorded.
  - Thanks to Michael Schmid, added the Plot.showValuesWithLabels() macro function and the Plot.getResultsTableWithLabels() method. Both create tables that use legend labels and/or axis labels as column headings. The List, Save Data and Copy All Data plot window commands also now use labels.
  - Thanks to Jerome Mutterer, added the getValue("Length") macro function.
  - Thanks to Jerome Mutterer, added the IJ.pad(string,digits) macro function and method.
  - Thanks to Michael Schmid, the ImagePlus lock() and unlock() methods now support multiple lock/unlock operations by the same thread.
  - Added the IJ.getValue(imp,measurement) method, where 'measurement' is "Area", "Mean", "StdDev", etc.
  - Thanks to Stein Rorvik, fixed a bug that caused File>Import>Image Sequence to not correctly handle RGB48 images when "Use virtual stack" was enabled.
  - Thanks to François Gannier, fixed a bug that caused the unit to not be set when "Function:" was set to "None" in the Analyze>Calibrate dialog.
  - Thanks to 'Matthew', fixed bugs that cause the Table.deleteRows() macro function and IJ.deleteRows() method to not update particle analyzer overlays.
  - Thanks to Norbert Vischer, fixed bugs that caused tables with missing columns or rows to not be opened correctly.
  - Thanks to Sara Vecchio and Michael Schmid, fixed a bug that caussed the curve fitter to throw an exception if all data points contained NaNs.
  - Thanks to Robert Haase, fixed a bug that caused the Process>Find Maxima to throw an exception in Fiji headless mode.
  - Thanks to Stephen Royle, fixed a bug that caused the run("Fill") macro function to ignore setColor(pixelValue) calls.
  - Thanks to 'mendel', fixed a bug that caused enlarged ROIs to be shifted if the polygon defining the original ROI had points outside the filled polygon.
  - Thanks to Michael Schmid, fixed a bug that could cause ImageJ to freezes when running macros that manipulate stacks.
  - Thanks to Norbert Vischer, fixed a bug that caused the numeric field in GenericDialog sliders to be too narrow when the maximum value was greater than 9999.
  - Thanks to Norbert Vischer, fixed a bug that caused the getValue(x,y) macro function to not interpolate when x or y were real numbers.
  - Thanks to Norbert Vischer, fixed a bug that caused the getPixel(x,y) macro function to not return raw pixel values when x or y were real numbers.
  - Thanks to 'mountain_man', fixed a bug that caused line selections to not be correctly converted to ShapeRois.
  - Thanks to Jeremy Adler, fixed a regression that caused the the makeSelection(10, xpoints, ypoints) macro function to throw an exception.
  - Thanks to Dan McDonald, fixed a regression that caused the Raw File Opener to throw an exception.
  - Fixed a 1.52a regression that caused tables created by the gel analyzer to not have row numbers.
  - Thanks to Hyung-song Nam and Curtis Rueden, fixed a 1.52o regression that caused the Channels tool on macOS to become unresponsive.
  - Thanks to Florian Jug, fixed a 1.52o regression that caused the "Auto" button in the "B&C" tool to not have focus on macOS.
- 1.52p 22 June 2019
  - Thanks to Uwe Schmidt, improved the support for multiple screen setups:
    - Placement of first image window is more predictable.
    - Reliably determine the correct screen for a given location or window, for example to determine if a window can be enlarged.
    - If there is ambiguity about which screen to use, the one that contains the main ImageJ window will be chosen. For example Plugins>Utilities>Capture Screen and Windows>Tile use the screen with the main ImageJ window.
    - Dialogs are shown on the screen containing the main ImageJ window.
    - Maximized image windows no longer revert to the main screen.
    - Improved behavior of "+" (Image>Zoom>In) command.
    - Code simplification, especially by removing special cases for Linux.
  - ImageJ displays a warning dialog before deleting a multi-point selection.
  - Thanks to 'alex', the FITS Reader no longer flips images vertically so inspection of pixels will produce the expected values.
  - Thanks to Jerome Mutterer, added the getValue(measurement) macro function, where 'measurement' is "Mean", "Median", "Feret", etc. (example).
  - Added the getValue(x,y) macro function and the ImageProcessor.getValue(x,y) method.
  - Thanks to "Herbie", restored macro support for the "lightGray", "darkGray" and "pink" named colors.
  - Thanks to Somsubhro Chaudhuri, added the getValue("selection.angle") macro function and the Rotator.getAngle() method.
  - Added the getValue("selection.size") macro function.
  - Added the setOption("CopyHeadings",boolean) macro function.
  - Thanks to Stein Rorvik, added the Roi.setAntiAlias(boolean) macro function, which can be used to control antialiasing when drawing selections (example).
  - Thanks to 'MLdish', added the ParticleAnalyzer.setSummaryTable() method (JavaScript example).
  - Thanks to Wilhelm Burger, added the Menus.add(menuPath,class) method.
  - Thanks to Philippe Carl, added the RoiManager.getErrorMessage() method.
  - Thanks to Laurent Thomas, updated the Javadoc of the MaximumFinder.getMaxima() methods to make it clearer that the npoints variable of the returned Polygon is the number of maxima found, not the length of the xpoints variable.
  - Made the Toolbar.builtInTools array public.
  - Thanks to Mikael Eriksson, fixed a bug that caused the particle analyzer's "Summary" table to not be accessible in macros run from the command line using the -batch option.
  - Thanks to Andrew Clark, fixed a bug that caused Edit>Undo to delete all stack slices except the current one after using the flood fill tool.
  - Thanks to 'Nhthayer', fixed a bug that caused imageJ to incorrectly read TIFF stacks created by the Python tifffile package when the "imagej=True" option was used.
  - Thanks to Marcel Boeglin, fixed a bug that caused the Image>Adjust>Size command to throw on exception with XYCT hyperstacks.
  - Thanks to Francisco Romanos, fixed a bug that caused the run("Scale...",options) macro function to ignore the 'interpolate' options keyword.
  - Thanks to Glen MacDonald and Curtis Rueden, fixed a bug that sometimes caused macros in the "More Tools" (>>) menu to be sorted randomly.
  - Thanks to Philippe Carl, fixed a bug that caused ImagePlus.getStatistic() and ImageProcessor.getStatistic() to not treat one point selections the same way.
  - Thanks to Andrew Sonnier, fixed a bug that caused the particle analyzer to not be recorded if the "In situ" option was used.
  - Thanks to Mikael Eriksson, fixed a bug that caused the run(“Colors…”,options) macro function to throw an exception when called from a -batch command line macro.
  - Thanks to Stein Rorvik, fixed a bug that caused the Overlay.drawLine() macro function to not work correctly when used in conjuction with Overlay.setColor() and/or Overlay.setPosition().
  - Thanks to 'Niederle', worked around a bug that caused the run("Gamma...", "value=x.xx") macro function to fail in Fiji headless mode.
  - Thanks to 'fieryice12', fixed a bug that caused the Plot.showValues macro function to fail in batch mode.
  - Thanks to NorbertVischer, fixed a bug that caused the Image>Duplicate command to throw on exception if the ROI was outside the image.
- 1.52o 23 April 2019
  - Added the Help>Examples>Macro>Curve Fitting and Help>Examples>JavaScript>Curve Fitting examples.
  - Thanks to Tiago Ferreira, stack and hyperstack scrollbars now apply the Edit>Options>Appearance "GUI scale".
  - Thanks to 'mountain_man', tables can be sorted alphabetically.
  - Thanks to Neil Switz, the Process>FFT>Inverse FFT command displays a warning message if the "FFT of ..." image has been modified but no pixels have been set to 0 or 255.
  - Thanks to Stein Rorvik, copies of IJ_Props.txt and/or IJ_Prefs.txt in the ImageJ folder override the corresponding files in the default locations.
  - Thanks to Stein Rorvik, the Table.update macro function is called automatically when a macro finsihes and the Table.setSelection(), Table.getSelectionStart and Table.getSelectionEnd functions no longer require that a title be specified.
  - Thanks to Philippe Carl, the isKeyDown() and setKeyDown() macro functions now support the control key (example).
  - Thanks to Stein Rorvik, the setColor() and setLineWidth() macro functions no longer abort the macro if no image is open.
  - Thanks to Sian Culley, removed "Bridge" and "Lena" from the File>Open Samples menu. Macros and scripts that use these images will continue to work.
  - Thanks to Stein Rorvik, the run("Apply LUT") macro function no longer shows an error message with images that have a display range of 0-255.
  - Thanks to NorbertVischer, Philippe Carl and Stein Rorvik, added the Array.deleteValue() and Array.deleteIndex() macro functions (example).
  - Thanks to Stein Rorvik, added the Table.setLocationAndSize() macro function.
  - Added the ImagePlus.crop(options) method, where 'options' can be can be "stack", "slice" or a range (e.g., "20-30").
  - Thanks to Stein Rorvik, fixed a bug the caused macros using a function key shortcut to not work if the shift key was down.
  - Thanks to Salim Kanoun, fixed a bug in the DICOM reader that caused it to sometimes not correctly open PT DICOM stacks.
  - Thanks to Stein Rorvik, fixed a rounding error with setMinAndMax() on some density calibrated 8-bit images.
  - Fixed non-macro recording of the Image>Duplicate command.
  - Thanks to Norbert Vischer, fixed a bug that caused the doWand(x,y,tolerance,"Smooth") macro function to cause the macro language's &var variable passing method to fail.
  - Thanks to Jan Eglinger, fixed a bug that caused log histogram plots to be malformed if the line width was set to greater than 1.
  - Thanks to Stein Rorvik, fixed a bug that caused the Table.title and getInfo("window.title") macro functions to sometimes not work with custom tables.
  - Thanks to Stein Rorvik, fixed bugs related to saving and opening empty tables.
  - Thanks to Norbert Vischer, fixed a bug that caused the Mac menu bar to disappear when activating the Channels, ColorPicker, ContrastAdjuster and ThresholdAdjuster dialogs.
  - Thanks to Norbert Vischer, fixed a bug that caused the "Save changes?" dialog to not be the front-most window when quitting ImageJ.
  - Thanks to Tihamer, fixed a bug that caused the CurveFitter.getResultString() method to fail if there was a fitting error.
  - Thanks to Ellen Arena, fixed 1.52m regression that caused the Edit>Selection>Create Selection command to not work as expected with non-thresholded images.
  - Thanks to Laurent Thomas, fixed a 1.52n regression that caused the MaximumFinder.getMaxima() method to always return 0 points.
  - Thanks to Gabriel Landini, fixed a regression that could cause the ImagePlus.setSlice() method to throw an exception.
- 1.52n 22 March 2019
  - Thanks to Ellen Arena, fixed a 1.52m regression that caused the Edit>Selection>Create Mask command to not preserve spatial calibration.
- 1.52m 20 March 2019
  - ROI improvements thanks to Michael Schmid, including more accurate Roi.contains, better ShapeRoi filling, improved ShapeRoi.clone(), improved Roi Manager Split, better ShapeRoi length calculation, more accurate perimeter for ovals and rounded rectangles, more accurate MinFeret, removed point selection 32k slice limit, ability to press ESC to abort creation of polygonROI, and addition of Roi.getFeretPoints() macro function (example).
  - Thanks to Tiago Ferreira, the "GUI scale (0.5-3.0)" setting in the Edit>Options>Appearance dialog is now applied to almost all remaining dialogs and widgets, including the Histogram and Plot Windows and the Threshold widget.
  - Thanks to Norbert Vischer, added the File>Show Folder submenu.
  - Thanks to Norbert Vischer and Michael Schmid, changed "Noise Tolerance" to "Prominence" and added a "Strict" option to the Process>Find Maxima dialog.
  - Thanks to Hidenao Yamada, the File>Import>Raw command now uses long instead of int for the gap between images.
  - Thanks to Stein Rorvik, Image>Stacks>Tools>Set Label and Image>Stacks>Tools>Remove Slice Labels work with single images.
  - On macOS, the Help>Update ImageJ command displays a message explaining how to work around Path Randomization if the ImageJ home directory is read-only and the file path starts with "/private/var/folders/".
  - Thanks to Christophe Leterrier, the File>Import>Image Sequence command now always sorts the files names on macOS.
  - The File>Save As>Image Sequence command saves single line slice labels when saving in TIFF format.
  - Thanks to Norbert Vischer, the File>Revert command now works with virtual stacks.
  - Thanks to Alicia Daeden, the makeLine() and makePolygon() macro functions no longer have a 200 point limit.
  - Thanks to Steve Fallows, File>Import>Raw only gets .raw file parameters from the filename when it uses 'x' delimiters.
  - Thanks to Gilles Carpentier, added the is("line") and is("area") macro functions.
  - Thanks to Albert Cardona, added the ImagePlus.updateVirtualSlice() method.
  - Thanks to Michael Kaul, added the Plot.update() method.
  - Thanks to 'cyrilturies' and Jan Eglinger, fixed a bug that caused Results table labels to not be displayed for line measurements if no measurement options were enabled in Analyze>Set Measurements.
  - Thanks to Stein Rorvik, fixed rounding errors in the Image>Scale command.
  - Thanks to Norbert Vischer, fixed a bug that caused the toolbar to be corrupted when opening an overlay containing multi-point selections.
  - Thanks to Norbert Vischer, fixed bugs that caused numerous "//setTool()" statements to be recorded when opening ROI sets or overlays that contain multi-point selections.
  - Fixed a bug that caused multi-point selections to lose their 'pointBeforeDeleting' property when saved and re-opened.
  - Thanks to Michael Schmid, fixed a bug that caused Process>Filters>Gaussian Blur to not be multithread-safe.
  - Thanks to Robert Lockwood, fixed a bug that caused the File>Save command to not be correctly recorded.
  - Thanks to Albert Cardona, fixed bugs that caused Edit>Selection>Restore Selection, and setting an ROI from the ROI Manager, to not emit an Roi MODIFIED event.
  - Thanks to Dr-Frog and Jan Eglinger, fixed a bug that caused the ImageProcessor.fillOutside(Roi) method to modify the Roi passed as the argument.
  - Thanks to Teresa Haider, fixed a bug that sometimes caused Image>Transform>Bin to not correctly display the output image.
  - Thanks to Stein Rorvik, fixed a 1.52d regression that caused File>Import>Image Sequence to use the image label (if present) as the slice label instead of the filename.
  - Thanks to Gilles Carpentier, fixed a 1.52k regression that caused the particle analyzer to unexpectedly create composite ROIs.
  - Thanks to Jan Eglinger, fixed a 1.52i regression that caused macro string expressions like "s"+a[i]*n to generate an error.
- 1.52k 29 January 2019
  - Thanks to Albert Cardona and Gabriel Landini, added the "GUI scale (0.5-3.0)" option to the Edit>Options>Appearance dialog, which enables scaling of text in GenericDialogs and in the Command Finder. It also doubles the size of the tool icons if the scale is 1.5 or larger and triples the size if the scale is 2.5 or larger.
  - Thanks to Norbert Vischer, added clickable spaces between the four arrow pairs in plot windows for quickly setting a single plot limit.
  - Thanks to Stein Rorvik, ImageJ now displays a progress bar when duplicating large (>200 megapixel) stacks.
  - Michael Schmid contributed an improved version of the ThresholdToSelection class (Edit>Selection>Create Selection) that always converts single pixel wide lines to traced selections and is up to five times faster.
  - Thanks to Tatsuaki Kobayashi, ImageJ can now open 32-bit float DICOM images.
  - Michael Schmid contributed the FloatArray class, an extendable float array.
  - Thanks to Norbert Vischer, added the Table.setSelection(start,end,title), Table.getSelectionStart(title) and Table.getSelectionEnd(title) macro functions (example).
  - Added the setOption("ScaleConversions",boolean) macro function.
  - Thanks to Robert Haase, fixed a bug that caused the Edit>Selection>Create Selection command to ignore the "Black background" setting when processing non-thresholded binary images.
  - Thanks to Johannes Wibisana, fixed a bug in the Particle Analyzer that caused ROIs added to overlays and the ROI Manager to not exclude interior holes.
  - Thanks to Herbie, fixed a bug that caused the Process>Binary>Make Binary command to incorrectly set the threshold of 8-bit binary images.
  - Thanks to Nicolas De Francesco, fixed a bug that caused the LUT to not be saved in the TIFF header when saving a single-channel image with a custom grayscale LUT.
  - Thanks to Mark Mandelkern, fixed a bug that caused multi-image DICOM files with RescaleSlope!=1.0 to open incorrectly.
  - Thanks to Stein Rorvik, fixed a bug that caused the contrast range to change when converting an 8-bit or 16-bit image to 32-bit.
  - Thanks to Stein Rorvik, fixed a bug that caused the Table.getColumn("Label") macro function to throw an exception.
  - Thanks to Philippe Carl, fixed a bug that caused ImageJ to freeze when opening the Interactive Interpreter on Windows using the ctrl+j keyboard shortcut.
  - Thanks to Jerome Mutterer, fixed a bug that caused ImageJ to fail to open one column tables.
  - Thanks to 'Bio7', worked around a bug that caused toolbar popup menus to not work with OpenJDK 11 and 12 on Windows.
  - Thanks to Ved Sharma, fixed a bug that caused the Histogram command to not behave as expected when "Limit to Threshold" was enabled in Analyze>Set Measurements and there was an invisble threshold.
  - Thanks to Norbert Vischer, fixed bugs in the toScaled(length) and toUnscaled(length) macro functions.
  - Thanks to J Xiong, fixed a 1.52j regression that caused the Image>Overlay>From ROI Manager command to throw an exception.
  - Thanks to Philippe Carl, fixed 1.52j9 regression that made it impossible to enter closing brackets into editor windows using French keyboards.
  - Thanks to Stein Rorvik, fixed 1.52j regression that sometimes caused macro errors to be ignored (examples).
  - Thanks to 'yorgodillo', 'mountain_man' and Jan Eglinger, fixed a 1.52e regression that caused float to 8-bit conversions to be done incorrectly.
- 1.52j 29 December 2018
  - Added the Plugins>Macros>Interactive Interpreter command (shortcut: "j"), which enables interactive editing and running of macro and JavaScript code in an editor window (example). Type "js" in to switch the language to JavaScript.
  - Thanks to Ved Sharma, point selections with more than 65,535 points can now be saved and reopened (example).
  - Thanks to Philippe Carl, the status bar is updated when adjusting elliptical and rotated rectangle selections.
  - Thanks to Ilan Tal, added the "Ignore Rescale Slopet" checkbox to the Edit>Options>DICOM dialog box.
  - Thanks to Michael Schmid, Image>Edit>Resize can now convert a single image to a stack.
  - Thanks to MichaelSchmid, improved the calculation of Feret parameters for composite selections. FeretAngle is now reported (within 0.5 deg), works with pixel aspect ratios different from one and is more accuate due to use of 0.5 deg increments.
  - Thanks to MichaelSchmid, the output of ROI Manager 'AND', 'OR' and 'XOR' operations are, if possible, converted from composite ROIs into simpler polygon ROIs.
  - Thanks to Jerome Mutterer, errors in macro run() statements are now reported using a "Macro Error" dialog that displays the line number.
  - Added the ImagePlus.plotHistogram() method. For examples, run Help>Examples>JavaScript>Histogram Plots.
  - Added the JavaScript-friendly ImageStatistics.histogram() method (example).
  - Added the Overlay.setLabelFontSize(size,options), Overlay.setLabelColor(), Overlay.setStrokeColor() and Overlay.setStrokeWidth() macro functions, and corresponding Overlay class methods (example).
  - Thanks to Jerome Mutterer, added the setIgnoreErrors() and getErrorMessage() methods to the Interpreter class (example).
  - Thanks to Michael Schmid, fixed a bug that caused Image>Edit>Resize to not preserve stack lookup tables.
  - Thanks to Stein Rorvik, fixed Orthogonal Views bugs that caused freezing, dragging in XZ and YZ views to not work, missing density calibration and incorrect behavior when "Rotate YZ" and "Flip XZ" where enabled in Edit>Options>DICOM.
  - Thanks to Stein Rorvik, fixed a bug that caused particle analyzer overlays to not be specific to the current slice when processing one slice.
  - Fixed a bug that caused the color of overlay labels to be set to black after the image was saved and reopened.
  - Fixed a bug that caused the Image>Overlay>To ROI Manager command to not preserve overlay properties such a label color and scalability.
  - Thanks to Wilhelm Burger, fixed a bug that caused the Roi.setLocation(x,y) method to not work correctly with ShapeRois if x or y were not integers.
  - Thanks to Philippe Carl, fixed a bug that caused the status bar to not be updated, or to not be updated correctly, when moving or changing the length of straight line and arrow selections using the arrow keys.
- 1.52i 26 November 2018
  - Thanks to Ved Sharma and Michael Kaul, added the Image>Stacks>Measure Stack command (macro source), useful for plotting stacks using the contextual (right-click) Plot command in Results tables.
  - Thanks to Jerome Mutterer, added the Image>Stacks>Tools>Magic Montage Tools command (macro source).
  - Tables can be sorted using the Sort command in the contextual (right-click) menu or in the Results menu (example).
  - Thanks to Matias Andina, the Image>Transform>Rotate command can now be used interactiely.
  - Thanks to Michael Schmid, added an "F" (Fit All) icon next to the "R" (Reset Range) icon in the bottom-left corner of plot windows.
  - Thanks to Robert Haase and Emanuele Martini, added a "Don't reset range" checkbox to the "Threshold" dialog (example).
  - Added an error bars example to the Help>Examples>Plots>Plot Styles macro.
  - Alphabetized the Image>Stacks>Tools menu.
  - Moved the Image>Stacks>Plot XY Profile command to Image>Stacks>Tools>Plot XY Profile.
  - Thanks to 'Barbara' and Michael Schmid, the Translate command in the ROI Manager remembers the x and y offset values.
  - Thanks to Alex Mironov, added an optional properties string argument to the makePoint() macro function (macro example, JavaScript example).
  - Thanks to Alex Mironov, the setLineWidth() macro function automatically calls Overlay.add() when the line width changes (example).
  - Added the Plot.replace() macro function and method. For examples, run Help>Examples>Plots>Random Data or Help>Examples>JavaScript>Plot Random Data.
  - Thanks to Michael Schmid, added an "Add Fit" commamnd to the Data>> menu of Plot windows.
  - Thanks to Laurent Thomas, ShortProcessor.rotate() and FloatProcessor.rotate() now fill using the value set by setBackgroundValue().
  - Thanks to Kai Barthel, the Analyze>Calibrate command resets the display range of contrast-reduced images.
  - Thanks to Norbert Vischer, the curve fitter now works with datasets containing NaNs.
  - Thanks to Michael Schmid, added the Plot.objectCount macro function.
  - Thanks to Matias Andina, added the setOption("SupportMacroUndo",boolean) macro function (example).
  - Thanks to Michael Schmid, added a constructor for creating a plot from arrays to the PlotContentsDialog class (example).
  - Added the PointRoi.getLastCounter() method.
  - Added the getSizeInBytes() methods to the ImagePlus class.
  - Thanks to Philippe Carl and Michael Schmid, fixed a bug that caused the macro interpreter to incorrectly evaluate string expressions containing numeric arrays indexed using the ++ operator.
  - Thanks to Stein Rorvik, fixed a bug that caused the changeValues() macro funtion to reset the display range of 16-bit and 32-bit images.
  - Thanks to Alex Mironov, fixed a bug that caused setLineWidth(1) in a macro to incorrectly set the line width to the width set in the Edit>Options>Line Width dialog.
  - Thanks to Michael Schmid, fixed a bug that caused the Undo command to not work after rotating an image with "Enlarge image" enabled.
  - Thanks to Matias Andina, fixed a bug that caused the Undo command to not work after cropping or rotating a composite color image.
  - Thanks to Michael Schmid, fixed a bug that caused nudging the end of a line selection with alt-arrow keys to not update a live profile plot.
  - Thanks to Mark Senko and Michael Schmid, fixed a bug that caused profile plots of line selections wider than 1 to differ from profile plots of rectangles of the same size.
  - Fixed a bug that caused DICOM images to be displayed incorrectly if "Open as 32-bit float" was enabled in Edit>Options>DICOM.
  - Thanks to Kenneth Sloan, fixed a bug that caused the Paintbrush Tool (in "Paint on overlay" mode) to delete pre-existing overlays.
  - Thanks to 'mountain_man', fixed a bug that caused the Rescale Slope tag (0028,1053) to be ignored when opening DICOM images and "Open as 32-bit float" was not enabled in Edit>Options>DICOM.
  - Thanks to Fred Damen, fixed a file path recording bug that caused a NullPointerException.
  - Thanks to Michael Schmid, fixed a bug that caused buttons in some dialogs (e.g., "B&C" and "Threshold") to not be displayed correctly on macOS when using the Metal look and feel. Opening an Action Bar switches to Metal or use Edit>Options>Look and Feel in Fiji.
  - Thanks to Michael Schmid, fixed a bug that caused plot stacks to not be spatially calibrated.
  - Thanks to Nicolas Stifani, fixed a 1.52h regression on Windows that caused canceled dialog boxes in macros started using the Plugins>Macros>Run command to throw an exception.
  - Thanks to Jerome Mutterer, fixed a v1.52 regression that caused the getMetadata() macro function (without the "info" or "label" argument) to not work as expected.
- 1.52h 16 October 2018
  - Plot enhancements, thanks to Michael Schmid:
    - "Save" in plot windows has moved into a new Data>> menu, which includes two additional items: (1) Add from Plot (takes a PlotObject, e.g. data set, text, etc., from a different plot) and (2) Add from Table (adds data from a "Results" table).
    - Values in tables can be be plotted directly using the contextual menu or the Results>Plot command in "Results" tables.
    - Added the Separated Bar type, a bar graph with some space between the columns. For an example, run Help>Examples>JavaScript>Plot Styles.
    - Histogram-like "Bar" plots also work with non-equidistant points along x.
    - Connected Circles fill the circles with the secondary color (= line color), if that color is given and not null.
    - Improved the code for filling bars and "filled" curves.
    - For "Bar" and "Separated Bar", the base line of the plot is y = 0 if the values differ by more than a factor of 2.
  - Added the Help>Examples>Plots>Plot Styles and ...JavaScript>Plot Styles examples.
  - The Edit>Selection>Create Mask command works with overlays created by the Brush and Pencil tools.
  - Added a "Help" button to the Brush and Pencil tool dialog boxes.
  - Thanks to Gabriel Landini and Jerome Mutterer, the text tool now creates an "Enter text..." selection when you click (without dragging) on an image and there is no existing selection.
  - Thanks to Gabriel Landini, the "Show on all slices" option (was "Show all") now appears in both the point and multi-point tool dialogs.
  - Thanks to Stein Rorvik, the Analyze>Tools>Synchronize Windows tool now supports use of the "+" and "-" keys for synchronized zooming when the "Image scaling" option is enabled.
  - Thanks to Lorenzo Cangiano, added a "Points" column to the Image>Overlay>List Elements table.
  - Added the Plot.setStyle() macro function. For an example, run Help>Examples>Plots>Plot Styles.
  - Added the IJ.exit() method, which aborts JavaScripts.
  - Thanks to Bio7, fixed a bug that caused images to turn black when assigned an ImageRoi created by the Brush or Pencil tools.
  - Thanks to Stein Rorvik, fixed bugs that caused File>Open Next to sometimes fail when opening images of dissimilar types.
  - Thanks to Michael Schmid, fixed several bugs in the Image>Adjust>Threshold tool, mostly related to 32-bit images.
  - Thanks to Michael Cammer and Michael Schmid, fixed a bug that caused the "Propagate to the other n channels of this image" option of the "Set" command in the "B&C" tool to not work as expected.
  - Thanks to Stein Rorvik and Michael Schmid, fixed a bug that caused an image pasted into a zoomed image to be incorrectly positioned if the pasted image was equal or larger in size than the target image.
  - Thanks to Stein Rorvik, fixed bugs that caused scale bars to be incorrectly positioned on large images and macros to alter default scale bar dialog settings.
  - Fixed a bug that caused keyboard shortcuts for zooming in and out, as well as other shortcuts, to not work when a text selection was active.
  - Thanks to Stein Rorvik, fixed a bug that caused right-justified text added to an overlay by the Overlay.drawString() macro function to not be displayed correctly.
  - Thanks to "hwada", fixed bugs that caused the ImagePlus.setImage(ImagePlus) method to sometimes not work as expected.
  - Thanks to Nathalie Houssin, fixed a bug that caused the Make Substack command to throw an exception when used with hyperstacks opened by the OlympusViewer plugin.
  - Fixed bugs in the ImagePlus.setStack() method.
  - Thanks to Michael Schmid, fixed a bug that caused the "Show All" button in the ROI Manager to not work as expected with point selections.
  - Thanks to Lorenzo Cangiano, fixed a bug that caused programmatically generated overlays of PointRois on stacks to be not shown when saved and reopened.
  - Thanks to Robert Haase, fixed a bug that could cause the PolygonRoi.getTracedPerimeter() method to throw a NullPointerException.
  - Thanks to Hyung-song Nam and Curtis Rueden, fixed a bug that caused keyboard shortcuts to not work with the "Channels" tool.
  - Thanks to Gilles Carpentier, fixed a 1.52f regression that caused the Edit>Selection>Create Mask command to not work as expected if the image had both an roi and an overlay.
  - Thanks to Norbert Vischer, fixed a 1.52g regression that caused multi-channel images to lose color table and display range information after being cropped and saved.
  - Thanks to Stephen Royle, fixed a 1.52h regression that caused the Image>Transform>Rotate 90 Degrees Right (or Left) command to not work as expected with composite images.
- 1.52g 16 September 2018
  - A text selection in an overlay can be deleted by alt-clicking on it and pressing backspace+delete (on Windows) or command+delete (on Macs).
  - Fixed a bug that caused polygon and polyline selections to lose properties like color, line width and name when a point is added by shift-clicking on an existing point.
  - Thanks to Dave Mason, fixed a bug that caused the File>Import>URL command to not correctly open Hyperstacks.
  - Thanks to Volko Straub, fixed a 1.52f regression that caused getDirectory("") on Windows to return a string ending in "/" instead of the expected "\".
- 1.52f 7 September 2018
  - Thanks to Norbert Vischer, added the Plot.addHistogram() macro function, which plots a histogram from an array (example).
  - Thanks to Norbert Vischer, any currently running macro is aborted when running an installed macro from the Plugins>Macros menu or the editor's Macros menu.
  - Thanks to Michael Schmid, added the "Error Function" [y=a+b*erf((x-c)/d)] curve fit option and the ij.util.IJ.Math.erf(x) method (example).
  - The Edit>Selection>Create Mask command works with line selections and overlays.
  - The "Black background" setting defaults to 'true'.
  - Thanks to Anna Povolna, the "Open all files in folder" and "Use virtual stack" options in the File>Import>raw dialog can be used at the same time.
  - Thanks to 'Sethur', ImageJ no longer sorts imported DICOM stacks by series number (tag 0020,0011) if "Sort images numerically" is not checked in the File>Import>ImageSequence dialog. Also added a recordable 'noMetaSort' option to the options string of the FolderOpener.open(dir,options) method.
  - Thanks to 'Alan', added the createThresholdMask() and createRoiMask() methods to the ImagePlus class. These methods are recorded when using the Edit>Selection>Create Mask command (JavaScript example).
  - Added the recordable Raw.open(), Raw.openAll() and Raw.openAllVirtual() methods (JavaScript example).
  - Thanks to Stein Rorvik, added the DicomTools.getTagName(tag) method.
  - Thanks to Christian Tischer, fixed bugs in the RoiManager.add(ImagePlus,Roi,int) method than caused it to not behave as expected if the ROI name was not null.
  - Thanks to Norbert Vischer, fixed bugs that caused the Edit>Cut and Analyze>Set Scale commands to not set the 'changes' flag.
  - Thanks to Stein Rorvik, fixed a bug that caused the Overlay.drawString macro function to ignore the justification set by the setJustification() function.
  - Thanks to Stein Rorvik, fixed a bug that caused output of the Overlay.drawString() function to be lost when text is added using Overlay.addSelection().
  - Thanks to Lorenzo Cangiono, fixed a bug that caused selections pasted into images to not be saved.
  - Thanks to Mahmoudi Sidi Ahmed, fixed a bug that caused the Analyze>Calibrate command to not work with signed 16-bit images.
  - Thanks to Menelaos Symeonides, fixed an ROI Manager bug that caused the stack position to be ignored when measuring renamed ROIs.
  - Thanks to Ron DeSpain, fixed a bug that caused attempts to add to (by holding shift key down) and subract from (by holding alt key down) elliptical selections to fail.
  - Thanks to Ron DeSpain, fixed a bug that caused the Window>Tile command to overlap the "ImageJ" window with image titles.
  - Thanks to Pete Bankhead, fixed a bug the caused the Process>Batch>Convert command to not work correctly on Macs.
  - Thanks to 'Hamish', fixed a bug that caused the roiManager("delete") macro function to throw an exception when used in a loop.
  - Thanks to Stein Rorvik, fixed a bug that caused one column results tables to not be displayed correctly.
  - Thanks to Stein Rorvik, fixed a bug that caused File>Import>Raw to silently fail when importing a stack and the file size was smaller than the size of a single image.
  - Thanks to Stein Rorvik, fixed a bug that caused the Overlay.drawString() macro function to not correctly display right-justified text.
  - Thanks to Stein Rorvik, fixed bugs that caused the run("Raw...",options) and run("Image Sequence...",options) macro functions to fail silently if the file or folder did not exist.
  - Thanks to Stein Rorvik, fixed a bug that caused the stack title to be incorrect after importing an image sequence on Windows using a file path with forward slashes.
  - Thanks to Stein Rorvik, fixed a bug that caused File>Open Next to not correctly open a non-composite image after having opened a composite image.
  - Thanks to Ved Sharma, fixed an ROI Manager bug that caused a "Rename ROI" dialog do be unexpectadly displayed when running macro using setKeyDown("alt") and makeOval() to create a composite selection.
  - Thanks to Ved Sharma, fixed an ROI Manager bug that caused an exception when saving an ROI set containing a point selection followed by a composite selection.
  - Thanks to Salim Kanoun, fixed a bug that caused RoiManager.addRoi(roi) calls to be ignored if the ROI was a duplicate.
  - Thanks to 'TMC', fixed a bug that caused the ROI Manager's "Interpolate ROIs" command to throw an exception.
  - Thanks to 'Agnieszka', fixed a bug that caused the ImagePlus.getFileInfo() method to throw a NullPointerException.
  - Thanks to Stein Rorvik, fixed a bug that caused the Macros>Evaluate commands in the text editor to not update the Window menu.
  - Thanks to Norbert Vischer, fixed a bug that caused the macro editor to not always abort any existing macro before running another one.
  - Thanks to Manel Bosch, fixed a 1.52e regression that caused image conversions to RGB to not preserve the color coding.
- 1.52e 11 July 2018
  - The "Threshold" tool no longer resets the display range of 16-bit and 32-bit images.
  - Restored the "Set" button (removed in 1.51r) to the "Threshold" dialog,
  - Thanks to Kai Schleicher, the options string of the FolderOpener.open(dir,options) method can now include a file name filter (example).
  - Added a no-argument constructor to the PointRoi class (example at Help>Examples>JavaScript>Points).
  - Added the Roi.size() method, equivalent to Roi.getPolygon().npoints.
  - Added the FFT.forward(), FFT.multiply(), FFT.inverse() and FFT.filter() methods (JavaScript example).
  - The open("/path/to/file.avi") macro function and the IJ.openImage("/path/to/file.avi") method now open AVI files by default as virtual stacks.
  - Thanks to Volko Straub and Michael Schmid, fixed bugs that caused the ImageProcessor.isInvertedLut() and ImageProcessor.isColorLut() methods to sometimes incorrectly return 'true' with thresholded images.
  - Thanks to Volko Straub, fixed a bug that could cause non-thresholded pixels in 16-bit and 32-bit images to be highlighted in red (example).
  - Thanks to Thomas Boudier and Jan Eglinger, fixed a bug that caused macro file name parameters containing a "]" character to not be read correctly.
  - Thanks to Michael Nonet, fixed a bug caused the median to always be set to zero when measuring line selections.
  - Thanks to Norbert Vischer, fixed a bug that caused errors after running the run("RGB Stack") or run("HSB Stack") macro functions on large images when running Java 8 on macOS.
  - Thanks to Chris Wood and Curtis Rueden, fixed a bug that caused the Image>Stacks>Delete Slice command to deadlock when deleting the last channel of a hyperstack.
  - Thanks to Stein Rorvik, fixed a bug that caused the Process>Math>NaN Background command to throw an exception when attempting to process a non-32-bit stack.
  - Thanks to Stein Rorvik, fixed a bug on Windows that caused text to be pasted into text editor windows at the wrong position.
  - Thanks to Stein Rorvik, fixed a bug that caused print("\n\n") to do nothing instead of outputting two blank lines as expected.
  - Thanks to 'mryellow', fixed a bug that caused polygonal ROIs with more than 65,535 points to not be saved correctly.
  - Thanks to Stein Rorvik, fixed a bug that caused right justified TextRois. to not be displayed correctly if the fill color was not set.
  - Thanks to Lorenzo Cangiano and Jan Eglinger, fixed a 1.52c regression that caused a "Save changes?" dialog to be unexpectedly displayed when closing an image with a multi-point selection.
  - Thanks to Stein Rorvik, fixed a 1.52d regression that caused density calibration to be lost when duplicating 8-bit and 16-bit images.
- 1.52d 11 June 2018
  - The Image>Show Info command no longer truncates one line slice labels to 60 charactera.
  - Thanks to Norbert Vischer, the changeValues() macro function can now be used to replace NaNs. (example).
  - Thanks to Mark Histed, when the shift key is down, the display range is no longer changed when stepping forward/back in a stack.
  - Thanks to Hugo, the Process>FFT command displays an error message if the padded image is going to be 65536x65536 or larger.
  - Thanks to Roger Leigh, the IJ.javaVersion() method works with Java 11.
  - Added the IJ.Roi(x,y,w,h) and IJ.OvalRoi(x,y,w,h) methods.
  - Thanks to Gregor and Michael Schmid, added the ImageProcessor.createMask() method (example).
  - Thanks to David Kysela, added the PointRoi.promptBeforeDeleting(boolean) method (example).
  - Thanks to Laurent Thomas, added the ImagesToStack.run(images) method (example).
  - Added the Tools.getStatistics(double[]) method.
  - Thanks to Ximo Soriano and Michael Schmid, fixed a bug that could cause the newImage("Name","RGB noise",width,height,1) macro function to throw an exception.
  - Thanks to Ruben Gres, fixed a bug that caused the Overlay.duplicate() method to not keep the 'isCalibrationBar' and 'selectable' settings.
  - Thanks to David Schreiner, fixed bugs that caused the File>Import>Image Sequence command to not correctly handle image metadata longer then 60 characters.
  - Thanks to 'yahbai', fixed bugs that caused the saveAs("jpg",path), saveAs("gif",path) and Overlay.measure macro functions to not work in headless mode.
  - Thanks to 'yahbai', fixed a bug that caused the ImagePlus.deleteRoi() method to throw an exception in headless mode.
  - Thanks to Michael Kaul, fixed a 1.52a regression that caused an EOFException when opening Analyze format RGB images.
  - Thanks to Bill Christens-Barry, fixed a 1.52b regression that caused the label set with the setMetadata("Label", label) macro function to not be displayed in the image subtitle of single images.
  - Thanks to Michael Cammer, fixed a 1.52c regression that caused the Image>Crop command to not work as expected with 16-bit images.
  - Thanks to Peter Meijer, fixed a 1.52c regression that could cause ClassCastExceptions when converting RGB images to stacks.
- 1.52c 20 May 2018
  - Activating an ROI in an overlay created by Measure (with ‚ÄúAdd to overlay" enabled), or by the particle analyzer, selects the corresponding row in the "Results" table.
  - ImageJ displays a "Delete Points?" dialog before deleting a multi-point selection with counters.
  - Thanks to "zzyzyman", fixed a bug that caused ImageJ to fail to open odd-width RGB AVI files.
  - Thanks to Merijn van Erp, fixed a bug that caused the CurveFitter.getSortedFitList() method to throw an exception.
  - Thanks to Kees Straatman and Bill Christens-Barry, fixed a bug in the macro interpreter that caused it to not detect a missing '[' after an array variable.
  - Thanks to Mike, fixed a 1.52b regression that caused the AVI Reader to fail with a "Required item ‚Äò00ix‚Äô not found" error.
  - Thanks to Curtis Rueden, fixed a 1.51t regression that caused errors in headless mode macros to throw a HeadlessException.
  - Thanks to 'cortig' and Curtis Rueden, fixed a 1.52b regression that caused the "Apply" option of the Image>Adjust>Threshold command to not behave as expected with 16 and 32 bit images.
- 1.52b 6 May 2018
  - Changed "Random" to "Noise" in the "Fill with:" choice of the File>New>Image dialog box.
  - Thanks to Christian Evenhuis, fixed a bug with the Edit>Selection>Line to Area command that caused the resulting area selection to translated if the source was a polyline or freeline selection less than 5 pixels wide.
  - Added the IJ.javaVersion() method.
  - Thanks to Fred Damen, fixed bugs that caused the Image>Stacks>Tools>Concatenate command to sometimes not work as expected.
  - Thanks to Aryeh Weiss and Michael Schmid, worked around a Linux problem with large images not showing at low magnification.
  - Thanks to Fred Damen, fixed bugs that sometimes caused slices labels of single slice stacks to be lost.
  - Thanks to BrainPatcher and Stefan Helfrich, fixed a bug that caused the ROI Manager's "Multi Measure" command to not work correctly with point selections.
  - Thanks to "zzyzyman", fixed a bug that caused ImageJ to fail to open AVI files that used the 'indx'/'ix00' indexing schema.
  - Thanks to Moses, fixed a 1.52a regression that caused row labels to be omitted from tables created by the ROI Manager's "Multi Measure" command.
  - Thanks to Jerome Mutterer, fixed a 1.52a regression that caused imported Results tables to be displayed without row numbers.
- 1.52a 23 April 2018
  - Thanks to Michael Schmid, added Apply Macro commands to the Edit and contextual (right click pop-up) menus of table windows. Also added the ResultsTable.applyMacro() method (JavaScript example).
  - Thanks to Ron DeSpain, tables created by the Image>Overlay>List Elements command can be renamed "Results" and the values accessed using the getResults() and getStringResult() macro functions.
  - Removed the obsolete Plugins>New>Table command. Macros that use this command will continue to work.
  - Thanks to Michael Kaul, added an optional 5th argument ('stepSize') to the Dialog.addSlider() macro function (example).
  - Thanks to Gabriel Landini, on Linux, added the ‚ÄúCancel button on right‚Äù option to the Edit>Options>Appearance dialog box.
  - The "showRowNumbers" property of the ResultsTable class now defaults to 'false'.
  - Thanks to Adrian Daerr, when importing ".raw" files with dimensions encoded in the name (e.g. "myfile-640x480.raw"), the byte order is set to big-endian if the name ends in "be.raw" and to little-endian if the name ends in "le.raw".
  - Thanks to Arttu Miettinen, imported ".raw" files with dimensions encoded in the name can have a width and/or height less than 10.
  - Thanks to Stein Rorvik, added toScaled(x,y,z) and toUnscaled(x,y,z) macro functions.
  - Added 20 macro functions that work with tables. They operate on the current (frontmost) table or an optional title argument can be provided (e.g., Table.size("My Table")). Examples: Sine/Cosine Tables, Rearrange Table and Access Tables.
    - Table.create() - opens a new table
    - Table.reset() - resets (clears) the table
    - Table.size() - number of rows in the table
    - Table.title() - title of the current table
    - Table.headings() - column headings as a tab-delimited string
    - Table.get(columnName, rowIndex) - returns a numeric value
    - Table.getColumn(columnName) - returns a column as an array
    - Table.getString(columnName, rowIndex) - returns a string value
    - Table.set(columnName, rowIndex, value) - sets numeric or string value
    - Table.setColumn(columnName, array) - sets an array as a column
    - Table.update() - updates table window
    - Table.applyMacro(macro) - applies macro code to table
    - Table.rename(title1, title2) - renames a table
    - Table.save(filePath) - saves the table
    - Table.open(filePath) - opens a table
    - Table.deleteRows(index1, index2) - deletes specified rows
    - Table.renameColumn(oldName, newName) - renames a column
    - Table.deleteColumn(columnName) - deletes specified column
    - Table.showRowNumbers(boolean) - enable/disable row numbers
    - Table.showArrays(titleAndOptions, array1, array2, ...) - displays arrays in a table (like Array.show)
  - Thanks to Trevor Joyce and A Schain, added the macro-callable RoiManager.getIndexesAsString() method.
  - Thanks to Michael Schmid, added the Tools.copyFile(path1,path2) method.
  - Thanks to Salim Kanoun, added the RoiManager.setRoi(roi,index) and Overlay.set(roi,index) methods.
  - Thanks to Fred Damen, fixed a bug that caused the SubHyperstackMaker.makeSubhyperstack() method to not work when extracting a single frame.
  - Thanks to Fred Damen and Michael Schmid, fixed a curve fitter bug that could cause a NullPointerException.
  - Thanks to Norbert Vischer, fixed a bug that caused the File.copy() macro function to not preserve the modification date.
  - Thanks to Philippe Carl, fixed a bug that caused the Image>Hyperstacks>Reduce Dimensionality command to not preserve the "Info" image property.
  - Thanks to Jan Eglinger, fixed bugs that caused the roiManager("open",path) macro function to ignore the roi name and roiManager("save",path) not to be recorded when 'path' ended in ".roi".
  - Thanks to Norbert Vischer, fixed a bug that caused the Image Calculator to not correctly calculate the result when the operation is MULTIPLY or DIVIDE, the 1st image is 8 or 16 bit, the 2nd image is 32 bit and "32-bit result" is unchecked.
  - Thanks to Mark Rivers, fixed a bug that caused ImageJ to not correctly open some uncompressed planar RGB TIFFs.
  - Fixed a 1.51s regression that caused statistical calculations on small 16-bit images or selections to be much slower.
  - Thanks to Michael Schmid, fixed a 1.51o regression that caused the particle analyzer to hang when processong 32-bit images.
  Home