From 9fadd5b2208818f239e4df83b7db341b35748991 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 2 Jul 2021 15:08:49 -0500 Subject: [PATCH 1/5] README: update wiki links --- README.md | 14 +++++++------- pom.xml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 5931b2073..11f87c259 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,16 @@ [![](https://travis-ci.org/imagej/ImageJA.svg?branch=master)](https://travis-ci.org/imagej/ImageJA) -ImageJA is a project that provides a clean [Git](https://imagej.net/Git) -history of the [ImageJ 1.x](https://imagej.net/ImageJ1) project, with a proper -`pom.xml` file so that it can be used with [Maven](https://imagej.net/Maven) -without hassles. +ImageJA is a project that provides a clean [Git](https://imagej.net/develop/git/) +history of the original [ImageJ](https://imagej.net/software/imagej) project, +with a proper `pom.xml` file so that it can be used with +[Maven](https://imagej.net/develop/maven) without hassles. -See the [ImageJA page](https://imagej.net/ImageJA) for details. +See the [ImageJA page](https://imagej.net/libs/imageja) for details. ## Editing this repository Because much of the content in this repository is generated automatically, depending on the type of change you want to make your edit should go in one of three places: -* Source file content changes (e.g. bug fixes) should go to the [ImageJ1 repository](https://github.com/imagej/imagej1). -* Source file *location* changes (e.g. moving a file to the correct package) go in the [IJ1-builds repository](https://github.com/imagej/ij1-builds). +* Source file content changes (e.g. bug fixes) should go to the [imagej1 repository](https://github.com/imagej/imagej1). +* Source file *location* changes (e.g. moving a file to the correct package) go in the [ij1-builds repository](https://github.com/imagej/ij1-builds). * Changes to the build structure (e.g. `pom.xml` updates) can be done directly in this repository. diff --git a/pom.xml b/pom.xml index 74cd7a108..e7e813102 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ net.imagej ij - 1.53j + 1.53k-SNAPSHOT ImageJ ImageJ is an open source Java image processing program inspired by NIH Image for the Macintosh. From c9017db48e63942b2cd71b650eba7310ea76a24f Mon Sep 17 00:00:00 2001 From: Wayne Rasband Date: Tue, 6 Jul 2021 18:44:06 +0000 Subject: [PATCH 2/5] =?UTF-8?q?=20=20=E2=80=A2=201.53k=206=20July=202021?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20Mike=20Nelson,=2016-b?= =?UTF-8?q?it=20images=20are=20inverted=20using=20the=20full=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20pixel=20value=20range=20(0-65535)=20or,=20if=20s?= =?UTF-8?q?et,=20using=20the=20"Unsigned=20=20=20=20=20=20=20=20=2016-bit?= =?UTF-8?q?=20range"=20in=20the=20"Set"=20option=20of=20the=20Image>Adjust?= =?UTF-8?q?>=20=20=20=20=20=20=20=20=20Brightness/Contrast=20dialog.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Alan=20Brooks,=20added?= =?UTF-8?q?=20the=20macOS-specific=20MacAdapter9=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20plugin,=20which,=20on=20Java=209=20or=20later,=20supports=20?= =?UTF-8?q?drag=20and=20drop=20on=20=20=20=20=20=20=20=20=20the=20ImageJ.a?= =?UTF-8?q?pp=20and=20the=20"About=20ImageJ"=20command.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Romain=20Guiet,=20the=20ROI=20Mana?= =?UTF-8?q?ger's=20"Associate=20'Show=20All'=20=20=20=20=20=20=20=20=20ROI?= =?UTF-8?q?s=20with=20slices"=20option=20is=20now=20enabled=20by=20default?= =?UTF-8?q?.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Gilles=20Carpen?= =?UTF-8?q?tier,=20the=20particle=20analyzer=20now=20assumes=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20the=20threshold=20is=20255=20unless=20"Black=20b?= =?UTF-8?q?ackground"=20is=20not=20set,=20the=20=20=20=20=20=20=20=20=20im?= =?UTF-8?q?age=20does=20not=20have=20an=20inverted=20LUT=20and=20fewer=20t?= =?UTF-8?q?han=20half=20the=20=20=20=20=20=20=20=20=20pixels=20have=20a=20?= =?UTF-8?q?value=20of=20zero,=20in=20which=20case=20the=20threshold=20is?= =?UTF-8?q?=20set=20=20=20=20=20=20=20=20=20to=20zero.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20'pdd2110',=20added=20the=20Propert?= =?UTF-8?q?y.setSliceLabel(label)=20=20=20=20=20=20=20=20=20macro=20functi?= =?UTF-8?q?on.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'John=20D.',?= =?UTF-8?q?=20added=20the=20GenericDialog.addButton()=20method=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20'Oodegard',=20fixed=20a=20bug=20that=20caused=20the=20?= =?UTF-8?q?"Auto-next=20=20=20=20=20=20=20=20=20slice"=20option=20of=20the?= =?UTF-8?q?=20point=20tool=20to=20not=20work=20as=20expected=20with=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20hyperstacks.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bug=20that=20c?= =?UTF-8?q?aused=20NaN=20values=20in=20=20=20=20=20=20=20=20=20tables=20re?= =?UTF-8?q?ad=20from=20a=20file=20to=20be=20strings=20instead=20of=20numbe?= =?UTF-8?q?rs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Gabriel=20Lan?= =?UTF-8?q?dini=20and=20Michael=20Schmid,=20fixed=20a=20bug=20that=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20caused=20the=20"Top=20Hat"=20filter=20to?= =?UTF-8?q?=20fail=20when=20applying=20it=20to=20a=20stack=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20one=20slice=20at=20a=20time.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20Image>=20=20=20=20=20=20=20=20=20Stack?= =?UTF-8?q?s>Set=20Slice=20command=20to=20not=20work=20as=20expected=20wit?= =?UTF-8?q?h=20=20=20=20=20=20=20=20=20hyperstacks.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20hyperstacks=20=20=20=20=20=20=20=20=20to=20b?= =?UTF-8?q?e=20displayed=20incorrectly=20if=20the=20Z=20or=20T=20sliders?= =?UTF-8?q?=20where=20moved=20=20=20=20=20=20=20=20=20quickly=20and=20the?= =?UTF-8?q?=20images=20were=20slow=20to=20load.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20sometimes=20caused=20the=20=20=20=20=20=20=20=20=20Wi?= =?UTF-8?q?ndowManager.getIDList()=20method=20to=20throw=20an=20exception.?= =?UTF-8?q?=20=20=20=E2=80=A2=201.53j=2013=20May=202021=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20'VolkerH',=20the=20table=20created?= =?UTF-8?q?=20by=20Image>Overlay>List=20=20=20=20=20=20=20=20=20Elements?= =?UTF-8?q?=20now=20displays=20row=20numbers=20and=20arrow=20selection=20'?= =?UTF-8?q?X'=20and=20=20=20=20=20=20=20=20=20'Y'=20values=20are=20the=20c?= =?UTF-8?q?oordinates=20of=20the=20arrow=20tip.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20added=20the=20Color?= =?UTF-8?q?.setForegroundValue()=20=20=20=20=20=20=20=20=20and=20Color.set?= =?UTF-8?q?BackgroundValue()=20macro=20functions=20and=20the=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Toolbar.setForegroundValue(),=20Toolbar.setBackg?= =?UTF-8?q?roundValue(),=20=20=20=20=20=20=20=20=20ImageProcessor.setGloba?= =?UTF-8?q?lForegroundColor()=20and=20=20=20=20=20=20=20=20=20ImageProcess?= =?UTF-8?q?or.setGlobalBackgroundColor()=20methods.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added=20the=20IJ?= =?UTF-8?q?.checksum()=20macro=20=20=20=20=20=20=20=20=20function,=20which?= =?UTF-8?q?=20returns=20the=20MD5=20(or=20SHA-256)=20checksum=20from=20a?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20string=20or=20file=20(example).=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,?= =?UTF-8?q?=20added=20the=20Fit.doWeightedFit=20=20=20=20=20=20=20=20=20(e?= =?UTF-8?q?quation,x,y,weights[,initialGuesses])=20macro=20function.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20a?= =?UTF-8?q?dded=20the=20Plot.removeNaNs=20macro=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?function.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent?= =?UTF-8?q?=20Thomas,=20added=20support=20for=20scrollbars=20in=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20GenericDialog=20TextAreas.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Fred=20Damen,=20added=20the=20Zoom?= =?UTF-8?q?.in(imp),=20Zoom.out(imp),=20=20=20=20=20=20=20=20=20Zoom.unzoo?= =?UTF-8?q?m(imp)=20and=20Zoom.maximize(imp)=20methods.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20John=20Dunsmuir,=20added=20the=20P?= =?UTF-8?q?ointRoi.addPoint=20=20=20=20=20=20=20=20=20(x,y,position)=20met?= =?UTF-8?q?hod.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fred=20Damen?= =?UTF-8?q?,=20fixed=20bugs=20that=20caused=20programmatic=20image=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20window=20zooming=20to=20not=20work=20relia?= =?UTF-8?q?bly=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?Michael=20Schmid,=20fixed=20a=20bug=20with=20HTMLDialogs=20that?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20caused=20the=20initial=20scroll=20po?= =?UTF-8?q?sition=20to=20be=20at=20the=20end=20when=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20displaying=20more=20text=20than=20what=20fits=20in=20the?= =?UTF-8?q?=20window.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'Sethu?= =?UTF-8?q?r',=20fixed=20bugs=20that=20caused=20DICOM=20files=20using=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20newer=20VRs=20(from=202014=20and=20late?= =?UTF-8?q?r),=20such=20as=20UC=20and=20UR,=20to=20fail.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Bruno=20Vellutini,=20fixed=20a=20b?= =?UTF-8?q?ug=20that=20caused=20images=20=20=20=20=20=20=20=20=20rotated?= =?UTF-8?q?=20interactively=20using=20the=20"Enlarge=20image"=20and=20"Pre?= =?UTF-8?q?view"=20=20=20=20=20=20=20=20=20options=20to=20not=20have=20the?= =?UTF-8?q?=20grid=20lines=20removed=20after=20the=20rotation.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20the=20=20=20=20=20=20=20=20=20Pref?= =?UTF-8?q?s.savePreferences()=20method=20to=20throw=20a=20null=20pointer?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20exception=20if=20the=20"ImageJ"=20wi?= =?UTF-8?q?ndow=20was=20not=20open.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20caused=20the?= =?UTF-8?q?=20slice=20label=20=20=20=20=20=20=20=20=20to=20be=20incorrect?= =?UTF-8?q?=20after=20importing=20an=20image=20sequence=20and=20"Start"=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20was=20greater=20than=201=20and=20"Count?= =?UTF-8?q?"=20was=201.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stei?= =?UTF-8?q?n=20Rorvik,=20fixed=20a=20bug=20that=20caused=20the=20Images=20?= =?UTF-8?q?to=20=20=20=20=20=20=20=20=20Stack=20command=20to=20ignore=20sl?= =?UTF-8?q?ice=20labels=20when=20the=20"Use=20titles=20as=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20labels"=20option=20was=20not=20enabled.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20'ghf',=20worked=20around=20a?= =?UTF-8?q?=20Fiji=20bug=20that=20caused=20the=20File>=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Import>Image=20Sequence=20command=20to=20fail=20if=20t?= =?UTF-8?q?he=20folder=20contained=20a=20=20=20=20=20=20=20=20=20".h5"=20f?= =?UTF-8?q?ile.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mut?= =?UTF-8?q?terer,=20fixed=20bugs=20that=20caused=20the=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Stack.setDisplayMode(),=20Stack.setSlice(),=20Stack.se?= =?UTF-8?q?tFrame()=20and=20=20=20=20=20=20=20=20=20Stack.setPosition()=20?= =?UTF-8?q?macro=20functions=20to=20not=20work=20as=20expected=20in=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20batch=20mode,=20and=20the=20ImagePlus.setD?= =?UTF-8?q?isplayMode(),=20ImagePlus.setZ=20=20=20=20=20=20=20=20=20(),=20?= =?UTF-8?q?ImagePlus.setSetT()=20and=20ImagePlus.setPosition()=20methods?= =?UTF-8?q?=20to=20=20=20=20=20=20=20=20=20not=20work=20as=20expected=20wh?= =?UTF-8?q?en=20the=20image=20was=20not=20displayed.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Nicolas=20Montes,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20particle=20=20=20=20=20=20=20=20=20ana?= =?UTF-8?q?lyzer=20to=20throw=20an=20exception=20when=20both=20the=20"Comp?= =?UTF-8?q?osite=20ROIs"=20=20=20=20=20=20=20=20=20and=20"Show:=20Outlines?= =?UTF-8?q?"=20options=20where=20used.=20=20=20=20=20=20=20=E2=96=A1=20Tha?= =?UTF-8?q?nks=20to=20Christian=20Kremser,=20fixed=20a=201.53i=20regressio?= =?UTF-8?q?n=20that=20=20=20=20=20=20=20=20=20caused=20macro=20statements?= =?UTF-8?q?=20like=20"n=3DDialog.getNumber()+1"=20to=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20generate=20and=20error.=20=20=20=20=20=20=20=E2=96=A1=20T?= =?UTF-8?q?hanks=20to=20Christian=20Tischer,=20fixed=20a=20regression=20th?= =?UTF-8?q?at=20caused=20the=20=20=20=20=20=20=20=20=20ROI=20Manager=20to?= =?UTF-8?q?=20not=20set=20the=20hyperstack=20position=20of=20ROIs=20withou?= =?UTF-8?q?t=20=20=20=20=20=20=20=20=20a=20c,z,t=20position.=20=20=20?= =?UTF-8?q?=E2=80=A2=201.53i=2024=20March=202021=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20added=20the=20"A?= =?UTF-8?q?pply=20LUTs"=20checkbox=20to=20=20=20=20=20=20=20=20=20the=20co?= =?UTF-8?q?mmand=20finder=20(Plugins>Utilities>Find=20Commands).=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20the?= =?UTF-8?q?=20current=20line=20number,=20or=20=20=20=20=20=20=20=20=20sele?= =?UTF-8?q?ction=20range,=20in=20Editor,=20Table=20or=20Log=20windows,=20i?= =?UTF-8?q?s=20displayed=20=20=20=20=20=20=20=20=20in=20the=20status=20bar?= =?UTF-8?q?.=20The=20total=20number=20of=20lines=20is=20displayed=20after?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Select=20All.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20ImageJ=20now=20c?= =?UTF-8?q?orrects=20the=20orientation=20=20=20=20=20=20=20=20=20of=20phon?= =?UTF-8?q?e=20camera=20photos.=20Does=20not=20work=20on=20Fiji=20because?= =?UTF-8?q?=20it=20is=20=20=20=20=20=20=20=20=20missing=20Exif=5FReader.ja?= =?UTF-8?q?r.=20=20=20=20=20=20=20=E2=96=A1=20Improved=20the=20Plugins>Uti?= =?UTF-8?q?lities>Benchmark=20command.=20It=20now=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20suppresses=20subordinate=20status=20bar=20messages=20and=20d?= =?UTF-8?q?isplays=20=20=20=20=20=20=20=20=20subordinate=20progress=20bars?= =?UTF-8?q?=20as=20dots.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Pet?= =?UTF-8?q?er=20Haub,=20the=20particle=20analyzer=20displays=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20"ParticleAnalyzer:=20threshold=20has=20not=20set?= =?UTF-8?q?;=20assumed=20to=20be=20=20=20=20=20=20=20=20=20min-max"=20in?= =?UTF-8?q?=20the=20Log=20window=20if=20it=20was=20not=20called=20from=20a?= =?UTF-8?q?=20macro=20=20=20=20=20=20=20=20=20and=20a=20threshold=20was=20?= =?UTF-8?q?not=20set.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Lauren?= =?UTF-8?q?t=20Thomas,=20File>Save=20As>Image=20Sequence,=20when=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20"Use=20slice=20labels=20as=20names"=20is=20en?= =?UTF-8?q?abled,=20now=20supports=20file=20names=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20as=20long=20as=20111=20characters,=20excluding=20the=20exten?= =?UTF-8?q?sion.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20S?= =?UTF-8?q?chmid,=20ImageJ=20displays=20"horizontal"=20in=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20image=20info=20line=20of=20column=20average?= =?UTF-8?q?=20plots=20and=20"vertical"=20with=20row=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20average=20plots.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Jerome=20Mutterer,=20added=20the=20showStatus=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20(message,options)=20macro=20function=20and=20?= =?UTF-8?q?the=20IJ.showStatus=20=20=20=20=20=20=20=20=20(message,options)?= =?UTF-8?q?=20method=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Added=20?= =?UTF-8?q?the=20Overlay.update(index)=20macro=20function.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Added=20the=20ImagePlus.setBorderColor()=20me?= =?UTF-8?q?thod,=20used=20by=20Image>=20=20=20=20=20=20=20=20=20Color>Spli?= =?UTF-8?q?t=20Channels=20to=20colorize=20image=20borders.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,=20added=20the?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20ImageStack.getShortStackLabel(n,max)?= =?UTF-8?q?,=20Zoom.toSelection(imp),=20=20=20=20=20=20=20=20=20Zoom.set(i?= =?UTF-8?q?mp,mag)=20and=20Zoom.set(imp,mag,x,y)=20methods.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Herbie=20Gluender,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20caused=20the=20status=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20bar=20to=20stop=20being=20updated=20after=20activating=20an?= =?UTF-8?q?=20overlay=20=20=20=20=20=20=20=20=20selection.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Fred=20Damen,=20fixed=20a=20bug?= =?UTF-8?q?=20with=20one=20slice=20stacks=20that=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20caused=20the=20slice=20label=20to=20not=20be=20displayed=20o?= =?UTF-8?q?n=20the=20image=20info=20=20=20=20=20=20=20=20=20line=20or=20in?= =?UTF-8?q?=20the=20Image>Show=20Info=20window.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Antoneta,=20fixed=20a=20bug=20with=20?= =?UTF-8?q?the=20Flatten=20command=20that=20=20=20=20=20=20=20=20=20caused?= =?UTF-8?q?=20multi-point=20selections=20on=20stacks=20to=20lose=20counter?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20information.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Herbie=20Gluender,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20unexpected=20=20=20=20=20=20=20=20=20overlay?= =?UTF-8?q?=20entries=20after=20running=20the=20particle=20analyzer=20with?= =?UTF-8?q?=20the=20=20=20=20=20=20=20=20=20"Add=20to=20manager"=20option?= =?UTF-8?q?=20in=20a=20batch=20mode=20macro.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Norbert=20Vischer,=20fixed=20a=20bug=20that=20?= =?UTF-8?q?caused=20string=20=20=20=20=20=20=20=20=20functions=20added=20i?= =?UTF-8?q?n=20ImageJ=201.52t=20(s.contains(),=20s.endsWith(),=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20s.indexOf(),=20s.lastIndexOf(),=20s.lengths.star?= =?UTF-8?q?tsWith())=20to=20return=20=20=20=20=20=20=20=20=20a=20string=20?= =?UTF-8?q?instead=20of=20a=20number=20when=20used=20in=20an=20assignment?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20statement.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Robert=20Haase,=20fixed=20a=20bug=20w?= =?UTF-8?q?ith=20the=20roiManager=20=20=20=20=20=20=20=20=20("select",inde?= =?UTF-8?q?x)=20macro=20function=20that=20caused=20it=20to=20sometimes=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20restore=20ROIs=20at=20the=20wrong=20pos?= =?UTF-8?q?ition.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20?= =?UTF-8?q?Thomas,=20fixed=20a=20bug=20that=20caused=20the=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20ContrastEnhancer.stretchHistogram()=20methoid=20to?= =?UTF-8?q?=20not=20work=20as=20=20=20=20=20=20=20=20=20expected=20with=20?= =?UTF-8?q?stacks.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael?= =?UTF-8?q?=20Schmid,=20fixed=20a=20bug=20that=20caused=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20WaitForUserDialogs=20to=20not=20be=20scaled=20on=20hig?= =?UTF-8?q?h-resolution=20screens.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Stein=20Rorvik,=20fixed=20a=20macro=20interpreter=20bug?= =?UTF-8?q?=20that=20=20=20=20=20=20=20=20=20caused=20if=20statements=20us?= =?UTF-8?q?ing=20string=20functions=20to=20sometimes=20fail=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20(e.g.,=20"if=20(getTitle.length>10)=20...").=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20f?= =?UTF-8?q?ixed=20a=20bug=20that=20caused=20the=20first=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20column=20of=20tables=20copied=20to=20the=20clipboard?= =?UTF-8?q?=20to=20be=20missing=20if=20the=20=20=20=20=20=20=20=20=20table?= =?UTF-8?q?=20did=20not=20have=20row=20numbers=20and=20the=20"Copy=20row?= =?UTF-8?q?=20numbers"=20=20=20=20=20=20=20=20=20option=20in=20Edit>Option?= =?UTF-8?q?s>Input/Output=20was=20not=20enabled.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Shayna=20Sosnowik,=20fixed=20a=201.53?= =?UTF-8?q?g=20regression=20that=20caused=20=20=20=20=20=20=20=20=20the=20?= =?UTF-8?q?"Properties..."=20command=20in=20the=20ROI=20Manager=20to=20not?= =?UTF-8?q?=20work=20as=20=20=20=20=20=20=20=20=20expected=20when=20changi?= =?UTF-8?q?ng=20the=20stroke=20color.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Stein=20Rorvik,=20fixed=20a=201.53i=20regression=20th?= =?UTF-8?q?at=20caused=20=20=20=20=20=20=20=20=20the=20str.trim()=20macro?= =?UTF-8?q?=20function=20to=20sometimes=20fail.=20=20=20=E2=80=A2=201.53h?= =?UTF-8?q?=2004=20February=202021=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Laura=20Shankman,=20added=20the=20Image>Overlay>Measure?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Overlay=20command.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20added=20the?= =?UTF-8?q?=20Help>Examples>Macro>Colors=20=20=20=20=20=20=20=20=20of=2020?= =?UTF-8?q?21=20example,=20which=20runs=20more=20smoothly=20with=20ImageJ?= =?UTF-8?q?=201.53h20=20=20=20=20=20=20=20=20=20or=20later,=20where=20ROIs?= =?UTF-8?q?=20are=20not=20drawn=20in=20batch=20mode.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20Help>Examples>JavaScript>Dialog=20Dem?= =?UTF-8?q?o=20and=20Help>=20=20=20=20=20=20=20=20=20Examples>Macro>Save?= =?UTF-8?q?=20All=20Images=20examples.=20=20=20=20=20=20=20=E2=96=A1=20Tha?= =?UTF-8?q?nks=20to=20Christophe=20Leterrier,=20Image>Type>RGB=20Color=20c?= =?UTF-8?q?onverts=20=20=20=20=20=20=20=20=20hyperstacks=20of=20HSB=20stac?= =?UTF-8?q?ks=20to=20stacks=20of=20RGB=20images.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Alex=20Zwetsloot,=20line=20selections?= =?UTF-8?q?=20are=20no=20longer=20=20=20=20=20=20=20=20=20activated=20by?= =?UTF-8?q?=20double=20clicks=20with=20the=20segmented=20and=20freehand=20?= =?UTF-8?q?line=20=20=20=20=20=20=20=20=20tools.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added=20the=20Co?= =?UTF-8?q?lor.set(string),=20=20=20=20=20=20=20=20=20Color.set(number),?= =?UTF-8?q?=20Color.foreground,=20Color.background,=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Color.setForeground(r,g,b),=20Color.setBackground(r,b,g),?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Color.setForeground(string),Color.se?= =?UTF-8?q?tBackground(string),=20=20=20=20=20=20=20=20=20Color.toString(r?= =?UTF-8?q?,g,b),=20Color.toArray(color),=20Color.setLut(reds,=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20greens,=20blues)=20and=20Color.getLut(reds,=20gr?= =?UTF-8?q?eens,=20blues)=20macro=20=20=20=20=20=20=20=20=20functions.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Raniere=20Silva,=20?= =?UTF-8?q?added=20the=20Overlay.xor()=20macro=20=20=20=20=20=20=20=20=20f?= =?UTF-8?q?unction.=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20Overlay.?= =?UTF-8?q?fill()=20macro=20function.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Stein=20Rorvik,=20added=20the=20File.isFile()=20macro?= =?UTF-8?q?=20function.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Rani?= =?UTF-8?q?ere=20Silva,=20added=20the=20getDir("cwd")=20("current=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20working=20directory")=20macro=20function.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Added=20the=20Roi.getFloatBounds(?= =?UTF-8?q?)=20and=20Image.title=20macro=20functions.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Alan=20Brooks,=20added=20the=20Toolba?= =?UTF-8?q?r.setIcon()=20method=20(=20=20=20=20=20=20=20=20=20example1,=20?= =?UTF-8?q?example2,=20example3,=20example4.=20example5).=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Added=20the=20Overlay.xor()=20and=20Roi.xor()?= =?UTF-8?q?=20methods.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Rober?= =?UTF-8?q?t=20Kasumba,=20added=20the=20OverlayBrushTool.setWidth()=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20method.=20=20=20=20=20=20=20=E2=96=A1=20Th?= =?UTF-8?q?anks=20to=20Laurent=20Thomas,=20added=20the=20getColumn(String)?= =?UTF-8?q?,=20=20=20=20=20=20=20=20=20getColumnAsStrings(String)=20and=20?= =?UTF-8?q?getActiveTable()=20methods=20to=20the=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20ResultsTable=20class.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Dyuks,=20fixed=20a=20bug=20that=20caused=20the=20TIFF?= =?UTF-8?q?=20reader=20to=20=20=20=20=20=20=20=20=20sometimes=20throw=20an?= =?UTF-8?q?=20exception=20when=20opening=20LZW-compressed=2016-bit=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20TIFFs.=20=20=20=20=20=20=20=E2=96=A1=20Tha?= =?UTF-8?q?nks=20to=20Michael=20Schmid,=20fixed=20a=20bug=20that=20could?= =?UTF-8?q?=20cause=20the=20=20=20=20=20=20=20=20=20JpegWriter=20to=20thro?= =?UTF-8?q?w=20a=20NullPointerException=20if=20JAI=20ImageIO=20was=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20installed.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Michael=20Cammer,=20fixed=20a=20bug=20that=20c?= =?UTF-8?q?aused=20the=20=20=20=20=20=20=20=20=20selectWindow(title)=20mac?= =?UTF-8?q?ro=20function=20to=20not=20work=20with=20minimized=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20windows=20on=20Windows.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20all=20tools=20to?= =?UTF-8?q?=20stop=20working=20after=20=20=20=20=20=20=20=20=20attempting?= =?UTF-8?q?=20to=20use=20the=20polygon,=20segmented=20line=20or=20angle=20?= =?UTF-8?q?tool=20on=20=20=20=20=20=20=20=20=20ImageJ.JS.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Gabriel=20Landini,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20caused=20the=20B&C=20tool=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20to=20sometimes=20perform=20an=20Undo=20operation=20on=20R?= =?UTF-8?q?GB=20images.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Rani?= =?UTF-8?q?ere=20Silva=20and=20Jan=20Eglinger,=20fixed=20a=20bug=20that=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20caused=20an=20exception=20when=20saving?= =?UTF-8?q?=20the=20table=20created=20by=20Image>=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20Overlay>List=20Elements=20in=20.csv=20format.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Raniere=20Silva,=20fixed=20bugs?= =?UTF-8?q?=20that=20caused=20the=20open(path)=20=20=20=20=20=20=20=20=20a?= =?UTF-8?q?nd=20roiManager(=E2=80=9COpen=E2=80=9D,path)=20macro=20function?= =?UTF-8?q?s,=20in=20macros=20run=20from=20=20=20=20=20=20=20=20=20the=20c?= =?UTF-8?q?ommand=20line,=20to=20not=20work=20as=20expected=20when=20?= =?UTF-8?q?=E2=80=98path=E2=80=99=20was=20just=20=20=20=20=20=20=20=20=20a?= =?UTF-8?q?=20file=20name.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20M?= =?UTF-8?q?ichael=20Schmid,=20fixed=20bugs=20that=20caused=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20roi.getBounds()=20method=20and=20getSelection?= =?UTF-8?q?Bounds()=20macro=20function=20=20=20=20=20=20=20=20=20to=20not?= =?UTF-8?q?=20work=20as=20expected=20with=20polyline,=20point=20and=20stra?= =?UTF-8?q?ight=20line=20=20=20=20=20=20=20=20=20selections=20on=20images?= =?UTF-8?q?=20zoomed=20more=20than=20150%.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Christian=20Tischer,=20fixed=20a=20bug=20that?= =?UTF-8?q?=20caused=20the=20Image>=20=20=20=20=20=20=20=20=20Overlay>List?= =?UTF-8?q?=20Elements=20command=20to=20incorrectly=20report=20positions?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20of=20time=20series=20overlays.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,=20fi?= =?UTF-8?q?xed=20a=20bug=20that=20sometimes=20caused=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20GenericDialogs=20to=20not=20open=20URLs=20bound=20to=20"H?= =?UTF-8?q?elp"=20buttons.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20J?= =?UTF-8?q?an=20Eglinger,=20fixed=20a=20bug=20that=20caused=20the=20select?= =?UTF-8?q?ion=20=20=20=20=20=20=20=20=20brush=20tool=20to=20behave=20inco?= =?UTF-8?q?nsistantly=20when=20the=20brush=20width=20was=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20odd=20and=20the=20image=20was=20hightly=20magnified.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Christian=20Tisc?= =?UTF-8?q?her,=20fixed=20a=20bug=20that=20caused=20overlay=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20calibration=20bars=20to=20be=20displayed=20incorrec?= =?UTF-8?q?tly=20on=20images=20zoomed=20=20=20=20=20=20=20=20=20less=20tha?= =?UTF-8?q?n=20100%.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert?= =?UTF-8?q?=20Vischer,=20fixed=20a=20bug=20that=20caused=20the=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20selectWindow("Results")=20macro=20function=20to?= =?UTF-8?q?=20sometimes=20not=20work=20as=20=20=20=20=20=20=20=20=20expect?= =?UTF-8?q?ed.=20=20=20=20=20=20=20=E2=96=A1=20Fixed=20a=201.53h17=20regre?= =?UTF-8?q?ssion,=20caused=20by=20building=20ij.jar=20for=20Java=20=20=20?= =?UTF-8?q?=20=20=20=20=20=208,=20that=20prevented=20Fiji=20from=20launchi?= =?UTF-8?q?ng.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Dominik=20Sch?= =?UTF-8?q?ienstock,=20fixed=20a=201.52q=20regression=20that=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20caused=20some=20filters=20to=20throw=20exception?= =?UTF-8?q?s=20in=20headless=20mode.=20=20=20=E2=80=A2=201.53g=204=20Decem?= =?UTF-8?q?ber=202020=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome?= =?UTF-8?q?=20Mutterer,=20added=20a=20"Run"=20button=20to=20Editor=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20windows=20when=20the=20file=20name=20ends?= =?UTF-8?q?=20with=20".ijm",=20".js",=20".bsh"=20or=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20".py".=20=20=20=20=20=20=20=E2=96=A1=20The=20"Overlay=20M?= =?UTF-8?q?asks"=20option=20in=20the=20particle=20anayzer=20now=20displays?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20masks=20in=20colors=20taken=20from?= =?UTF-8?q?=20the=20Glasbey=20LUT.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20J=20Xiong,=20added=20"Overlay"=20and=20"Composite=20ROI?= =?UTF-8?q?s"=20=20=20=20=20=20=20=20=20checkboxes=20to=20the=20particle?= =?UTF-8?q?=20analyzer=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Michael=20Doube,=20added=20an=20IntProcessor=20class=20?= =?UTF-8?q?that=20=20=20=20=20=20=20=20=20provides=20support=20for=20signe?= =?UTF-8?q?d=2032-bit=20int=20images=20(example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Christian=20Tischer,=20the=20Recorder?= =?UTF-8?q?=20supports=20Python.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20'Eljonco',=20the=20"ExpandableArrays"=20macro=20option=20i?= =?UTF-8?q?s=20now=20=20=20=20=20=20=20=20=20enabled=20by=20default.=20Tha?= =?UTF-8?q?nks=20to=20Peter=20Haub,=20added=20the=20String.pad=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20(n,length)=20macro=20function.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Wilhelm=20Burger,=20added=20the=20?= =?UTF-8?q?addEnumChoice()=20and=20=20=20=20=20=20=20=20=20getNextEnumChoi?= =?UTF-8?q?ce()=20methods=20to=20the=20GenericDialog=20class=20(example=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20).=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20'davidC',=20added=20the=20ij.gui.HistogramPlot=20clas?= =?UTF-8?q?s.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik?= =?UTF-8?q?,=20added=20the=20ImageCanvas.setLongClickDelay=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20()=20and=20Toolbar.setLongClickDelay()=20methods.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'Dr.=20Njitram',?= =?UTF-8?q?=20added=20the=20recordable=20SubstackMaker.run=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20(imp,rangeOrList)=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Albert=20Cardona,=20modified=20the=20?= =?UTF-8?q?ImageJ.keyPressed()=20=20=20=20=20=20=20=20=20method=20so=20tha?= =?UTF-8?q?t,=20if=20the=20KeyEvent=20is=20consumed,=20it=20returns=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20immediately.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Wei=20Ouyang,=20replaced=20the=20"Duplicate...?= =?UTF-8?q?"=20command=20in=20=20=20=20=20=20=20=20=20the=20default=20imag?= =?UTF-8?q?e=20contextual=20menu=20with=20"Duplicate=20Image",=20which=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20ignores=20any=20selection=20and=20dupli?= =?UTF-8?q?cates=20the=20entire=20image.=20=20=20=20=20=20=20=E2=96=A1=20T?= =?UTF-8?q?hanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20sometim?= =?UTF-8?q?es=20caused=20=20=20=20=20=20=20=20=20images=20to=20be=20incorr?= =?UTF-8?q?ectly=20added=20to=20the=20Window=20menu.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20the=20File>Show=20=20=20=20=20=20=20=20=20Folder?= =?UTF-8?q?>Image=20command=20to=20not=20work=20with=20stacks=20opened=20u?= =?UTF-8?q?sing=20File>=20=20=20=20=20=20=20=20=20Import>Image=20Sequence.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'muniak'=20and?= =?UTF-8?q?=20'mountain=5Fman',=20fixed=20a=20bug=20that=20caused=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20the=20Scaler.resize()=20method=20to=20return?= =?UTF-8?q?=20an=20image=20with=20a=20=20=20=20=20=20=20=20=20calibration?= =?UTF-8?q?=20of=20Inf=20x=20Inf.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20caused=20a?= =?UTF-8?q?=20list=20of=2012=20=20=20=20=20=20=20=20=20'w'=20letters=20to?= =?UTF-8?q?=20appear=20after=20the=20Group=20entry=20in=20the=20ROI=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20Properties=20dialog=20when=20it=20was=20ca?= =?UTF-8?q?lled=20from=20a=20macro.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20'davidC',=20fixed=20a=20bug=20that=20caused=20batch=20m?= =?UTF-8?q?ode=20macros=20=20=20=20=20=20=20=20=20that=20created=20hundred?= =?UTF-8?q?s=20of=20histograms=20to=20fail.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20'chrk139',=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20the=20drawOval()=20and=20=20=20=20=20=20=20=20=20fillOval()?= =?UTF-8?q?=20macro=20functions=20to=20not=20work=20for=20images=20larger?= =?UTF-8?q?=20than=202=20=20=20=20=20=20=20=20=20^29=20pixels.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,=20fixed=20?= =?UTF-8?q?a=20bug=20where=20changing=20the=20group=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20attribute=20from=20a=20group>0=20to=200=20in=20the=20ROI?= =?UTF-8?q?=20Manager>Properties=20=20=20=20=20=20=20=20=20dialog=20did=20?= =?UTF-8?q?not=20work=20as=20expected.=20=20=20=20=20=20=20=E2=96=A1=20Tha?= =?UTF-8?q?nks=20to=20Gilles=20Vanwalleghem,=20fixed=20a=20bug=20that=20ca?= =?UTF-8?q?used=20the=20run=20=20=20=20=20=20=20=20=20(=E2=80=9CReduce=20D?= =?UTF-8?q?imensionality=E2=80=A6=E2=80=9D)=20macro=20function=20to=20thro?= =?UTF-8?q?w=20a=20null=20=20=20=20=20=20=20=20=20pointer=20exception=20in?= =?UTF-8?q?=20Fiji=20headless=20mode.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Laurent=20Thomas=20and=20Hollandi=20Reka,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20=20=20=20=20=20=20=20=20caused=20the=20ROI=20gr?= =?UTF-8?q?oup=20of=20saved=20composite=20selections=20to=20not=20be=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20restored.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Martin=20Hohne,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20the=20getValue=20=20=20=20=20=20=20=20=20("X")=20and=20getVa?= =?UTF-8?q?lue("Y")=20macro=20functions=20to=20not=20work=20as=20expected?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20with=20line=20selections.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20J=20Xiong,=20fixed=20a=20?= =?UTF-8?q?v1.50=20regression=20that=20caused=20the=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20particle=20analyzer=20to=20not=20work=20as=20expected=20w?= =?UTF-8?q?hen=20when=20using=20the=20=20=20=20=20=20=20=20=20=E2=80=9CExc?= =?UTF-8?q?lude=20on=20edges=E2=80=9D=20option=20and=20a=20composite=20sel?= =?UTF-8?q?ection.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fred=20Da?= =?UTF-8?q?men,=20fixed=20a=201.53c=20regression=20that=20caused=20the=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20GenericDialog.getFont()=20method=20to?= =?UTF-8?q?=20sometimes=20return=20null.=20=20=20=20=20=20=20=E2=96=A1=20F?= =?UTF-8?q?ixed=20a=20regression=20that=20caused=20the=20particle=20analyz?= =?UTF-8?q?er=20to=20=20=20=20=20=20=20=20=20sometimes=20fail=20on=20MacOS?= =?UTF-8?q?.=20=20=20=E2=80=A2=201.53f=2025=20October=202020=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Wei=20Ouyang,=20tool=20bar?= =?UTF-8?q?=20and=20image=20popup=20menus=20are=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?triggered=20by=20long=20presses=20in=20addition=20to=20right=20?= =?UTF-8?q?clicks,=20needed=20=20=20=20=20=20=20=20=20because=20right=20cl?= =?UTF-8?q?icks=20are=20not=20normally=20possible=20when=20ImageJ.JS=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20is=20running=20on=20Android=20and=20iOS=20?= =?UTF-8?q?devices.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Wei=20Ou?= =?UTF-8?q?yang,=20added=20a=20popup=20menu=20to=20the=20magnifying=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20glass=20tool=20icon.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20a=20popup=20menu=20triggered=20on=20a=20rig?= =?UTF-8?q?ht=20click=20or=20long=20press=20=20=20=20=20=20=20=20=20inside?= =?UTF-8?q?=20a=20selection.=20=20=20=20=20=20=20=E2=96=A1=20Updated=20the?= =?UTF-8?q?=20built=20in=20toolbar=20"Dev"=20menu.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20the=20text=20in?= =?UTF-8?q?=20a=20text=20selection=20can=20be=20=20=20=20=20=20=20=20=20ed?= =?UTF-8?q?ited=20in=20the=20Edit>Selection>Properties=20dialog.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20the=20F?= =?UTF-8?q?ile>Import>Image=20Sequence=20dialog=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?is=20used=20when=20drag=20and=20dropping=20a=20folder=20on=20th?= =?UTF-8?q?e=20"ImageJ"=20window.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Michael=20Schmid=20and=20Thomas=20Fischer,=20Undo=20wor?= =?UTF-8?q?ks=20with=20=20=20=20=20=20=20=20=20overlays=20when=20translati?= =?UTF-8?q?ng=20and=20rotating=20images,=20and=20the=20"Overlay=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20only"=20checkbox=20is=20only=20shown=20in=20t?= =?UTF-8?q?he=20Translate=20dialog=20when=20there=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20is=20an=20overlay.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20Robert=20Haase,=20added=20the=20Edit>Options>Fresh=20Start?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20command,=20which=20closes=20all=20im?= =?UTF-8?q?ages,=20empties=20the=20ROI=20Manager,=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20clears=20the=20Results=20table=20and=20enables=20the=20"Blac?= =?UTF-8?q?k=20background"=20=20=20=20=20=20=20=20=20option.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Conner=20Phillips=20and=20St?= =?UTF-8?q?ein=20Rorvik,=20the=20Reslice=20command=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20is=20faster=20on=20Windows=20when=20re-slicing=20from=20"Lef?= =?UTF-8?q?t"=20or=20"Right"=20and=20=20=20=20=20=20=20=20=20it=20uses=20a?= =?UTF-8?q?n=20ordinary=20progress=20bar=20when=20run=20from=20a=20macro.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,?= =?UTF-8?q?=20added=20an=20"Open=20as=20separate=20images"=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20checkbox=20to=20the=20File>Import>Image=20Sequence?= =?UTF-8?q?=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein?= =?UTF-8?q?=20Rorvik,=20added=20"Foreground..."=20and=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20"Background..."=20entries=20to=20the=20color=20picker=20t?= =?UTF-8?q?ool=20popup=20menu.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20'MIKEIII'=20and=20Dmitry=20Fedorov,=20added=20the=20Image.wi?= =?UTF-8?q?dth,=20=20=20=20=20=20=20=20=20Image.height,=20Image.copy=20and?= =?UTF-8?q?=20Image.paste(x,y)=20macro=20functions=20(=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Stein=20Rorvik,=20added=20the=20Array.filter(arr,str),=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20Math.toRadians(degrees)=20and=20Math.toDeg?= =?UTF-8?q?rees(radians)=20functions.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Nima=20Hojat,=20added=20the=20ResultsTable.addRow()?= =?UTF-8?q?=20method.=20=20=20=20=20=20=20=20=20For=20an=20example,=20run?= =?UTF-8?q?=20Help>Examples>JavaScript>Sine/Cosine=20Table.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Philippe=20Carl,=20fixed=20a=20?= =?UTF-8?q?bug=20that=20caused=20the=20=20=20=20=20=20=20=20=20RoiManager.?= =?UTF-8?q?getSelectedIndexes()=20method=20to=20sometimes=20not=20work=20a?= =?UTF-8?q?s=20=20=20=20=20=20=20=20=20expected.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Christian=20Tischer,=20fixed=20a=20bu?= =?UTF-8?q?g=20that=20slowed=20saving=20of=20=20=20=20=20=20=20=20=20virtu?= =?UTF-8?q?al=20stacks=20in=20TIFF=20format.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Thomas=20Fischer,=20fixed=20a=20bug=20that=20c?= =?UTF-8?q?aused=20the=20dynamic=20=20=20=20=20=20=20=20=20"Value"=20and?= =?UTF-8?q?=20"Count"=20values=20in=20HIstogram=20windows=20to=20sometimes?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20not=20be=20displayed=20correctly.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Gaurav=20Joshi,=20f?= =?UTF-8?q?ixed=20a=20bug=20that=20caused=20the=20Ctrl+F=20(=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Edit>Fill)=20keyboard=20shortcut=20on=20Windows,?= =?UTF-8?q?=20when=20used=20on=20a=20stack,=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20not=20display=20the=20"Proces=20Stack=3F"=20dialog.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20'Quiroz-1',=20fixed=20a?= =?UTF-8?q?=201.53e=20regression=20that=20caused=20the=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20imageCaculator()=20macro=20function=20do=20somethimes?= =?UTF-8?q?=20not=20work=20as=20=20=20=20=20=20=20=20=20expected.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Pradeep=20Rajasekhar=20an?= =?UTF-8?q?d=20Jan=20Eglinger,=20fixed=20a=201.52=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20regression=20that=20caused=20the=20Analyze=20Skeleton=20plug?= =?UTF-8?q?in=20to=20output=20=20=20=20=20=20=20=20=20incorrect=20Results?= =?UTF-8?q?=20tables.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'tongt?= =?UTF-8?q?ao',=20fixed=20a=20regression=20that=20caused=20the=20Edit>=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Copy=20to=20Image=20Info=20command=20in?= =?UTF-8?q?=20the=20text=20editor=20to=20fail.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=201.53c?= =?UTF-8?q?=20regression=20in=20the=20AVI=20=20=20=20=20=20=20=20=20Reader?= =?UTF-8?q?=20that=20caused=20it=20to=20throw=20a=20null=20pointer=20excep?= =?UTF-8?q?tion.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Eric=20Perl?= =?UTF-8?q?man,=20fixed=20a=201.52=20regresion=20that=20caused=20the=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20IJ.getImage()=20method=20to=20sometimes=20?= =?UTF-8?q?display=20model=20error=20dialogs.=20=20=20=E2=80=A2=201.53e=20?= =?UTF-8?q?16=20September=202020=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20Michael=20Schmid,=20the=20color=20picker=20tool=20has=20a?= =?UTF-8?q?=20new=20icon=20=20=20=20=20=20=20=20=20and=20a=20right=20click?= =?UTF-8?q?=20drop=20down=20menu.=20=20=20=20=20=20=20=E2=96=A1=20The=20"B?= =?UTF-8?q?lack=20background"=20option=20is=20no=20longer=20saved=20in=20t?= =?UTF-8?q?he=20=20=20=20=20=20=20=20=20preferences=20file.=20Add=20setOpt?= =?UTF-8?q?ion("BlackBackground",true)=20to=20=20=20=20=20=20=20=20=20Edit?= =?UTF-8?q?>Options>Startup=20to=20have=20it=20set=20'true'=20on=20startup?= =?UTF-8?q?.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Kees=20Straatma?= =?UTF-8?q?n,=20improved=20recording=20of=20the=20Edit>=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Selection>Add=20to=20Manager=20command.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Michael=20Ellis,=20added=20a=20?= =?UTF-8?q?module-info.java=20file,=20used=20by=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?the=20Java=20Module=20System,=20to=20the=20ImageJ=20source.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'mkhapp',=20added?= =?UTF-8?q?=20the=20RoiManager.selected=20macro=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?function,=20which=20returns=20the=20number=20of=20selected=20RO?= =?UTF-8?q?Is=20in=20the=20ROI=20=20=20=20=20=20=20=20=20Manager=20(exampl?= =?UTF-8?q?e).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fred=20Damen,?= =?UTF-8?q?=20added=20the=20ImagePlus.copyToSystem()=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20method.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Phi?= =?UTF-8?q?lippe=20Carl,=20fixed=20a=20bug=20that=20allowed=20multiple=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20copies=20of=20the=20Color=20Picker=20to?= =?UTF-8?q?=20be=20opened.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'?= =?UTF-8?q?Ben',=20fixed=20a=20bug=20that=20caused=20the=20Table.get()=20m?= =?UTF-8?q?acro=20=20=20=20=20=20=20=20=20function=20to=20return=20strings?= =?UTF-8?q?=20instead=20of=20numbers.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Fred=20Damen=20and=20Michael=20Schmid,=20fixed=20a=20?= =?UTF-8?q?bug=20that=20=20=20=20=20=20=20=20=20caused=20the=20run("Copy?= =?UTF-8?q?=20to=20System")=20macro=20function=20to=20sometimes=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20copy=20the=20wrong=20image=20to=20the=20syste?= =?UTF-8?q?m=20clipboard.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fr?= =?UTF-8?q?ed=20Damen,=20fixed=20a=20bug=20that=20caused=20unreliable=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20zooming=20of=20images=20with=20selectio?= =?UTF-8?q?ns=20when=20using=20the=20arrow=20keys=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20while=20holding=20the=20shift=20or=20control=20key=20down.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fred=20Damen,=20?= =?UTF-8?q?fixed=20a=20bug=20that=20caused=20the=20img3=3D=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20ImageCalculator.run(img1,img2,operation)=20method?= =?UTF-8?q?=20to=20return=20null=20=20=20=20=20=20=20=20=20if=20the=20'ope?= =?UTF-8?q?ration'=20string=20did=20not=20contain=20'create'=20or=20'32-bi?= =?UTF-8?q?t'.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Martin=20Hohn?= =?UTF-8?q?e,=20fixed=20a=201.53c=20regression=20that=20caused=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20the=20Counter=20popup=20menu=20in=20the=20Point?= =?UTF-8?q?=20Tool=20options=20Dialog=20to=20not=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20work=20as=20expected=20after=20switching=20to=20a=20differen?= =?UTF-8?q?t=20image.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Robert?= =?UTF-8?q?=20Svoboda,=20fixed=20a=201.53d=20regression=20on=20Windows=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20that=20could=20cause=20the=20getDirecto?= =?UTF-8?q?ry()=20macro=20function=20to=20throw=20an=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20exception=20or=20crash=20ImageJ.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=201.53d?= =?UTF-8?q?=20regression=20that=20could=20=20=20=20=20=20=20=20=20cause=20?= =?UTF-8?q?the=20run("Image=20Sequence...",options)=20macro=20function=20t?= =?UTF-8?q?o=20=20=20=20=20=20=20=20=20fail.=20=20=20=E2=80=A2=201.53d=202?= =?UTF-8?q?0=20August=202020=20=20=20=20=20=20=20=E2=96=A1=20Added=20drag?= =?UTF-8?q?=20and=20drop=20support=20to=20GenericDialog=20directory=20and?= =?UTF-8?q?=20file=20=20=20=20=20=20=20=20=20fields,=20based=20on=20code?= =?UTF-8?q?=20from=20Fiji's=20GenericDialogPlus.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20The=20File>Import>Image=20Sequence=20and=20File>Sav?= =?UTF-8?q?e=20As>Image=20Sequence=20=20=20=20=20=20=20=20=20comnands=20ge?= =?UTF-8?q?t=20the=20directory=20using=20the=20new=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20GenericDialog.addDirectoryField()=20method,=20which=20is=20b?= =?UTF-8?q?ased=20on=20the=20=20=20=20=20=20=20=20=20very=20useful=20metho?= =?UTF-8?q?d=20with=20the=20same=20name=20in=20Fiji's=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20GenericDialogPlus=20class.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20The=20File>Import>AVI=20comnand=20gets=20the=20path=20to=20t?= =?UTF-8?q?he=20AVI=20file=20using=20=20=20=20=20=20=20=20=20the=20new=20G?= =?UTF-8?q?enericDialog.addFileField()=20method,=20which=20is=20also=20fro?= =?UTF-8?q?m=20=20=20=20=20=20=20=20=20Fiji's=20GenericDialogPlus=20class.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20Michael=20Schmid,=20a?= =?UTF-8?q?dded=20the=20Process>Filters>Top=20Hat=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20filter.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Willia?= =?UTF-8?q?m=20Berndt,=20added=20the=20Image>Type>HSB=20(32-bit)=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20command.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Laurent=20Thomas,=20added=20the=20More>>Multi=20Crop?= =?UTF-8?q?=20command=20to=20=20=20=20=20=20=20=20=20the=20ROI=20Manager.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Zeynab=20Mousavi?= =?UTF-8?q?,=20the=20Edit>Selection>Scale=20command=20uses=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20the=20centroid=20instead=20of=20the=20center=20of?= =?UTF-8?q?=20the=20bounding=20rectangle=20=20=20=20=20=20=20=20=20when=20?= =?UTF-8?q?"Centered"=20is=20checked=20in=20the=20dialog.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20The=20Help>About=20ImageJ=20window=20is=20lar?= =?UTF-8?q?ger=20and=20the=20text=20is=20drawn=20in=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20an=20overlay.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Peter=20Bankhead,=20the=20MacAdapter=20class=20is=20now=20in?= =?UTF-8?q?=20the=20=20=20=20=20=20=20=20=20ij.plugin=20package.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20lege?= =?UTF-8?q?nd=20labels=20can=20be=20indexed=20or=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20hidden=20in=20the=20plot=20window=20More>>Legend...=20dialog?= =?UTF-8?q?.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Curtis=20Rueden?= =?UTF-8?q?,=20the=20sample=20images=20are=20now=20loaded=20from=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20https://imagej.net/images/.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20the=20Color?= =?UTF-8?q?=20Picker=20now=20has=20a=20=20=20=20=20=20=20=20=20clipboard-c?= =?UTF-8?q?opyable=20TextArea=20containing=20the=20selected=20color=20in?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20hex=20format.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Jeff=20Hardin,=20the=20Image>Hypersta?= =?UTF-8?q?cks>Stack=20to=20=20=20=20=20=20=20=20=20Hyperstack=20command?= =?UTF-8?q?=20now=20works=20with=20virtual=20stacks=20not=20in=20CZT=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20order.=20=20=20=20=20=20=20=E2=96=A1=20The?= =?UTF-8?q?=20Threshold=20tool's=20"Set"=20function=20disables=20"Don't=20?= =?UTF-8?q?reset=20=20=20=20=20=20=20=20=20range"=20if=20the=20values=20se?= =?UTF-8?q?t=20are=20outslide=20of=20the=20current=20display=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20range.=20=20=20=20=20=20=20=E2=96=A1=20The=20Ima?= =?UTF-8?q?geStack=20class=20now=20accepts=20images=20of=20different=20typ?= =?UTF-8?q?es.=20=20=20=20=20=20=20=20=20Images=20are=20converted=20to=20t?= =?UTF-8?q?he=20type=20specified=20by=20the=20setBitDepth()=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20method=20or=20to=20the=20type=20of=20the=20first=20?= =?UTF-8?q?image=20added.=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20Di?= =?UTF-8?q?alog.addDirectory()=20macro=20function=20and=20the=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20GenericDialog.addDirectoryField()=20method=20(ex?= =?UTF-8?q?ample).=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20Dialog.ad?= =?UTF-8?q?dFile()=20macro=20function=20and=20the=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20GenericDialog.addFileField()=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20Dialog.addImageChoice()=20macro=20fun?= =?UTF-8?q?ction=20and=20the=20=20=20=20=20=20=20=20=20GenericDialog.addIm?= =?UTF-8?q?ageChoice()=20method.=20=20=20=20=20=20=20=E2=96=A1=20Added=20t?= =?UTF-8?q?he=20Overlay.cropAndSave()=20macro=20function=20and=20the=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20ImagePlus.cropAndSave()=20method=20(exampl?= =?UTF-8?q?e).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Tho?= =?UTF-8?q?mas,=20added=20the=20RoiManager.multiCrop()=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20macro=20function=20and=20RoiManager.multiCrop()=20meth?= =?UTF-8?q?od.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Philippe=20Ca?= =?UTF-8?q?rl=20and=20Michael=20Schmid,=20added=20the=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20LutLoader.getLut()=20method.=20For=20an=20example,=20run?= =?UTF-8?q?=20Help>Examples>=20=20=20=20=20=20=20=20=20JavaScript>Show=20a?= =?UTF-8?q?ll=20LUTs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Philip?= =?UTF-8?q?pe=20Carl,=20added=20the=20String.format()=20macro=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20function.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Laurent=20Thomas,=20added=20the=20ImagePlus.crop(Roi[])?= =?UTF-8?q?,=20=20=20=20=20=20=20=20=20Overlay.createStackOverlay(Roi[])?= =?UTF-8?q?=20and=20ImageStack.create=20=20=20=20=20=20=20=20=20(ImagePlus?= =?UTF-8?q?[])=20methods.=20For=20an=20example,=20run=20Help>Examples>=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20JavaScript>Crop=20Multiple=20Rois.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Added=20the=20FolderOpener.open(p?= =?UTF-8?q?ath,=20width,=20height,=20options)=20=20=20=20=20=20=20=20=20me?= =?UTF-8?q?thod,=20which=20opens=20a=20stack,=20or=20virtual=20stack,=20fr?= =?UTF-8?q?om=20a=20folder=20of=20=20=20=20=20=20=20=20=20images=20that=20?= =?UTF-8?q?may=20differ=20in=20size.=20=20=20=20=20=20=20=E2=96=A1=20Added?= =?UTF-8?q?=20the=20ImageStack.setBitDepth()=20method.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Aryeh=20Weiss,=20added=20the=20Hyp?= =?UTF-8?q?erStackConverter.toStack()=20=20=20=20=20=20=20=20=20method=20(?= =?UTF-8?q?example).=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20StackWr?= =?UTF-8?q?iter.save()=20method.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20'bio7'=20and=20David=20Gault,=20fixed=20bugs=20that=20caus?= =?UTF-8?q?ed=20=20=20=20=20=20=20=20=20IJ.isJava18()=20to=20return=20fals?= =?UTF-8?q?e=20and=20JavaScript=20to=20not=20work=20when=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20running=20Java=2014=20or=20later.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Vivek=20Gupta,=20fixed=20a=20bug=20th?= =?UTF-8?q?at=20caused=20the=20run("Add=20=20=20=20=20=20=20=20=20Selectio?= =?UTF-8?q?n...")=20macro=20function=20to=20ignore=20the=20current=20selec?= =?UTF-8?q?tion's=20=20=20=20=20=20=20=20=20position.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Cammer,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20contrast=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20constantly=20change=20when=20scrolling=20through=20a=20stack?= =?UTF-8?q?=20and=20the=20=20=20=20=20=20=20=20=20Threshold=20window=20is?= =?UTF-8?q?=20open.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Gilles?= =?UTF-8?q?=20Carpentier,=20fixed=20a=20bug=20that=20caused=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Duplicate=20command=20to=20propose=20an=20inc?= =?UTF-8?q?orrect=20name=20when=20duplicating=20=20=20=20=20=20=20=20=20an?= =?UTF-8?q?=20image=20whose=20name=20ends=20in=20"-n",=20where=20'n'=20is?= =?UTF-8?q?=20a=20digit.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Gab?= =?UTF-8?q?riel=20Landini=20and=20Michael=20Schmid,=20fixed=20a=20bug=20th?= =?UTF-8?q?at=20=20=20=20=20=20=20=20=20caused=20the=20File>Show=20Folder>?= =?UTF-8?q?=20commands=20to=20not=20work=20on=20some=20Linux=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20systems.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20'Nhaz',=20fixed=20a=20bug=20that=20caused=20the=20Fit.d?= =?UTF-8?q?oFit()=20macro=20=20=20=20=20=20=20=20=20function=20to=20fail?= =?UTF-8?q?=20with=20equations=20containing=20"Math.erf()".=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed=20pre?= =?UTF-8?q?view=20and=20parallelization=20=20=20=20=20=20=20=20=20bugs=20i?= =?UTF-8?q?n=20the=20RankFilters=20(Median,=20Mean,=20Minimum,=20etc.).=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Herbie=20Gluender,?= =?UTF-8?q?=20fixed=20a=20bug=20that=20caused=20Table.*=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20macro=20functions=20to=20ignore=20custom=20tables=20no?= =?UTF-8?q?t=20displayed=20in=20the=20=20=20=20=20=20=20=20=20active=20win?= =?UTF-8?q?dow.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Philippe=20C?= =?UTF-8?q?arl=20and=20Michael=20Schmid,=20fixed=20a=20bug=20that=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20caused=20the=20High=20Resolution=20Plot=20com?= =?UTF-8?q?mand=20to=20not=20be=20correctly=20=20=20=20=20=20=20=20=20reco?= =?UTF-8?q?rded=20in=20Java(script)=20mode.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Gabriel=20Landini,=20fixed=20the=20Process>Sha?= =?UTF-8?q?dows>Shadows=20=20=20=20=20=20=20=20=20Demo=20command,=20which?= =?UTF-8?q?=20was=20too=20fast=20on=20modern=20computers.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20sometimes=20caused=20=20=20=20=20=20=20=20=20po?= =?UTF-8?q?int=20measurements=20to=20not=20work=20as=20expected=20(example?= =?UTF-8?q?).=20=20=20=20=20=20=20=E2=96=A1=20Fixed=20issues=20with=20scri?= =?UTF-8?q?pt-mode=20recording=20of=20file=20paths=20on=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Windows.=20=20=20=20=20=20=20=E2=96=A1=20On=20Macs,=20?= =?UTF-8?q?fixed=20a=20bug=20that=20caused=20the=20ImageJ>About=20ImageJ?= =?UTF-8?q?=20window=20=20=20=20=20=20=20=20=20to=20open=20slowly.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Cammer,=20fi?= =?UTF-8?q?xed=20a=20bug=20that=20caused=20the=20s2=3D=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20replace(s,s1,s2)=20and=20s2=3Ds.replace(s1,s2)=20macro?= =?UTF-8?q?=20functions=20to=20=20=20=20=20=20=20=20=20fail=20when=20's1'?= =?UTF-8?q?=20was=20a=20single=20regular=20expression=20special=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20character=20and=20's2'=20did=20not=20have=20a?= =?UTF-8?q?=20length=20of=20one.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20Philippe=20Carl,=20fixed=20a=20bug=20that=20caused=20the?= =?UTF-8?q?=20Image>=20=20=20=20=20=20=20=20=20Stacks>Tools>Concatenate=20?= =?UTF-8?q?command=20to=20not=20preserve=20the=20"Info"=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20properties.=20=20=20=20=20=20=20=E2=96=A1=20Fixed=20a?= =?UTF-8?q?=201.52r=20regression=20that=20caused=20ImageJ=20to=20hang=20wh?= =?UTF-8?q?en=20saving=20=20=20=20=20=20=20=20=20images=20with=20fewer=20t?= =?UTF-8?q?han=204=20pixel=20in=20TIFF=20format.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Jan=20Brocher,=20fixed=20a=201.52u=20?= =?UTF-8?q?regression=20that=20caused=20the=20=20=20=20=20=20=20=20=20Edit?= =?UTF-8?q?>Selection>Enlarge=20command=20to=20not=20work=20as=20well=20as?= =?UTF-8?q?=20before.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'jerr'?= =?UTF-8?q?,=20fixed=20a=201.52=20regression=20that=20made=20it=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20impossible=20to=20set=20the=20threshold=20by?= =?UTF-8?q?=20changing=20the=20textfield=20=20=20=20=20=20=20=20=20values.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'Emil'=20and=20P?= =?UTF-8?q?ete=20Bankhead,=20fixed=20a=201.53c=20regression=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20that=20caused=20the=20Analyze>Plot=20Profile=20comm?= =?UTF-8?q?and=20not=20work=20as=20=20=20=20=20=20=20=20=20expected=20with?= =?UTF-8?q?=20segmented=20and=20freehand=20line=20selections=20on=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20spatially=20calibrated=20images.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Zeynab=20Mousavi,=20fixed=20?= =?UTF-8?q?a=201.52=20regression=20that=20caused=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20the=20getResults()=20macro=20function=20to=20unexpectadly=20?= =?UTF-8?q?cause=20a=20"No=20=20=20=20=20=20=20=20=20results=20found"=20er?= =?UTF-8?q?ror=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?Sumin=20Kim,=20fixed=20a=201.52t=20regression=20that=20caused?= =?UTF-8?q?=20Stack=20=20=20=20=20=20=20=20=20to=20Images=20image=20titles?= =?UTF-8?q?=20to=20not=20be=20the=20same=20as=20before=20for=20stacks=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20with=20names=20containing=20spaces.=20?= =?UTF-8?q?=20=20=E2=80=A2=201.53c=2026=20June=202020=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20Help>Examples>Tools>=20submenu=20with?= =?UTF-8?q?=20five=20tools:=20Circle=20=20=20=20=20=20=20=20=20Tool,=20Sta?= =?UTF-8?q?r=20Tool,=20Point=20Picker,=20Big=20Cursor=20and=20Annular=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Selection.=20These=20tools=20use=20the?= =?UTF-8?q?=20new=20"//@AutoInstall"=20directive=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20that=20automatically=20adds=20them=20to=20the=20toolbar.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Added=20the=20"//@AutoInstall"=20?= =?UTF-8?q?and=20"//@AutoInstallAndHide"=20=20=20=20=20=20=20=20=20directi?= =?UTF-8?q?ves=20for=20automatically=20installing=20macros=20and=20tools?= =?UTF-8?q?=20in=20=20=20=20=20=20=20=20=20newly=20opened=20.ijm=20and=20.?= =?UTF-8?q?txt=20files.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Loui?= =?UTF-8?q?se=20Bishop,=20delete=20multiple=20points=20from=20a=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20multi-point=20selection=20by=20creating=20a?= =?UTF-8?q?=20new=20area=20selection=20while=20=20=20=20=20=20=20=20=20hol?= =?UTF-8?q?ding=20down=20the=20alt=20key.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Gabriel=20Landini,=20the=20LUT=20name=20is=20save?= =?UTF-8?q?d=20as=20an=20image=20=20=20=20=20=20=20=20=20property=20and=20?= =?UTF-8?q?displayed=20when=20you=20type=20"i"=20(Image>Show=20Info).=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Added=20support=20for=2024x24=20m?= =?UTF-8?q?acro=20tool=20icons.=20The=20Big=20Cursor=20and=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20Annular=20Selection=20tools=20are=20examples.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Double=20click=20on=20an=20overlay?= =?UTF-8?q?=20selection=20to=20activate=20it.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Christophe=20Leterrier=20and=20Christ?= =?UTF-8?q?ian=20Goosmann,=20the=20=20=20=20=20=20=20=20=20Image>Scale,=20?= =?UTF-8?q?Image>Adjust>Size,=20Image>Transform>Rotate,=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Translate,=20Rotate=2090=20Degrees=20Right=20and=20Rot?= =?UTF-8?q?ate=2090=20Degrees=20Left=20=20=20=20=20=20=20=20=20commands=20?= =?UTF-8?q?now=20work=20with=20overlays.=20=20=20=20=20=20=20=E2=96=A1=20T?= =?UTF-8?q?hanks=20to=20'Emma',=20added=20sliders=20and=20an=20"Overlay=20?= =?UTF-8?q?only"=20option=20to=20=20=20=20=20=20=20=20=20the=20Image>Trans?= =?UTF-8?q?form>Translate=20command.=20=20=20=20=20=20=20=E2=96=A1=20The?= =?UTF-8?q?=20Color=20Picker=20is=20improved,=20including=20a=20new=20tool?= =?UTF-8?q?=20icon.=20=20=20=20=20=20=20=E2=96=A1=20Toolbar=20buttons=20ar?= =?UTF-8?q?e=20one=20pixel=20larger,=20making=20the=20"ImageJ"=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20window=2020=20pixels=20wider.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Tool=20icons=20are=20bolder=20when=20the=20GUI?= =?UTF-8?q?=20scale=20is=20greater=20than=201.0=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?and=20less=20the=201.5.=20=20=20=20=20=20=20=E2=96=A1=20Added?= =?UTF-8?q?=20a=20"Reset"=20button=20to=20the=20Edit=20dialog=20of=20the?= =?UTF-8?q?=20Plugins>=20=20=20=20=20=20=20=20=20Utilities>Commands=20wind?= =?UTF-8?q?ow.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20Jerome=20Mutterer,?= =?UTF-8?q?=20added=20the=20rainbow=20progress=20bar=20easter=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20egg,=20activated=20by=20switching=20to=20the=20a?= =?UTF-8?q?ngle=20tool=20and=20running=20a=20=20=20=20=20=20=20=20=20comma?= =?UTF-8?q?nd=20that=20uses=20a=20progress=20bar=20(e.g.,=20a=20radius=205?= =?UTF-8?q?0=20median=20=20=20=20=20=20=20=20=20filter=20on=20a=201000x100?= =?UTF-8?q?0=20image).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fred?= =?UTF-8?q?=20Damen,=20the=20Compile=20and=20Run=20command=20now=20looks?= =?UTF-8?q?=20for=20=20=20=20=20=20=20=20=20library=20JAR=20files=20in=20b?= =?UTF-8?q?oth=20plugins/jars=20and=20plugins/lib.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20getDir("file")=20macro=20function,=20?= =?UTF-8?q?which=20returns=20the=20=20=20=20=20=20=20=20=20directory=20of?= =?UTF-8?q?=20the=20most=20recently=20opened=20or=20saved=20file.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20Jerome=20Mutterer,=20added=20t?= =?UTF-8?q?he=20=20=20=20=20=20=20=20=20Overlay.activateSelectionAndWait()?= =?UTF-8?q?=20macro=20function.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20t?= =?UTF-8?q?o=20'Eljonco',=20added=20the=20RoiManager.getName()=20macro=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20function.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Laurent=20Thomas,=20added=20the=20RoiManager.s?= =?UTF-8?q?etPosition()=20=20=20=20=20=20=20=20=20macro=20function=20and?= =?UTF-8?q?=20method.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'quatr?= =?UTF-8?q?eulls',=20added=20the=20Table.saveColumnHeaders=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20(boolean)=20macro=20function=20and=20ResultsTable.s?= =?UTF-8?q?aveColumnHeaders=20=20=20=20=20=20=20=20=20(boolean)=20method.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas?= =?UTF-8?q?,=20added=20the=20ImagePlus.crop(Roi[])=20and=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20ImagePlus.crop(Roi[],options)=20methods=20(JavaScript?= =?UTF-8?q?=20example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Bill?= =?UTF-8?q?=20Christens-Barry,=20added=20the=20TextWindow.setFont=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20(name,style,size)=20method=20for=20setting=20?= =?UTF-8?q?the=20font=20used=20in=20the=20Log=20=20=20=20=20=20=20=20=20wi?= =?UTF-8?q?ndow.=20For=20monospaced=20text,=20set=20'name'=20to=20"Monospa?= =?UTF-8?q?ced"=20(=20=20=20=20=20=20=20=20=20example).=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Gilles=20Carpentier,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20caused=20NaN=20=20=20=20=20=20=20=20=20results?= =?UTF-8?q?=20when=20measuring=20line=20selections=20created=20by=20Edit>?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Selection>Area=20to=20Line=20from=20?= =?UTF-8?q?particle=20analyzer=20selections=20=20=20=20=20=20=20=20=20touc?= =?UTF-8?q?hing=20the=20right=20or=20bottom=20edge=20of=20the=20image.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,?= =?UTF-8?q?=20fixed=20bugs=20that=20caused=20hyperstacks=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20with=20a=20"select=20all"=20selection=20to=20not=20be?= =?UTF-8?q?=20correcty=20copied=20to=20the=20=20=20=20=20=20=20=20=20syste?= =?UTF-8?q?m=20clipboard.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jo?= =?UTF-8?q?e=20Want,=20fixed=20a=20bug=20that=20caused=20the=20macro=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20interpreter=20to=20sometimes=20generate=20?= =?UTF-8?q?an=20invalid=20"Numeric=20return=20=20=20=20=20=20=20=20=20valu?= =?UTF-8?q?e=20expected"=20message.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20Jerome=20Mutterer,=20fixed=20a=20bug=20that=20caused=20the?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Roi.activateSelection(index)=20macro?= =?UTF-8?q?=20function=20to=20not=20work=20as=20=20=20=20=20=20=20=20=20ex?= =?UTF-8?q?pected=20when=20called=20twice=20with=20the=20same=20index.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Worked=20around=20a=20Java=208/Wi?= =?UTF-8?q?ndows=2010=20bug=20that=20caused=20the=20"ImageJ"=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20window=20menu=20bar=20font=20size=20to=20become?= =?UTF-8?q?=20very=20small=20after=20increasing=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?the=20GUI=20scale.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Romain=20Guiet=20and=20Jan=20Eglinger,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20=20=20=20=20=20=20=20=20caused=20the=20multi-point=20tool?= =?UTF-8?q?=20to=20always=20reset=20the=20counter=20to=200.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20the=20Edit>?= =?UTF-8?q?Selection>Fit=20Spline=20command=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20leave=20an=20incomplete=20progress=20bar.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20the=20Editor's?= =?UTF-8?q?=20Compile=20and=20Run=20"Save=20as"=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?dialog=20to=20sometimes=20not=20default=20to=20a=20folder=20ins?= =?UTF-8?q?ide=20the=20plugins=20=20=20=20=20=20=20=20=20folder.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,=20fixed?= =?UTF-8?q?=20a=20bug=20in=20ROI=20Manager>Properties=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20that=20caused=20it=20to=20not=20change=20the=20position?= =?UTF-8?q?=20of=20multiple=20ROIs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Michael=20Schmid,=20fixed=20a=20bug=20that=20could=20ca?= =?UTF-8?q?use=20an=20=20=20=20=20=20=20=20=20exception=20with=20plugins?= =?UTF-8?q?=20using=20a=20DialogListener.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bug=20that=20coul?= =?UTF-8?q?d=20cause=20the=20=20=20=20=20=20=20=20=20"Label=20Points"=20ch?= =?UTF-8?q?eckbox=20in=20Point=20Tool=20Options=20dialogs=20to=20be=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20ignored.=20=20=20=20=20=20=20=E2=96=A1=20T?= =?UTF-8?q?hanks=20to=20Christian=20Tischer,=20fixed=20a=20bug=20that=20ca?= =?UTF-8?q?used=20the=20macro=20=20=20=20=20=20=20=20=20interpreter=20to?= =?UTF-8?q?=20not=20generate=20an=20"Undefined=20variable"=20error=20with?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20statements=20like=20"v=3Dv+1".=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Garbriel=20Landini,=20?= =?UTF-8?q?fixed=20a=201.52m=20regression=20that=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20caused=20histogram=20peaks=20to=20extend=20above=20the=20fra?= =?UTF-8?q?me.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvi?= =?UTF-8?q?k,=20fixed=20a=201.52u=20regression=20that=20caused=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20File>Import>Image=20Sequence=20to=20display=20un?= =?UTF-8?q?expected=20error=20messages=20=20=20=20=20=20=20=20=20in=20the?= =?UTF-8?q?=20Log=20window.=20=20=20=E2=80=A2=201.53b=2031=20May=202020=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,?= =?UTF-8?q?=20added=20the=20"Overlay=20Editing=20Tools"=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20toolset=20and=20the=20"Label=20Maker"=20tool=20to=20th?= =?UTF-8?q?e=20toolbar's=20">>"=20menu.=20=20=20=20=20=20=20=20=20Shift=20?= =?UTF-8?q?click=20on=20a=20toolset=20or=20tool=20in=20the=20">>"=20menu?= =?UTF-8?q?=20to=20view=20the=20=20=20=20=20=20=20=20=20macro=20source=20c?= =?UTF-8?q?ode.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Th?= =?UTF-8?q?omas,=20added=20the=20Edit>Options>Roi=20Defaults=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20command,=20which=20adds=20support=20for=20ROI=20?= =?UTF-8?q?group=20names.=20Double=20click=20=20=20=20=20=20=20=20=20on=20?= =?UTF-8?q?the=20rectangle=20tool=20to=20run=20this=20command.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20The=20group=20name,=20"Stroke=20Color:"=20?= =?UTF-8?q?field=20and=20the=20selection=20color=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20are=20dynamically=20updated=20as=20the=20group=20number=20is?= =?UTF-8?q?=20changed=20in=20the=20=20=20=20=20=20=20=20=20Edit>Selection>?= =?UTF-8?q?Properties=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20t?= =?UTF-8?q?o=20Jerome=20Mutterer,=20added=20support=20for=20tool=20icons?= =?UTF-8?q?=20read=20=20=20=20=20=20=20=20=20from=20image=20files=20locate?= =?UTF-8?q?d=20in=20the=20macros/toolsets/icons/=20folder.=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20The=20syntax=20looks=20like=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20macro=20"Test=20Tool=20-=20icon:833.png"=20{=20}.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Erod=20Baybay,=20added=20?= =?UTF-8?q?the=20Roi.setPosition(slice)=20macro=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?function.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome?= =?UTF-8?q?=20Mutterer,=20added=20the=20Overlay.indexAt(x,y),=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Overlay.removeRois(name)=20and=20Overlay.getBoun?= =?UTF-8?q?ds=20=20=20=20=20=20=20=20=20(index,x,y,width,height)=20macro?= =?UTF-8?q?=20functions.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ste?= =?UTF-8?q?in=20Rorvik,=20added=20the=20Roi.setJustification(str),=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20Roi.setFontSize(size),=20Property.setList(?= =?UTF-8?q?str)=20and=20=20=20=20=20=20=20=20=20Property.getList=20macro?= =?UTF-8?q?=20functions.=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20set?= =?UTF-8?q?Option("InterpolateLines",boolean)=20macro=20function.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Adrian=20Martin,=20added?= =?UTF-8?q?=20the=20setOption=20=20=20=20=20=20=20=20=20("FlipFitsImages",?= =?UTF-8?q?true)=20macro=20function.=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20Laurent=20Thomas,=20added=20the=20Roi.getGroupNames=20?= =?UTF-8?q?and=20=20=20=20=20=20=20=20=20Roi.setGroupNames()=20macro=20fun?= =?UTF-8?q?ctions.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jan=20Egl?= =?UTF-8?q?inger,=20moved=20initialization=20of=20the=20okay=20and=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20cancel=20buttons=20in=20GenericDialog=20in?= =?UTF-8?q?to=20the=20constructors.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Hidenao=20Yamada,=20fixed=20a=20bug=20that=20caused=20t?= =?UTF-8?q?he=20=20=20=20=20=20=20=20=20FileInfoVirtualStack.deleteLastSli?= =?UTF-8?q?ce()=20method=20to=20not=20work.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Tom=20Kazimiers,=20fixed=20spelling=20of=20the?= =?UTF-8?q?=20ARTIST=20tag=20in=20=20=20=20=20=20=20=20=20the=20TiffDecode?= =?UTF-8?q?r.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutte?= =?UTF-8?q?rer=20and=20Michael=20Schmid,=20fixed=20a=20rounding=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20error=20that=20caused=20the=20Measure=20comma?= =?UTF-8?q?nd=20to=20not=20correctly=20measure=20=20=20=20=20=20=20=20=20p?= =?UTF-8?q?oint=20selectons=20with=20non-integer=20coordinates.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Herbie=20Gluender,=20fixe?= =?UTF-8?q?d=20bugs=20that=20caused=20the=20Rename,=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Duplicate,=20Sort=20and=20Plot=20Results=20table=20comman?= =?UTF-8?q?ds=20to=20not=20work=20if=20=20=20=20=20=20=20=20=20the=20table?= =?UTF-8?q?=20did=20not=20contain=20a=20ResultsTable=20object.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20the=20Stack=20to=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Hyperstack=20command=20to=20throw=20an=20exception.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'Hayato',=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20the=20roiManager=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20("measure")=20macro=20function=20to=20be=20slow=20on?= =?UTF-8?q?=20Windows=20when=20measuring=20=20=20=20=20=20=20=20=20thousan?= =?UTF-8?q?ds=20of=20ROIs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20G?= =?UTF-8?q?illes=20Carpentier,=20fixed=20a=20bug=20that=20caused=20the=20S?= =?UTF-8?q?tack=20=20=20=20=20=20=20=20=20to=20Hyperstack=20command=20to?= =?UTF-8?q?=20unexpectedly=20display=20the=20output=20image=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20in=20batch=20mode.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Madison=20Williams,=20fixed=20a=201.52o=20regress?= =?UTF-8?q?ion=20that=20=20=20=20=20=20=20=20=20caused=20tables=20created?= =?UTF-8?q?=20by=20the=20Cell=20Counter=20plugin=20to=20be=20empty.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ron=20DeSpain,=20fixed?= =?UTF-8?q?=20a=201.52u=20regression=20that=20caused=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20incorrect=20positions=20to=20be=20shown=20in=20the=20stat?= =?UTF-8?q?us=20bar=20after=20using=20=20=20=20=20=20=20=20=20the=20arrow?= =?UTF-8?q?=20keys=20to=20move=20line=20selections.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=201.52t?= =?UTF-8?q?=20regression=20that=20caused=20=20=20=20=20=20=20=20=20the=20T?= =?UTF-8?q?extRoi.setJustification()=20method=20to=20sometimes=20not=20wor?= =?UTF-8?q?k=20as=20=20=20=20=20=20=20=20=20expected.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'hwada',=20fixed=20a=201.52t=20regres?= =?UTF-8?q?sion=20that=20changed=20the=20=20=20=20=20=20=20=20=20order=20o?= =?UTF-8?q?f=20the=20points=20returned=20by=20Line.getFloatPolygon().=20?= =?UTF-8?q?=20=20=E2=80=A2=201.53a=204=20May=202020=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Ellis,=20added=20support=20?= =?UTF-8?q?for=20saving=20and=20restoring=20=20=20=20=20=20=20=20=20persis?= =?UTF-8?q?tent=20image=20properties=20via=20the=20Property.set(key,value)?= =?UTF-8?q?=20and=20=20=20=20=20=20=20=20=20Property.get(key)=20macro=20fu?= =?UTF-8?q?nctions=20and=20the=20setProp(key,string),=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20getProp(key),=20setProp(key,double)=20and=20getNumericPro?= =?UTF-8?q?p(key)=20=20=20=20=20=20=20=20=20methods=20(JavaScript=20exampl?= =?UTF-8?q?e).=20=20=20=20=20=20=20=E2=96=A1=20Removed=20file=20sizes=20fr?= =?UTF-8?q?om=20entries=20in=20the=20File>Open=20Samples>=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20submenu.=20Macros=20that=20use=20the=20old=20entrie?= =?UTF-8?q?s=20(e.g.=20"Blobs=20(25K)")=20=20=20=20=20=20=20=20=20continue?= =?UTF-8?q?=20to=20work.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Lau?= =?UTF-8?q?rent=20Thomas,=20the=20Overlay=20and=20RoiManager=20classes=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20are=20now=20iterable.=20Plugins=20can?= =?UTF-8?q?=20use=20"for=20(Roi=20roi=20:=20rm)"=20instead=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20of=20"for=20(int=20i=20=3D=200;=20i=20!=3D=20rm.get?= =?UTF-8?q?Count();=20i++)".=20In=20JavaScript,=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?use=20"for=20each=20(roi=20in=20rm)"=20(example).=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added?= =?UTF-8?q?=20the=20[&n]=20macro=20shortcut=20=20=20=20=20=20=20=20=20nota?= =?UTF-8?q?tion=20that=20allows=20shortcuts=20to=20be=20used=20on=20both?= =?UTF-8?q?=20numerical=20=20=20=20=20=20=20=20=20keypads=20and=20normal?= =?UTF-8?q?=20(laptop)=20keyboards.=20(example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Richard=20Boardman,=20increased=20the?= =?UTF-8?q?=20BufferedOutputStream=20=20=20=20=20=20=20=20=20buffer=20size?= =?UTF-8?q?=20in=20the=20FileSaver=20class=20to=2032K=20and=20added=20the?= =?UTF-8?q?=20static=20=20=20=20=20=20=20=20=20FileSaver.setBufferSize(int?= =?UTF-8?q?)=20method.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Micha?= =?UTF-8?q?el=20Schmid,=20added=20the=20Plot.setOptions()=20macro=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20function.=20See=20Help>Examples>Plots>Plot=20?= =?UTF-8?q?Results=20for=20an=20example.=20=20=20=20=20=20=20=E2=96=A1=20A?= =?UTF-8?q?dded=20the=20Property.get(key),=20Property.set(key,value),=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Property.getInfo,=20Property.getSliceLa?= =?UTF-8?q?bel,=20=20=20=20=20=20=20=20=20Property.setSliceLabel(string)?= =?UTF-8?q?=20and=20Property.getDicomTag(string)=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20macro=20functions.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20Michael=20Schmid,=20added=20the=20Plot.getCurrentFont(),?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Plot.getDefaultFont()=20and=20Tools.?= =?UTF-8?q?getNumberFromList()=20methods.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Herbie=20Gluender,=20added=20the=20GenericDialog.?= =?UTF-8?q?getLabel()=20=20=20=20=20=20=20=20=20and=20FHT.getRawPowerSpect?= =?UTF-8?q?rum()=20methods.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?Kenneth=20Sloan,=20added=20the=20=20=20=20=20=20=20=20=20ImageP?= =?UTF-8?q?rocessor.getForegroundValue()=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Curtis=20Rueden,=20added=20the=20GUI.?= =?UTF-8?q?getParentFrame()=20method=20=20=20=20=20=20=20=20=20and=20made?= =?UTF-8?q?=20GenericDialog.getParentFrame()=20private=20again.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Hidenao=20Yamada,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20the=20=20=20=20=20=20=20=20=20getD?= =?UTF-8?q?irectory()=20and=20getFileName()=20methods=20of=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20FileInfoVirtualStack=20class=20to=20always=20?= =?UTF-8?q?return=20null.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20No?= =?UTF-8?q?rbert=20Vischer,=20fixed=20a=20bug=20that=20caused=20the=20File?= =?UTF-8?q?>=20=20=20=20=20=20=20=20=20Import>Image=20Sequence=20command?= =?UTF-8?q?=20to=20not=20ignore=20subdirectories.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Cammer,=20fixed=20a=201.52v?= =?UTF-8?q?=20regression=20that=20caused=20=20=20=20=20=20=20=20=20recordi?= =?UTF-8?q?ng=20to=20not=20work=20correctly=20when=20Preview=20was=20check?= =?UTF-8?q?ed=20in=20a=20=20=20=20=20=20=20=20=20filter=20dialog.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Fixed=20a=201.52o=20regression=20that?= =?UTF-8?q?=20caused=20the=20Help>Examples>=20=20=20=20=20=20=20=20=20Java?= =?UTF-8?q?Script>FFT=20Filter=20script=20to=20display=20an=20error=20mess?= =?UTF-8?q?age.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'Eljonco',?= =?UTF-8?q?=20fixed=20a=201.52v=20regression=20that=20caused=20the=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20Threshold=20tool=20to=20sometimes=20freeze?= =?UTF-8?q?=20ImageJ.=20=20=20=E2=80=A2=201.52v=2011=20April=202020=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20m?= =?UTF-8?q?acro=20error=20messages=20include=20the=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20call=20stack.=20(example).=20=20=20=20=20=20=20=E2=96=A1=20A?= =?UTF-8?q?dded=20a=20"Set=20default=20directory"=20code=20choice=20to=20t?= =?UTF-8?q?he=20Edit>=20=20=20=20=20=20=20=20=20Options>Startup=20dialog.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas?= =?UTF-8?q?,=20the=20RoiManager=20class=20is=20now=20iterable.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20The=20run("Viridis")=20macro=20function=20?= =?UTF-8?q?now=20works=20on=20Fiji=20(example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Fred=20Damen,=20Java=20compiler=20err?= =?UTF-8?q?or=20messages=20use=20the=20=20=20=20=20=20=20=20=20default=20e?= =?UTF-8?q?ditor=20font.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fre?= =?UTF-8?q?d=20Damen=20and=20Michael=20Schmid,=20added=20the=20Math.erf(x)?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20macro=20function.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Added=20the=20Overlay.useNamesAsLabels(boolean)?= =?UTF-8?q?=20macro=20function=20(=20=20=20=20=20=20=20=20=20example).=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,?= =?UTF-8?q?=20added=20the=20Fit.getEquation=20=20=20=20=20=20=20=20=20(ind?= =?UTF-8?q?ex,name,formula,macroCode)=20macro=20function=20(example).=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'Odinsbane',=20adde?= =?UTF-8?q?d=20the=20ByteProcessor.skeletonize=20=20=20=20=20=20=20=20=20(?= =?UTF-8?q?foreground)=20method,=20where=20'foreground'=20is=20either=200?= =?UTF-8?q?=20or=20255.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laur?= =?UTF-8?q?ent=20Thomas,=20added=20the=20=20=20=20=20=20=20=20=20ResultsTa?= =?UTF-8?q?ble.getResultsTable(title)=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'Max1',=20fixed=20a=20bug=20that=20ca?= =?UTF-8?q?used=20the=20Edit>Selection>=20=20=20=20=20=20=20=20=20Scale=20?= =?UTF-8?q?command=20to=20not=20maintain=20the=20selection=20name,=20group?= =?UTF-8?q?,=20fill=20=20=20=20=20=20=20=20=20color,=20point=20type=20and?= =?UTF-8?q?=20point=20size.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?'Odinsbane',=20fixed=20a=20bug=20that=20caused=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20ByteProcessor.skeletonize()=20method=20to=20n?= =?UTF-8?q?ot=20work=20correctly=20with=20=20=20=20=20=20=20=20=20objects?= =?UTF-8?q?=20touching=20the=20image=20edge.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Stefan=20Helfrich=20and=20Olivier=20Burri,=20f?= =?UTF-8?q?ixed=20a=20bug=20that=20=20=20=20=20=20=20=20=20caused=20the=20?= =?UTF-8?q?position=20of=20ROIs=20added=20to=20the=20ROI=20Manager=20using?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20RoiManager.setRoi()=20to=20sometimes?= =?UTF-8?q?=20change.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michae?= =?UTF-8?q?l=20Schmid,=20fixed=20a=20bug=20that=20sometimes=20caused=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20GenericDialogs=20to=20throw=20an=20excepti?= =?UTF-8?q?on.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jeremy=20Adle?= =?UTF-8?q?r,=20fixed=20a=20bug=20where=20changing=20the=20LUT=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20resets=20the=20display=20range.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20'Sh=5FTy',=20fixed=20a=20bug=20?= =?UTF-8?q?the=20caused=20the=20Analyze>Tools>=20=20=20=20=20=20=20=20=20C?= =?UTF-8?q?alibration=20Bar=20command=20to=20throw=20an=20exception=20in?= =?UTF-8?q?=20headless=20mode.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Michael=20Schmid,=20fixed=20a=20bug=20that=20caused=20plots?= =?UTF-8?q?=20with=20=20=20=20=20=20=20=20=20custom=20symbols=20to=20use?= =?UTF-8?q?=20the=20wrong=20color=20or=20generate=20an=20error.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Nicolas=20De=20Francesco,?= =?UTF-8?q?=20fixed=20a=201.52u=20regression=20that=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20caused=20incorrect=20straight=20line=20length=20measureme?= =?UTF-8?q?nts=20with=20=20=20=20=20=20=20=20=20spatially=20calibrated=20i?= =?UTF-8?q?mages.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Peter=20Ha?= =?UTF-8?q?ub,=20fixed=20a=201.52u=20regression=20that=20caused=20the=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20cursor=20position=20to=20not=20be=20ali?= =?UTF-8?q?gned=20with=20the=20drawing=20position=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20when=20creating=20a=20polygon=20ROI.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'Professor=5FOAT',=20fixed=20a=201.52?= =?UTF-8?q?s=20regresson=20that=20caused=20=20=20=20=20=20=20=20=20the=20d?= =?UTF-8?q?eleteRows()=20macro=20function=20to=20throw=20an=20exception=20?= =?UTF-8?q?when=20=20=20=20=20=20=20=20=20deleting=20rows=20in=20a=20non-n?= =?UTF-8?q?umeric=20table.=20=20=20=E2=80=A2=201.52u=2017=20March=202020?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20ROI=20enhancements,=20thanks?= =?UTF-8?q?=20to=20Michael=20Schmid:=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=98=86=20Line=20and=20point=20selections=20have=20integer=20?= =?UTF-8?q?coordinates=20at=20pixel=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?centers=20when=20displayed=20at=20high=20magnification.=20Area?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20selections=20have=20inte?= =?UTF-8?q?ger=20coordinates=20at=20the=20top-left=20corner=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20of=20pixels.=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=98=86=20All=20interactively=20created=20ROIs,=20excep?= =?UTF-8?q?t=20rectangles=20and=20=20=20=20=20=20=20=20=20=20=20=20=20oval?= =?UTF-8?q?s,=20are=20created=20with=20subpixel=20resolution=20when=20the?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20magnification=20is=20abo?= =?UTF-8?q?ve=20150%.=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Removed?= =?UTF-8?q?=20the=20"Sub-pixel=20resolution"=20option=20from=20the=20Edit>?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20Options>Plots=20dialog.?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20The=20Line=20to=20?= =?UTF-8?q?Area=20command=20is=20faster=20and=20more=20accurate=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=E2=98=86=20The=20Straighten=20command?= =?UTF-8?q?=20is=20more=20accurate.=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=98=86=20The=20Image>Info=20command=20displays=20more=20info?= =?UTF-8?q?rmation=20about=20=20=20=20=20=20=20=20=20=20=20=20=20ROIs.=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Long-click=20to=20sel?= =?UTF-8?q?ect=20ROIs=20from=20overlays=20now=20also=20works=20with=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20lines.=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=98=86=20The=20Measure=20command=20uses=20Line=20to?= =?UTF-8?q?=20Area=20instead=20of=20Straighten=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20to=20get=20statistics=20from=20segmented=20and=20fr?= =?UTF-8?q?eehand=20lines=20with=20a=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20width=20geater=20than=20one.=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=98=86=20Fixed=20a=20bug=20that=20could=20(rarely)=20caus?= =?UTF-8?q?e=20an=20exception=20during=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20"wipe=20back"=20when=20drawing=20a=20polygon=20or=20polyline?= =?UTF-8?q?.=20In=20"wipe=20=20=20=20=20=20=20=20=20=20=20=20=20back"=20mo?= =?UTF-8?q?de,=20the=20mouse=20behaves=20like=20an=20eraser=20when=20moved?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20backwards=20with=20alt?= =?UTF-8?q?=20key=20down.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ni?= =?UTF-8?q?colas=20De=20Francesco,=20added=20the=20Edit>Selection>Fit=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Rectangle=20command.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20'Dcolam'=20and=20Jan=20Eglinger,?= =?UTF-8?q?=20the=20Edit>Selection>Enlarge=20=20=20=20=20=20=20=20=20comma?= =?UTF-8?q?nd=20no=20longer=20has=20a=20255=20pixel=20limit.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Peter=20Bankhead,=20the=20de?= =?UTF-8?q?fault=20TIFF=20reader=20uses=20the=20=20=20=20=20=20=20=20=20Ha?= =?UTF-8?q?ndleExtraFileTypes=20plugin=20when=20it=20is=20unable=20to=20op?= =?UTF-8?q?en=20a=20file.=20=20=20=20=20=20=20=20=20As=20an=20example,=20.?= =?UTF-8?q?svs=20files=20dragged=20and=20dropped=20on=20the=20"ImageJ"=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20window=20are=20now=20opened=20by=20the?= =?UTF-8?q?=20Bio-Formats=20plugin.=20=20=20=20=20=20=20=E2=96=A1=20Added?= =?UTF-8?q?=20the=20Help>Examples>JavaScript>Overlay=20Text=20example.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,?= =?UTF-8?q?=20added=20a=20"Install=20Keypad=20Shortcuts"=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20command=20to=20the=20ROI=20Menu=20tool.=20Add=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20call("ij.plugin.MacroInstaller.installFromJar?= =?UTF-8?q?",=20"/macros/=20=20=20=20=20=20=20=20=20RoiMenuTool.txt+");=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20to=20the=20Edit>Options>Startup=20dialo?= =?UTF-8?q?g=20to=20have=20the=20shortcuts=20=20=20=20=20=20=20=20=20autom?= =?UTF-8?q?atically=20installed=20on=20startup.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,=20the=20commands=20?= =?UTF-8?q?in=20the=20ROI=20Menu=20tool=20and=20=20=20=20=20=20=20=20=20th?= =?UTF-8?q?e=20"Group"=20setting=20in=20the=20ROI=20Manager's=20Properties?= =?UTF-8?q?=20dialog=20are=20=20=20=20=20=20=20=20=20recordable.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Added=20the=20Math.abs(n),=20Math.acos(?= =?UTF-8?q?n),=20Math.asin(n),=20Math.atan=20=20=20=20=20=20=20=20=20(n),?= =?UTF-8?q?=20Math.atan2(n1,n2),=20Math.ceil(n),=20Math.cos(n),=20Math.exp?= =?UTF-8?q?(n),=20=20=20=20=20=20=20=20=20Math.floor(n),=20Math.log(n),=20?= =?UTF-8?q?Math.log10(n),=20Math.min(n1,n2),=20=20=20=20=20=20=20=20=20Mat?= =?UTF-8?q?h.max(n1,n2),=20Math.pow(n1,n2),=20Math.round(n),=20Math.sin(n)?= =?UTF-8?q?,=20=20=20=20=20=20=20=20=20Math.sqr(n),=20Math.sqrt(n)=20and?= =?UTF-8?q?=20Math.tan(n)=20macro=20functions.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20RoiManager.setGroup(group)=20and=20Ro?= =?UTF-8?q?iManager.selectGroup=20=20=20=20=20=20=20=20=20(group)=20macro?= =?UTF-8?q?=20functions.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ken?= =?UTF-8?q?=20Gilbert,=20added=20the=20getValue("image.size")=20macro=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20function.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Laurent=20Thomas,=20added=20the=20setOption=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20("WaitForCompletion",false)=20macro=20f?= =?UTF-8?q?unction,=20which=20causes=20the=20=20=20=20=20=20=20=20=20next?= =?UTF-8?q?=20exec()=20call=20to=20return=20an=20empty=20string=20and=20no?= =?UTF-8?q?t=20wait=20for=20the=20=20=20=20=20=20=20=20=20command=20being?= =?UTF-8?q?=20executed=20to=20finish.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Nortbert=20Vischer,=20added=20the=20Array.sort=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20(array1,array2,array3...)=20macro=20functi?= =?UTF-8?q?on=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20V?= =?UTF-8?q?olker=20Backer,=20added=20the=20ImagePlus.resize()=20method,=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20which=20is=20recorded=20by=20the=20Imag?= =?UTF-8?q?e>Scale=20and=20Image>Adjust>Size=20=20=20=20=20=20=20=20=20com?= =?UTF-8?q?mands.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fred=20Dam?= =?UTF-8?q?en,=20added=20the=20Plot.setWindowSize()=20method.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Lewis=20Muir,=20fixed=20a=20?= =?UTF-8?q?bug=20the=20caused=20the=20Pixel=20=20=20=20=20=20=20=20=20Insp?= =?UTF-8?q?ection=20Tool's=20red=20selection=20box=20to=20be=20included=20?= =?UTF-8?q?with=20the=20=20=20=20=20=20=20=20=20image=20when=20saving=20in?= =?UTF-8?q?=20GIF,=20JPEG=20or=20PNG=20format.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'cooketho',=20fixed=20a=20bug=20that?= =?UTF-8?q?=20caused=20the=20Edit>Copy=20to=20=20=20=20=20=20=20=20=20Syst?= =?UTF-8?q?em=20command=20to=20sometimes=20not=20work=20as=20expected=20wi?= =?UTF-8?q?th=20composite=20=20=20=20=20=20=20=20=20images.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Fred=20Damen,=20fixed=20bugs=20?= =?UTF-8?q?that=20caused=20the=20=20=20=20=20=20=20=20=20TextRoi.setJustif?= =?UTF-8?q?ication()=20and=20TextRoi.drawPixels()=20methods=20to=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20not=20work=20as=20expected.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Nicolas=20De=20Francesco,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20empty=20=20=20=20=20=20=20=20=20ta?= =?UTF-8?q?bles=20to=20not=20be=20opened=20correctly.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20the=20Color=20Pic?= =?UTF-8?q?ker=20to=20not=20work=20correctly=20=20=20=20=20=20=20=20=20if?= =?UTF-8?q?=20the=20GUI=20scale=20was=20greater=20than=20one.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed=20?= =?UTF-8?q?a=20bug=20that=20could=20cause=20a=20thread=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20deadlock=20in=20plugins=20using=20the=20ImageListener?= =?UTF-8?q?=20interface.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Mic?= =?UTF-8?q?hael=20Schmid,=20fixed=20a=20bug=20that=20caused=20the=20"List?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20coordinates"=20option=20in=20the=20E?= =?UTF-8?q?dit>Selection>Properties=20dialog=20to=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20ignore=20the=20"Origin"=20setting=20in=20the=20Image>Propert?= =?UTF-8?q?ies=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'se?= =?UTF-8?q?bi06',=20fixed=20a=201.52p=20regression=20that=20caused=20the?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20particle=20analyzer=20to=20thow=20an?= =?UTF-8?q?=20exception=20in=20headless=20mode.=20=20=20=E2=80=A2=201.52t?= =?UTF-8?q?=2030=20January=202020=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Laurent=20Thomas,=20added=20a=20"Group"=20field=20to=20?= =?UTF-8?q?the=20Edit>=20=20=20=20=20=20=20=20=20Selection>Properties=20di?= =?UTF-8?q?alog=20and=20an=20"ROI=20Menu"=20tool=20to=20the=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20toolbar's=20>>=20menu.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added=20support?= =?UTF-8?q?=20for=20superscripts=20and=20=20=20=20=20=20=20=20=20subscript?= =?UTF-8?q?s=20in=20plot=20axis=20labels=20(example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added=20a=20"Sep?= =?UTF-8?q?arate=20Image"=20option=20to=20=20=20=20=20=20=20=20=20the=20"L?= =?UTF-8?q?ocation:"=20menu=20of=20the=20Analyze>Tools>Calibration=20Bar?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20dialog.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Selection=20handles=20are=20larger.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Added=20a=20"Bolder=20selections"=20("Roi.set?= =?UTF-8?q?DefaultStrokeWidth(2);")=20=20=20=20=20=20=20=20=20code=20choic?= =?UTF-8?q?e=20to=20the=20Edit>Options>Startup=20dialog.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Mark=20Rivers,=20the=20Help>Exampl?= =?UTF-8?q?es>JavaScript>TeraByte=20=20=20=20=20=20=20=20=20VirtualStack?= =?UTF-8?q?=20example=20now=20generates=20test=20patterns=20and=20supports?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20multiple=20image=20types.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,=20added?= =?UTF-8?q?=20the=20Roi.getDefaultGroup,=20=20=20=20=20=20=20=20=20Roi.set?= =?UTF-8?q?DefaultGroup(group),=20Roi.getGroup,=20Roi.setGroup(group),=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Roi.getDefaultStrokeWidth=20and=20Roi.s?= =?UTF-8?q?etDefaultStrokeWidth()=20macro=20=20=20=20=20=20=20=20=20functi?= =?UTF-8?q?ons,=20and=20the=20corresponding=20Roi=20class=20methods.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Added=20the=20following=20macro=20la?= =?UTF-8?q?nguage=20string=20functions,=20where=20's'=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20is=20a=20string=20variable:=20=20=20=20=20=20=20=20=20s.c?= =?UTF-8?q?harAt(i),=20s.contains(s2),=20s.endsWith(s2),=20s.indexOf(s2),?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20s.lastIndexOf(s2),=20s.length,=20s.m?= =?UTF-8?q?atches(s2),=20s.replace(s1,s2),=20=20=20=20=20=20=20=20=20s.sta?= =?UTF-8?q?rtsWith(s2),=20s.substring(i1,i2),=20s.substring(i),=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20s.toLowerCase,=20s.toUpperCase=20and=20s.trim?= =?UTF-8?q?.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stephen=20Royle?= =?UTF-8?q?,=20fixed=20a=20bug=20on=20macOS=20that=20caused=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20command-h=20keyboard=20shortcut=20(ImageJ>Hid?= =?UTF-8?q?e=20ImageJ)=20to=20not=20work.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Mark=20Rivers,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20the=20cursor=20=20=20=20=20=20=20=20=20location=20and=20pixe?= =?UTF-8?q?l=20value=20to=20not=20be=20displayed=20in=20the=20status=20bar?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20for=20animating=20stacks.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Jeff=20Spector=20and=20Mi?= =?UTF-8?q?chael=20Schmid,=20fixed=20a=20bug=20that=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20caused=20the=20Edit>Selection>Line=20to=20Area=20command?= =?UTF-8?q?=20to=20not=20work=20as=20=20=20=20=20=20=20=20=20expected.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,?= =?UTF-8?q?=20fixed=20a=20bug=20that=20caused=20a=20misleading=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20error=20message=20to=20be=20displayed=20when=20u?= =?UTF-8?q?sing=20the=20saveAs=20=20=20=20=20=20=20=20=20(format,path)=20m?= =?UTF-8?q?acro=20function=20to=20save=20in=20"jpg",=20"png"=20or=20"gif"?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20format=20and=20the=20file=20path=20w?= =?UTF-8?q?as=20incorrect.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20M?= =?UTF-8?q?ichael=20Schmid,=20fixed=20a=20bug=20that=20caused=20macro=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20recording=20to=20not=20work=20correctly?= =?UTF-8?q?=20if=20"Non-blocking=20filter=20=20=20=20=20=20=20=20=20dialog?= =?UTF-8?q?s"=20was=20enabled=20in=20the=20Edit>Options>Misc=20dialog.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Kaul,=20f?= =?UTF-8?q?ixed=20a=20bug=20that=20caused=20the=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?GenericDialog.addSlider()=20method=20to=20not=20use=20enough=20?= =?UTF-8?q?digits=20to=20=20=20=20=20=20=20=20=20the=20right=20of=20the=20?= =?UTF-8?q?decimal=20point=20if=20the=20value=20of=20the=20'stepSize'=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20argument=20was=20very=20small.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed?= =?UTF-8?q?=20several=20live=20profile=20plot=20and=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20LineWidthAdjuster=20bugs.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Norbert=20Vischer,=20fixed=20a=20bug=20that=20?= =?UTF-8?q?caused=20the=20Image>=20=20=20=20=20=20=20=20=20Overay>Flatten?= =?UTF-8?q?=20command=20to=20throw=20an=20exception=20when=20flattening=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20hyperstacks.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20dialogs=20with=20=20=20=20=20=20=20=20=20onl?= =?UTF-8?q?y=20buttons=20to=20put=20the=20focus=20on=20the=20first=20butto?= =?UTF-8?q?n,=20which=20is=20not=20=20=20=20=20=20=20=20=20the=20"OK"=20bu?= =?UTF-8?q?tton=20on=20MacOS=20and=20Linux.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20John=20Fozard=20and=20'mountain=5Fman',=20fixe?= =?UTF-8?q?d=20a=20bug=20that=20=20=20=20=20=20=20=20=20caused=20angle=20m?= =?UTF-8?q?easurements=20of=20lines=20a=20few=20pixels=20in=20length=20to?= =?UTF-8?q?=20be=20=20=20=20=20=20=20=20=20incorrect.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'SarenT',=20fixed=20a=20bug=20that=20?= =?UTF-8?q?caused=20the=20=20=20=20=20=20=20=20=20ImagePlus.getShortTitle(?= =?UTF-8?q?)=20method=20to=20truncate=20file=20names=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20containing=20spaces.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Norbert=20Vischer,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20a=20"Has=20=20=20=20=20=20=20=20=20Calibration=20Bar"=20erro?= =?UTF-8?q?r=20when=20attempting=20to=20adjust=20brightness=20and=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20contrast=20after=20clicking=20on=20"Cancel"?= =?UTF-8?q?=20in=20the=20Analyze>Tools>=20=20=20=20=20=20=20=20=20Calibrat?= =?UTF-8?q?ion=20Bar=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Fernando=20Garcia-Polite,=20fixed=20a=201.52q=20regression?= =?UTF-8?q?=20that=20=20=20=20=20=20=20=20=20caused=20the=20run("Point=20T?= =?UTF-8?q?ool...",options)=20macro=20function=20to=20no=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20longer=20work.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Michael=20Schmid,=20fixed=20a=201.52q=20regression=20th?= =?UTF-8?q?at=20caused=20=20=20=20=20=20=20=20=20duplicate=20recordinging?= =?UTF-8?q?=20of=20non-blocking=20dialogs.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Dorai=20Iyer,=20fixed=20a=201.52s=20regression?= =?UTF-8?q?=20that=20caused=20=20=20=20=20=20=20=20=20characters=20entered?= =?UTF-8?q?=20using=20the=20text=20tool=20to=20sometimes=20be=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20repeated.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Rodrigo=20Goncalves=20and=20Curtis=20Rueden,=20fixed=20?= =?UTF-8?q?a=201.52q=20=20=20=20=20=20=20=20=20regression=20that=20caused?= =?UTF-8?q?=20the=20"Movie=20(FFMPEG)"=20plugin=20to=20throw=20a=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20NullPointerException.=20=20=20=E2=80=A2=201.5?= =?UTF-8?q?2s=2010=20December=202019=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20'LPUoO',=20added=20the=20Plugins>Utilities>Commands=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20command,=20which=20opens=20a=20list=20o?= =?UTF-8?q?f=20commonly=20and=20recently=20used=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?commands.=20=20=20=20=20=20=20=E2=96=A1=20By=20default,=20image?= =?UTF-8?q?=20windows=20now=20open=20just=20below=20the=20"ImageJ"=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20window.=20=20=20=20=20=20=20=E2=96=A1=20Th?= =?UTF-8?q?anks=20to=20Norbert=20Vischer,=20adding=20an=20exclamation=20ma?= =?UTF-8?q?rk=20to=20=20=20=20=20=20=20=20=20showStatus()=20messages=20avo?= =?UTF-8?q?ids=20status=20bar=20flicker=20(example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20the=20Process>Fil?= =?UTF-8?q?ters>Convolve=20dialog=20=20=20=20=20=20=20=20=20displays=20fee?= =?UTF-8?q?dback=20on=20the=20kernel=20as=20it=20is=20modified.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Added=20the=20Macros>Set=20as=20Repeat?= =?UTF-8?q?=20Command=20command=20to=20the=20macro=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20editor.=20After=20running=20this=20command,=20the=20selected?= =?UTF-8?q?=20macro=20code=20=20=20=20=20=20=20=20=20will=20run=20each=20t?= =?UTF-8?q?ime=20you=20press=20'r',=20the=20shortcut=20for=20the=20Process?= =?UTF-8?q?>=20=20=20=20=20=20=20=20=20Repeat=20Command=20command.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20a?= =?UTF-8?q?dded=20a=20"Splash=20Screen"=20code=20choice=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20to=20the=20Edit>Options>Startup=20dialog.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Changed=20the=20shortcut=20for=20Process>R?= =?UTF-8?q?epeat=20Command=20to=20'r'=20and=20the=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20shortcut=20for=20File>Revert=20to=20shift-r.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Added=20a=20"Reuse=20'FFT=20of...'=20window"?= =?UTF-8?q?=20option=20to=20the=20Process>FFT>=20=20=20=20=20=20=20=20=20F?= =?UTF-8?q?FT=20Options=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Peter=20Haub,=20chroma=20subsampling=20is=20disabled=20?= =?UTF-8?q?when=20=20=20=20=20=20=20=20=20saving=20in=20JPEG=20format=20if?= =?UTF-8?q?=20the=20Quality=20setting=20(Edit>Options>=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Input/Output)=20is=2090=20or=20higher,=20resulting=20i?= =?UTF-8?q?n=20higher=20quality=20=20=20=20=20=20=20=20=20images=20but=20l?= =?UTF-8?q?arger=20file=20sizes.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20Karen=20Collins,=20improved=20the=20FITS=20Writer.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Added=20the=20Help>Examples>JavaScri?= =?UTF-8?q?pt>JPEG=20Quality=20Plot=20example.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Removed=20the=20obsolete=20"Draw=20grid=20lines"=20?= =?UTF-8?q?option=20from=20the=20Edit>=20=20=20=20=20=20=20=20=20Options>P?= =?UTF-8?q?lot=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Mic?= =?UTF-8?q?hael=20Schmid,=20the=20ImagePlus.updateAndDraw()=20method=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20adds=20a=20scroll=20bar=20to=20the=20image?= =?UTF-8?q?=20window=20if=20the=20stack=20size=20has=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20changed=20to=20greater=20than=20one.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20added=20the=20File.?= =?UTF-8?q?getDefaultDir,=20=20=20=20=20=20=20=20=20File.setDefaultDir(pat?= =?UTF-8?q?h),=20String.trim(string)=20and=20String.join=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20(array)=20macro=20functions.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Peter=20Haub,=20added=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20JpegWriter.disableChromaSubsampling()=20metho?= =?UTF-8?q?d=20(example=20script).=20=20=20=20=20=20=20=E2=96=A1=20Added?= =?UTF-8?q?=20the=20ImageProcessor.setFontSize()=20and=20Plot.setFontSize(?= =?UTF-8?q?)=20=20=20=20=20=20=20=20=20methods.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'kefe'=20and=20Herbie,=20fixed=20a=20?= =?UTF-8?q?bug=20that=20caused=20the=20Stack=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20Images=20command=20to=20use=20slice=20labels=20as=20image=20?= =?UTF-8?q?titles=20even=20when=20=20=20=20=20=20=20=20=20they=20contained?= =?UTF-8?q?=20"/",=20"\"=20or=20":"=20characters.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'sudgy'=20and=20Jan=20Eglinger,=20fix?= =?UTF-8?q?ed=20a=20bug=20the=20caused=20=20=20=20=20=20=20=20=20iteration?= =?UTF-8?q?=20over=20the=20points=20contained=20in=20an=20ROI=20to=20throw?= =?UTF-8?q?=20an=20=20=20=20=20=20=20=20=20exception=20for=20rectangular?= =?UTF-8?q?=20ROIs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert?= =?UTF-8?q?=20Vischer,=20fixed=20a=20bug=20that=20caused=20the=20options?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20dialogs=20for=20the=20Rounded=20Rect?= =?UTF-8?q?angle,=20Multi-point=20and=20Arrow=20tools=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20to=20generate=20"Duplicate=20keyword"=20errors=20when=20t?= =?UTF-8?q?he=20Recorder=20was=20=20=20=20=20=20=20=20=20running.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Peter=20Haub,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20caused=20the=20Image=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?Calculator=20to=20not=20work=20as=20expected=20with=20RGB=20ima?= =?UTF-8?q?ges=20when=20using=20=20=20=20=20=20=20=20=20the=20"Difference"?= =?UTF-8?q?=20operator=20and=20the=20"32-bit=20(float)=20result"=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20option=20was=20enabled.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20the=20"Font=20siz?= =?UTF-8?q?e"=20setting=20in=20the=20Edit>=20=20=20=20=20=20=20=20=20Optio?= =?UTF-8?q?ns>Plots=20dialog=20to=20be=20ignored.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20the=20run=20=20=20=20=20=20=20=20=20("Calibratio?= =?UTF-8?q?n=20Bar...",options)=20macro=20function=20to=20ignore=20calls?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20to=20setOption("AntialiasedText",boo?= =?UTF-8?q?lean).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20go=20Sethur,=20?= =?UTF-8?q?worked=20around=20a=20Windows=2010=20and=20OpenJDK=20bug=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20that=20caused=20the=20"thumb"=20on=20scrol?= =?UTF-8?q?lbars=20to=20be=20hard=20to=20see.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20the=20Analyze>Set=20=20=20=20=20=20=20=20=20Scal?= =?UTF-8?q?e=20command=20to=20not=20be=20correctly=20recorded.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Sethur,=20fixed=20a=20bug=20?= =?UTF-8?q?that=20caused=20the=20Image>Stacks>=20=20=20=20=20=20=20=20=20T?= =?UTF-8?q?ools>Substack=20Maker=20command=20to=20not=20carry=20over=20the?= =?UTF-8?q?=20calibration=20=20=20=20=20=20=20=20=20of=20hyperstacks.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Sethur,=20fixed=20b?= =?UTF-8?q?ugs=20that=20caused=20the=20DICOM=20reader=20to=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20not=20correctly=20open=20multi-frame=20DICOMs,=20an?= =?UTF-8?q?d=2016-bit=20signed=20=20=20=20=20=20=20=20=20DICOMs,=20with=20?= =?UTF-8?q?RescaleSlope=3D1=20and=20RescaleIntercept!=3D0.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20m?= =?UTF-8?q?acro=20interpreter=20bug=20that=20=20=20=20=20=20=20=20=20preve?= =?UTF-8?q?nted=20array=20functions=20like=20newArray()=20and=20split()=20?= =?UTF-8?q?from=20=20=20=20=20=20=20=20=20being=20used=20as=20arguments=20?= =?UTF-8?q?to=20user-defined=20functions.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20the=20Window=20menu=20=20=20=20=20=20=20=20=20to=20not=20be?= =?UTF-8?q?=20updated=20when=20saving=20a=20table.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20the=20Image>=20=20=20=20=20=20=20=20=20Transform?= =?UTF-8?q?>Translate=20command=20to=20ignore=20overlays.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20b?= =?UTF-8?q?ug=20that=20caused=20right=20justified=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20text=20in=20overlays=20to=20not=20be=20translated=20correctl?= =?UTF-8?q?y.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik?= =?UTF-8?q?,=20worked=20around=20a=20Java=20bug=20that=20caused=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20the=20OpenDialog.setDefaultDirectory(path)=20?= =?UTF-8?q?method=20to=20sometimes=20=20=20=20=20=20=20=20=20not=20work=20?= =?UTF-8?q?as=20expected=20on=20Windows=20when=20the=20path=20used=20"/"?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20separators.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20macros=20calling=20=20=20=20=20=20=20=20=20open(?= =?UTF-8?q?"")=20to=20not=20be=20aborted=20when=20the=20user=20clicked=20"?= =?UTF-8?q?Cancel"=20in=20=20=20=20=20=20=20=20=20the=20file=20open=20dial?= =?UTF-8?q?og=20and=20"Use=20JFileChooser=20to=20open/save"=20was=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20enabled=20in=20the=20Edit>Options>Input/Outpu?= =?UTF-8?q?t=20dialog=20box.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Nicolas=20De=20Francesco,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Process>FFT>Custom=20Filter=20to=20o?= =?UTF-8?q?nly=20process=20the=20current=20stack=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20slice=20even=20though=20"Process=20entire=20stack"=20was=20c?= =?UTF-8?q?hecked=20in=20the=20=20=20=20=20=20=20=20=20dialog=20box.=20=20?= =?UTF-8?q?=20=E2=80=A2=201.52r=2026=20October=202019=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Plot=20enhancements,=20thanks=20to=20Michael=20Schm?= =?UTF-8?q?id:=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20The=20More>>=20?= =?UTF-8?q?menus=20have=20immediate=20preview.=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=98=86=20New=20More>>Use=20Template=20menu=20(also=20w?= =?UTF-8?q?ith=20immediate=20preview),=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20useful=20for=20creating=20plots=20with=20the=20same=20style.?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Clicking=20into=20?= =?UTF-8?q?a=20rectangular=20area=20next=20to=20an=20axis=20shows=20the=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20corresponding=20axis=20dial?= =?UTF-8?q?og.=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20When=20adding?= =?UTF-8?q?=20a=20curve=20to=20a=20"Live"=20plot,=20it=20remains=20when=20?= =?UTF-8?q?the=20=20=20=20=20=20=20=20=20=20=20=20=20plot=20is=20updated.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jan=20Eglinger,?= =?UTF-8?q?=20saving=20TIFF=20images=20and=20stacks=20to=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20network=20drives=20is=20up=20to=2010=20times=20faster.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Marcel=20Boeglin?= =?UTF-8?q?,=20the=20title=20of=20the=20selection=20list=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20created=20by=20Image>Overlay>List=20Elements=20include?= =?UTF-8?q?s=20the=20image=20name.=20=20=20=20=20=20=20=20=20And,=20when?= =?UTF-8?q?=20you=20double=20click=20on=20a=20line,=20the=20image=20associ?= =?UTF-8?q?ated=20with=20=20=20=20=20=20=20=20=20the=20list=20is=20activat?= =?UTF-8?q?ed,=20the=20corresponding=20selection=20is=20activated=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20and=20stacks=20are=20set=20to=20the=20selecti?= =?UTF-8?q?on=20position.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Mi?= =?UTF-8?q?chael=20Schmid,=20Process>Filters>Gaussian=20Blur=20now=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20uses=20a=20Thread=20Pool,=20reducing=20ove?= =?UTF-8?q?rhead=20and=20making=20it=20faster=20for=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20small=20images.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20Stein=20Rorvik,=20you=20can=20now=20separately=20view=20an?= =?UTF-8?q?d=20set=20the=20=20=20=20=20=20=20=20=20X,=20Y=20and=20Z=20dime?= =?UTF-8?q?nsion=20units=20in=20the=20Image>Properties=20dialog=20box.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ryan=20Siu,=20the?= =?UTF-8?q?=20double=20click=20interval=20used=20to=20complete=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20a=20polygon=20selection=20is=20reduced=20from=20?= =?UTF-8?q?500ms=20to=20250ms=20and=20a=20=20=20=20=20=20=20=20=20confirma?= =?UTF-8?q?tion=20dialog=20is=20displayed=20when=20completing=20the=20sele?= =?UTF-8?q?ction=20=20=20=20=20=20=20=20=20and=20there=20are=20more=20than?= =?UTF-8?q?=2025=20points.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20S?= =?UTF-8?q?tein=20Rorvik,=20the=20slider=20in=20the=20Image>Transform>=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Rotate=20dialog=20now=20shows=20the=20a?= =?UTF-8?q?ngle=20using=20two=20decimal=20places=20and=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20the=20slider=20arrows=20increment/decrement=20by=200.1?= =?UTF-8?q?=20degrees.=20Use=20the=20=20=20=20=20=20=20=20=20keyboard=20ar?= =?UTF-8?q?row=20keys=20as=20a=20shortcut=20to=20finely=20adjust=20the=20a?= =?UTF-8?q?ngle.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'felix.b',?= =?UTF-8?q?=20labels=20of=20multi-point=20tool=20markers=20get=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20larger=20as=20the=20markers=20get=20larger=20and?= =?UTF-8?q?=20there=20are=20two=20new=20marker=20=20=20=20=20=20=20=20=20s?= =?UTF-8?q?izes=20("XXL"=20and=20"XXXL").=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Stein=20Rorvik,=20the=20Image>Adjust>Coordinates?= =?UTF-8?q?=20command=20=20=20=20=20=20=20=20=20can=20now=20be=20used=20to?= =?UTF-8?q?=20set=20the=20Z=20unit.=20=20=20=20=20=20=20=E2=96=A1=20Generi?= =?UTF-8?q?cDialogs=20display=20an=20error=20message=20if=20show()=20is=20?= =?UTF-8?q?called=20=20=20=20=20=20=20=20=20instead=20of=20showDialog().?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20getDir("download?= =?UTF-8?q?s")=20macro=20function=20and=20the=20IJ.getDir=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20("downloads")=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20added=20the=20Roi.g?= =?UTF-8?q?etPosition=20=20=20=20=20=20=20=20=20(channel,slice,frame),=20R?= =?UTF-8?q?oi.setPosition(channel,slice,frame),=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?Stack.setXUnit(),=20Stack.setYUnit(),=20Stack.setUnits=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20(x,y,z,time,value),=20Stack.getOrthoViews(x,y?= =?UTF-8?q?,z),=20=20=20=20=20=20=20=20=20Stack.getOrthoViewsIDs(xy,yz,xz)?= =?UTF-8?q?,=20File.getDirectory(path)=20and=20=20=20=20=20=20=20=20=20Fil?= =?UTF-8?q?e.getNameWithoutExtension(path)=20macro=20functions.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Leroy=20Olivier,=20added?= =?UTF-8?q?=20the=20Stack.getPointPosition=20=20=20=20=20=20=20=20=20(inde?= =?UTF-8?q?x)=20macro=20function.=20=20=20=20=20=20=20=E2=96=A1=20Added=20?= =?UTF-8?q?the=20IJ.openAsByteBuffer()=20method=20(example).=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed=20?= =?UTF-8?q?a=20bug=20that=20caused=20the=20getInfo=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20("window.title")=20macro=20function=20to=20not=20work=20as?= =?UTF-8?q?=20expected=20after=20=20=20=20=20=20=20=20=20opening=20a=20lar?= =?UTF-8?q?ge=20text=20file=20using=20open("/path/to/largeFile.txt").=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20f?= =?UTF-8?q?ixed=20a=20bug=20that=20caused=20min/max=20values=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20of=20calibrated=2016-bit=20images=20to=20be=20sh?= =?UTF-8?q?own=20without=20decimals=20in=20the=20=20=20=20=20=20=20=20=20"?= =?UTF-8?q?B&C"=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20De?= =?UTF-8?q?borah=20Schmidt,=20fixed=20a=20bug=20that=20caused=20Fiji=20use?= =?UTF-8?q?rs=20=20=20=20=20=20=20=20=20to=20not=20be=20able=20to=20update?= =?UTF-8?q?=20via=20HTTPS=20through=20a=20proxy.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Worked=20around=20a=20macOS=20bug=20that=20caused?= =?UTF-8?q?=20the=20keyboard=20arrow=20keys=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20not=20function=20as=20shortcuts=20for=20the=20increment/decr?= =?UTF-8?q?ement=20arrows=20=20=20=20=20=20=20=20=20in=20GenericDialog=20s?= =?UTF-8?q?liders.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Marcel=20?= =?UTF-8?q?Boeglin,=20fixed=20a=20bug=20that=20could=20cause=20the=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20particle=20analyzer=20to=20throw=20an=20ex?= =?UTF-8?q?ception=20when=20creating=20an=20=20=20=20=20=20=20=20=20overla?= =?UTF-8?q?y=20and=20no=20particles=20were=20detected.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Noreen=20Walker,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20image=20type=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20to=20unexpectadly=20to=20change=20to=20COLOR=5F256=20when=20?= =?UTF-8?q?using=20the=20"glasbey"=20=20=20=20=20=20=20=20=20LUT.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20'mountain=5Fman',=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20images=20to=20not=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20be=20displayed=20correctly=20if=20a=20LUT=20was=20a?= =?UTF-8?q?pplied=20before=20the=20image=20=20=20=20=20=20=20=20=20was=20s?= =?UTF-8?q?hown.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'mountain?= =?UTF-8?q?=5Fman',=20fixed=20a=20bug=20that=20caused=208-bit=20PNG=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20images=20with=20LUTs=20to=20open=20as=20ty?= =?UTF-8?q?pe=20COLOR=5F256.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Jan=20Brocher,=20fixed=20a=20bug=20that=20caused=20the=20Edi?= =?UTF-8?q?t>=20=20=20=20=20=20=20=20=20Selection>Create=20Selection=20com?= =?UTF-8?q?mand=20to=20ignore=20the=20"Black=20=20=20=20=20=20=20=20=20bac?= =?UTF-8?q?kground"=20setting=20with=20non-thresholded=20binary=20images.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'mountain=5Fman'?= =?UTF-8?q?,=20fixed=20a=20bug=20that=20caused=20ImageJ=20to=20not=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20be=20be=20able=20to=20open=20TIFF=20files?= =?UTF-8?q?=20saved=20without=20a=20file=20path.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Birgit=20Moeller,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20"Label"=20=20=20=20=20=20=20=20=20colu?= =?UTF-8?q?mn=20to=20not=20be=20sorted=20when=20using=20the=20"Sort"=20com?= =?UTF-8?q?mand=20in=20=20=20=20=20=20=20=20=20Results=20tables.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20lguerard=20and=20mountain?= =?UTF-8?q?=5Fman,=20fixed=20a=20bug=20that=20caused=20an=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20ROI's=20hyperstack=20position=20to=20be=20lost=20wh?= =?UTF-8?q?en=20adding=20it=20to=20the=20=20=20=20=20=20=20=20=20RoiManage?= =?UTF-8?q?r.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Philippe=20Car?= =?UTF-8?q?l=20and=20Michael=20Schmid,=20fixed=20a=20bug=20that=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20caused=20OvalRoi.getMask()=20to=20sometimes?= =?UTF-8?q?=20return=20a=20zero-width=20mask.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Francois=20Gannier=20and=20Michael=20?= =?UTF-8?q?Schmid,=20fixed=20a=201.52o=20=20=20=20=20=20=20=20=20regressio?= =?UTF-8?q?n=20that=20caused=20the=20"Log"=20window=20to=20unexpectedly=20?= =?UTF-8?q?become=20=20=20=20=20=20=20=20=20the=20active=20window.=20=20?= =?UTF-8?q?=20=E2=80=A2=201.52q=2013=20September=202019=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20added=20the=20?= =?UTF-8?q?"Non-blocking=20filter=20=20=20=20=20=20=20=20=20dialogs"=20opt?= =?UTF-8?q?ion=20to=20Edit>Options>Misc.=20The=20Convolve,=20Mean,=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20Median,=20Minimum,=20Maximum,=20Variance?= =?UTF-8?q?=20and=20Image>Math=20commands=20use=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?NonBlockingGenericDialogs=20when=20this=20option=20is=20enabled?= =?UTF-8?q?.=20=20=20=20=20=20=20=E2=96=A1=20"Save=20changes=3F"=20dialogs?= =?UTF-8?q?=20on=20Windows=20and=20Linux=20now=20use=20"Don't=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Save",=20"Cancel"=20and=20"Save"=20buttons.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbret=20Vischer,?= =?UTF-8?q?=20added=20the=20Dialog.addMessage=20=20=20=20=20=20=20=20=20(s?= =?UTF-8?q?tring,fontSize,fontColor)=20macro=20function=20(example).=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Noreen=20Walker,=20the?= =?UTF-8?q?=20Image>Stacks>Statistics=20command=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?and=20the=20StackStatistics=20class=20now=20calculate=20the=20m?= =?UTF-8?q?edian=20of=20=20=20=20=20=20=20=20=20non-float=20images.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Drag=20and=20drop=20opening=20of=20i?= =?UTF-8?q?mages,=20tables=20and=20LUTs=20is=20recorded.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20added=20the=20?= =?UTF-8?q?Plot.showValuesWithLabels()=20=20=20=20=20=20=20=20=20macro=20f?= =?UTF-8?q?unction=20and=20the=20Plot.getResultsTableWithLabels()=20method?= =?UTF-8?q?.=20=20=20=20=20=20=20=20=20Both=20create=20tables=20that=20use?= =?UTF-8?q?=20legend=20labels=20and/or=20axis=20labels=20as=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20column=20headings.=20The=20List,=20Save=20Data=20an?= =?UTF-8?q?d=20Copy=20All=20Data=20plot=20=20=20=20=20=20=20=20=20window?= =?UTF-8?q?=20commands=20also=20now=20use=20labels.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20added=20the=20ge?= =?UTF-8?q?tValue("Length")=20macro=20=20=20=20=20=20=20=20=20function.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,?= =?UTF-8?q?=20added=20the=20IJ.pad(string,digits)=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20macro=20function=20and=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20the=20ImagePlus?= =?UTF-8?q?=20lock()=20and=20unlock()=20=20=20=20=20=20=20=20=20methods=20?= =?UTF-8?q?now=20support=20multiple=20lock/unlock=20operations=20by=20the?= =?UTF-8?q?=20same=20=20=20=20=20=20=20=20=20thread.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20IJ.getValue(imp,measurement)=20method?= =?UTF-8?q?,=20where=20=20=20=20=20=20=20=20=20'measurement'=20is=20"Area"?= =?UTF-8?q?,=20"Mean",=20"StdDev",=20etc.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20File>Import>=20=20=20=20=20=20=20=20=20Image=20Sequence=20to?= =?UTF-8?q?=20not=20correctly=20handle=20RGB48=20images=20when=20"Use=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20virtual=20stack"=20was=20enabled.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fran=C3=A7ois=20Gannie?= =?UTF-8?q?r,=20fixed=20a=20bug=20that=20caused=20the=20unit=20to=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20not=20be=20set=20when=20"Function:"=20was=20s?= =?UTF-8?q?et=20to=20"None"=20in=20the=20Analyze>=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20Calibrate=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20'Matthew',=20fixed=20bugs=20that=20cause=20the=20Table.?= =?UTF-8?q?deleteRows=20=20=20=20=20=20=20=20=20()=20macro=20function=20an?= =?UTF-8?q?d=20IJ.deleteRows()=20method=20to=20not=20update=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20particle=20analyzer=20overlays.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixed=20bugs?= =?UTF-8?q?=20that=20caused=20tables=20with=20=20=20=20=20=20=20=20=20miss?= =?UTF-8?q?ing=20columns=20or=20rows=20to=20not=20be=20opened=20correctly.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Sara=20Vecchio?= =?UTF-8?q?=20and=20Michael=20Schmid,=20fixed=20a=20bug=20that=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20caussed=20the=20curve=20fitter=20to=20throw=20an?= =?UTF-8?q?=20exception=20if=20all=20data=20=20=20=20=20=20=20=20=20points?= =?UTF-8?q?=20contained=20NaNs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20t?= =?UTF-8?q?o=20Robert=20Haase,=20fixed=20a=20bug=20that=20caused=20the=20P?= =?UTF-8?q?rocess>=20=20=20=20=20=20=20=20=20Find=20Maxima=20to=20throw=20?= =?UTF-8?q?an=20exception=20in=20Fiji=20headless=20mode.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Stephen=20Royle,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20run=20=20=20=20=20=20=20=20=20("Fill")?= =?UTF-8?q?=20macro=20function=20to=20ignore=20setColor(pixelValue)=20call?= =?UTF-8?q?s.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'mendel',=20fi?= =?UTF-8?q?xed=20a=20bug=20that=20caused=20enlarged=20ROIs=20to=20be=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20shifted=20if=20the=20polygon=20defining=20?= =?UTF-8?q?the=20original=20ROI=20had=20points=20=20=20=20=20=20=20=20=20o?= =?UTF-8?q?utside=20the=20filled=20polygon.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bug=20that=20c?= =?UTF-8?q?ould=20cause=20ImageJ=20=20=20=20=20=20=20=20=20to=20freezes=20?= =?UTF-8?q?when=20running=20macros=20that=20manipulate=20stacks.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixe?= =?UTF-8?q?d=20a=20bug=20that=20caused=20the=20numeric=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20field=20in=20GenericDialog=20sliders=20to=20be=20too?= =?UTF-8?q?=20narrow=20when=20the=20=20=20=20=20=20=20=20=20maximum=20valu?= =?UTF-8?q?e=20was=20greater=20than=209999.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Norbert=20Vischer,=20fixed=20a=20bug=20that=20?= =?UTF-8?q?caused=20the=20getValue=20=20=20=20=20=20=20=20=20(x,y)=20macro?= =?UTF-8?q?=20function=20to=20not=20interpolate=20when=20x=20or=20y=20were?= =?UTF-8?q?=20real=20=20=20=20=20=20=20=20=20numbers.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20getPixel=20=20=20=20=20=20=20=20=20(x,?= =?UTF-8?q?y)=20macro=20function=20to=20not=20return=20raw=20pixel=20value?= =?UTF-8?q?s=20when=20x=20or=20y=20=20=20=20=20=20=20=20=20were=20real=20n?= =?UTF-8?q?umbers.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'mountain?= =?UTF-8?q?=5Fman',=20fixed=20a=20bug=20that=20caused=20line=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20selections=20to=20not=20be=20correctly=20convert?= =?UTF-8?q?ed=20to=20ShapeRois.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20t?= =?UTF-8?q?o=20Jeremy=20Adler,=20fixed=20a=20regression=20that=20caused=20?= =?UTF-8?q?the=20the=20=20=20=20=20=20=20=20=20makeSelection(10,=20xpoints?= =?UTF-8?q?,=20ypoints)=20macro=20function=20to=20throw=20an=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20exception.=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20Dan=20McDonald,=20fixed=20a=20regression=20that=20caus?= =?UTF-8?q?ed=20the=20Raw=20=20=20=20=20=20=20=20=20File=20Opener=20to=20t?= =?UTF-8?q?hrow=20an=20exception.=20=20=20=20=20=20=20=E2=96=A1=20Fixed=20?= =?UTF-8?q?a=201.52a=20regression=20that=20caused=20tables=20created=20by?= =?UTF-8?q?=20the=20gel=20=20=20=20=20=20=20=20=20analyzer=20to=20not=20ha?= =?UTF-8?q?ve=20row=20numbers.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Hyung-song=20Nam=20and=20Curtis=20Rueden,=20fixed=20a=201.52?= =?UTF-8?q?o=20=20=20=20=20=20=20=20=20regression=20that=20caused=20the=20?= =?UTF-8?q?Channels=20tool=20on=20macOS=20to=20become=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20unresponsive.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Florian=20Jug,=20fixed=20a=201.52o=20regression=20that=20cau?= =?UTF-8?q?sed=20the=20=20=20=20=20=20=20=20=20"Auto"=20button=20in=20the?= =?UTF-8?q?=20"B&C"=20tool=20to=20not=20have=20focus=20on=20macOS.=20=20?= =?UTF-8?q?=20=E2=80=A2=201.52p=2022=20June=202019=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Uwe=20Schmidt,=20improved=20the=20sup?= =?UTF-8?q?port=20for=20multiple=20screen=20=20=20=20=20=20=20=20=20setups?= =?UTF-8?q?:=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Placement=20of=20?= =?UTF-8?q?first=20image=20window=20is=20more=20predictable.=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=98=86=20Reliably=20determine=20the=20c?= =?UTF-8?q?orrect=20screen=20for=20a=20given=20location=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20or=20window,=20for=20example=20to=20determ?= =?UTF-8?q?ine=20if=20a=20window=20can=20be=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20enlarged.=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20?= =?UTF-8?q?If=20there=20is=20ambiguity=20about=20which=20screen=20to=20use?= =?UTF-8?q?,=20the=20one=20=20=20=20=20=20=20=20=20=20=20=20=20that=20cont?= =?UTF-8?q?ains=20the=20main=20ImageJ=20window=20will=20be=20chosen.=20For?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20example=20Plugins>Utilit?= =?UTF-8?q?ies>Capture=20Screen=20and=20Windows>Tile=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20use=20the=20screen=20with=20the=20main=20Imag?= =?UTF-8?q?eJ=20window.=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Dialog?= =?UTF-8?q?s=20are=20shown=20on=20the=20screen=20containing=20the=20main?= =?UTF-8?q?=20ImageJ=20=20=20=20=20=20=20=20=20=20=20=20=20window.=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=E2=98=86=20Maximized=20image=20wind?= =?UTF-8?q?ows=20no=20longer=20revert=20to=20the=20main=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20screen.=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=98=86=20Improved=20behavior=20of=20"+"=20(Image>Zoom>In)=20?= =?UTF-8?q?command.=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Code=20sim?= =?UTF-8?q?plification,=20especially=20by=20removing=20special=20cases=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20for=20Linux.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20ImageJ=20displays=20a=20warning=20dialog=20be?= =?UTF-8?q?fore=20deleting=20a=20multi-point=20=20=20=20=20=20=20=20=20sel?= =?UTF-8?q?ection.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'alex',?= =?UTF-8?q?=20the=20FITS=20Reader=20no=20longer=20flips=20images=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20vertically=20so=20inspection=20of=20pixels=20?= =?UTF-8?q?will=20produce=20the=20expected=20=20=20=20=20=20=20=20=20value?= =?UTF-8?q?s.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutte?= =?UTF-8?q?rer,=20added=20the=20getValue(measurement)=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20macro=20function,=20where=20'measurement'=20is=20"Mean",?= =?UTF-8?q?=20"Median",=20=20=20=20=20=20=20=20=20"Feret",=20etc.=20(examp?= =?UTF-8?q?le).=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20getValue(x,y?= =?UTF-8?q?)=20macro=20function=20and=20the=20=20=20=20=20=20=20=20=20Imag?= =?UTF-8?q?eProcessor.getValue(x,y)=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20"Herbie",=20restored=20macro=20suppor?= =?UTF-8?q?t=20for=20the=20"lightGray",=20=20=20=20=20=20=20=20=20"darkGra?= =?UTF-8?q?y"=20and=20"pink"=20named=20colors.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Somsubhro=20Chaudhuri,=20added=20the?= =?UTF-8?q?=20getValue=20=20=20=20=20=20=20=20=20("selection.angle")=20mac?= =?UTF-8?q?ro=20function=20and=20the=20Rotator.getAngle()=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20method.=20=20=20=20=20=20=20=E2=96=A1=20Added=20the?= =?UTF-8?q?=20getValue("selection.size")=20macro=20function.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Added=20the=20setOption("CopyHeadings",boo?= =?UTF-8?q?lean)=20macro=20function.=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20Stein=20Rorvik,=20added=20the=20Roi.setAntiAlias(boole?= =?UTF-8?q?an)=20=20=20=20=20=20=20=20=20macro=20function,=20which=20can?= =?UTF-8?q?=20be=20used=20to=20control=20antialiasing=20when=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20drawing=20selections=20(example).=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20'MLdish',=20added=20the=20Parti?= =?UTF-8?q?cleAnalyzer.setSummaryTable=20=20=20=20=20=20=20=20=20()=20meth?= =?UTF-8?q?od=20(JavaScript=20example).=20=20=20=20=20=20=20=E2=96=A1=20Th?= =?UTF-8?q?anks=20to=20Wilhelm=20Burger,=20added=20the=20Menus.add(menuPat?= =?UTF-8?q?h,class)=20=20=20=20=20=20=20=20=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Philippe=20Carl,=20added=20the=20RoiM?= =?UTF-8?q?anager.getErrorMessage()=20=20=20=20=20=20=20=20=20method.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,?= =?UTF-8?q?=20updated=20the=20Javadoc=20of=20the=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20MaximumFinder.getMaxima()=20methods=20to=20make=20it=20clear?= =?UTF-8?q?er=20that=20the=20=20=20=20=20=20=20=20=20npoints=20variable=20?= =?UTF-8?q?of=20the=20returned=20Polygon=20is=20the=20number=20of=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20maxima=20found,=20not=20the=20length=20of=20t?= =?UTF-8?q?he=20xpoints=20variable.=20=20=20=20=20=20=20=E2=96=A1=20Made?= =?UTF-8?q?=20the=20Toolbar.builtInTools=20array=20public.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Mikael=20Eriksson,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20caused=20the=20particle=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20analyzer's=20"Summary"=20table=20to=20not=20be=20accessible?= =?UTF-8?q?=20in=20macros=20run=20=20=20=20=20=20=20=20=20from=20the=20com?= =?UTF-8?q?mand=20line=20using=20the=20-batch=20option.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Andrew=20Clark,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20Edit>Undo=20to=20=20=20=20=20=20=20=20=20del?= =?UTF-8?q?ete=20all=20stack=20slices=20except=20the=20current=20one=20aft?= =?UTF-8?q?er=20using=20the=20=20=20=20=20=20=20=20=20flood=20fill=20tool.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'Nhthayer',=20fi?= =?UTF-8?q?xed=20a=20bug=20that=20caused=20imageJ=20to=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20incorrectly=20read=20TIFF=20stacks=20created=20by=20th?= =?UTF-8?q?e=20Python=20tifffile=20=20=20=20=20=20=20=20=20package=20when?= =?UTF-8?q?=20the=20"imagej=3DTrue"=20option=20was=20used.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Marcel=20Boeglin,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20caused=20the=20Image>=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20Adjust>Size=20command=20to=20throw=20on=20exception=20with?= =?UTF-8?q?=20XYCT=20=20=20=20=20=20=20=20=20hyperstacks.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Francisco=20Romanos,=20fixed=20?= =?UTF-8?q?a=20bug=20that=20caused=20the=20run=20=20=20=20=20=20=20=20=20(?= =?UTF-8?q?"Scale...",options)=20macro=20function=20to=20ignore=20the=20'i?= =?UTF-8?q?nterpolate'=20=20=20=20=20=20=20=20=20options=20keyword.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Glen=20MacDonald=20and?= =?UTF-8?q?=20Curtis=20Rueden,=20fixed=20a=20bug=20that=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20sometimes=20caused=20macros=20in=20the=20"More=20Tools?= =?UTF-8?q?"=20(>>)=20menu=20to=20be=20=20=20=20=20=20=20=20=20sorted=20ra?= =?UTF-8?q?ndomly.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Philippe?= =?UTF-8?q?=20Carl,=20fixed=20a=20bug=20that=20caused=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20ImagePlus.getStatistic()=20and=20ImageProcessor.getStatis?= =?UTF-8?q?tic()=20to=20=20=20=20=20=20=20=20=20not=20treat=20one=20point?= =?UTF-8?q?=20selections=20the=20same=20way.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Andrew=20Sonnier,=20fixed=20a=20bug=20that=20c?= =?UTF-8?q?aused=20the=20particle=20=20=20=20=20=20=20=20=20analyzer=20to?= =?UTF-8?q?=20not=20be=20recorded=20if=20the=20"In=20situ"=20option=20was?= =?UTF-8?q?=20used.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Mikael?= =?UTF-8?q?=20Eriksson,=20fixed=20a=20bug=20that=20caused=20the=20run=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20(=E2=80=9CColors=E2=80=A6=E2=80=9D,opti?= =?UTF-8?q?ons)=20macro=20function=20to=20throw=20an=20exception=20when=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20called=20from=20a=20-batch=20command=20?= =?UTF-8?q?line=20macro.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ste?= =?UTF-8?q?in=20Rorvik,=20fixed=20a=20bug=20that=20caused=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Overlay.drawLine()=20macro=20function=20to=20?= =?UTF-8?q?not=20work=20correctly=20when=20=20=20=20=20=20=20=20=20used=20?= =?UTF-8?q?in=20conjuction=20with=20Overlay.setColor()=20and/or=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Overlay.setPosition().=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'Niederle',=20worked=20around=20a=20b?= =?UTF-8?q?ug=20that=20caused=20the=20run=20=20=20=20=20=20=20=20=20("Gamm?= =?UTF-8?q?a...",=20"value=3Dx.xx")=20macro=20function=20to=20fail=20in=20?= =?UTF-8?q?Fiji=20=20=20=20=20=20=20=20=20headless=20mode.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20'fieryice12',=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20=20=20=20=20=20=20=20=20Plot.showValue?= =?UTF-8?q?s=20macro=20function=20to=20fail=20in=20batch=20mode.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20NorbertVischer,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20the=20Image>=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Duplicate=20command=20to=20throw=20on=20exception=20if=20?= =?UTF-8?q?the=20ROI=20was=20outside=20=20=20=20=20=20=20=20=20the=20image?= =?UTF-8?q?.=20=20=20=E2=80=A2=201.52o=2023=20April=202019=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Added=20the=20Help>Examples>Macro>Curve=20Fit?= =?UTF-8?q?ting=20and=20Help>Examples>=20=20=20=20=20=20=20=20=20JavaScrip?= =?UTF-8?q?t>Curve=20Fitting=20examples.=20=20=20=20=20=20=20=E2=96=A1=20T?= =?UTF-8?q?hanks=20to=20Tiago=20Ferreira,=20stack=20and=20hyperstack=20scr?= =?UTF-8?q?ollbars=20now=20=20=20=20=20=20=20=20=20apply=20the=20Edit>Opti?= =?UTF-8?q?ons>Appearance=20"GUI=20scale".=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20'mountain=5Fman',=20tables=20can=20be=20sorted?= =?UTF-8?q?=20alphabetically.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Neil=20Switz,=20the=20Process>FFT>Inverse=20FFT=20command=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20displays=20a=20warning=20message=20if?= =?UTF-8?q?=20the=20"FFT=20of=20..."=20image=20has=20been=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20modified=20but=20no=20pixels=20have=20been=20set=20?= =?UTF-8?q?to=200=20or=20255.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Stein=20Rorvik,=20copies=20of=20IJ=5FProps.txt=20and/or=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20IJ=5FPrefs.txt=20in=20the=20ImageJ=20fo?= =?UTF-8?q?lder=20override=20the=20corresponding=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20files=20in=20the=20default=20locations.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20the=20Table.update?= =?UTF-8?q?=20macro=20function=20is=20=20=20=20=20=20=20=20=20called=20aut?= =?UTF-8?q?omatically=20when=20a=20macro=20finsihes=20and=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Table.setSelection(),=20Table.getSelectionSta?= =?UTF-8?q?rt=20and=20=20=20=20=20=20=20=20=20Table.getSelectionEnd=20func?= =?UTF-8?q?tions=20no=20longer=20require=20that=20a=20title=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20be=20specified.=20=20=20=20=20=20=20=E2=96=A1=20Tha?= =?UTF-8?q?nks=20to=20Philippe=20Carl,=20the=20isKeyDown()=20and=20setKeyD?= =?UTF-8?q?own()=20macro=20=20=20=20=20=20=20=20=20functions=20now=20suppo?= =?UTF-8?q?rt=20the=20control=20key=20(example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20the=20setColor()=20?= =?UTF-8?q?and=20setLineWidth()=20macro=20=20=20=20=20=20=20=20=20function?= =?UTF-8?q?s=20no=20longer=20abort=20the=20macro=20if=20no=20image=20is=20?= =?UTF-8?q?open.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Sian=20Cull?= =?UTF-8?q?ey,=20removed=20"Bridge"=20and=20"Lena"=20from=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20File>Open=20Samples=20menu.=20Macros=20and=20?= =?UTF-8?q?scripts=20that=20use=20these=20=20=20=20=20=20=20=20=20images?= =?UTF-8?q?=20will=20continue=20to=20work.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Stein=20Rorvik,=20the=20run("Apply=20LUT")=20m?= =?UTF-8?q?acro=20function=20no=20=20=20=20=20=20=20=20=20longer=20shows?= =?UTF-8?q?=20an=20error=20message=20with=20images=20that=20have=20a=20dis?= =?UTF-8?q?play=20=20=20=20=20=20=20=20=20range=20of=200-255.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20NorbertVischer,=20Philippe?= =?UTF-8?q?=20Carl=20and=20Stein=20Rorvik,=20added=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20the=20Array.deleteValue()=20and=20Array.deleteIndex()=20macr?= =?UTF-8?q?o=20functions=20=20=20=20=20=20=20=20=20(example).=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20added=20th?= =?UTF-8?q?e=20Table.setLocationAndSize()=20=20=20=20=20=20=20=20=20macro?= =?UTF-8?q?=20function.=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20Imag?= =?UTF-8?q?ePlus.crop(options)=20method,=20where=20'options'=20can=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20be=20can=20be=20"stack",=20"slice"=20or=20?= =?UTF-8?q?a=20range=20(e.g.,=20"20-30").=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20the=20caused?= =?UTF-8?q?=20macros=20using=20a=20=20=20=20=20=20=20=20=20function=20key?= =?UTF-8?q?=20shortcut=20to=20not=20work=20if=20the=20shift=20key=20was=20?= =?UTF-8?q?down.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Salim=20Kan?= =?UTF-8?q?oun,=20fixed=20a=20bug=20in=20the=20DICOM=20reader=20that=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20caused=20it=20to=20sometimes=20not=20corre?= =?UTF-8?q?ctly=20open=20PT=20DICOM=20stacks.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20roundin?= =?UTF-8?q?g=20error=20with=20=20=20=20=20=20=20=20=20setMinAndMax()=20on?= =?UTF-8?q?=20some=20density=20calibrated=208-bit=20images.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Fixed=20non-macro=20recording=20of=20the=20Im?= =?UTF-8?q?age>Duplicate=20command.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Norbert=20Vischer,=20fixed=20a=20bug=20that=20caused=20?= =?UTF-8?q?the=20doWand=20=20=20=20=20=20=20=20=20(x,y,tolerance,"Smooth")?= =?UTF-8?q?=20macro=20function=20to=20cause=20the=20macro=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20language's=20&var=20variable=20passing=20method=20t?= =?UTF-8?q?o=20fail.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jan=20E?= =?UTF-8?q?glinger,=20fixed=20a=20bug=20that=20caused=20log=20histogram=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20plots=20to=20be=20malformed=20if=20the?= =?UTF-8?q?=20line=20width=20was=20set=20to=20greater=20than=20=20=20=20?= =?UTF-8?q?=20=20=20=20=201.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20caused=20the=20Ta?= =?UTF-8?q?ble.title=20=20=20=20=20=20=20=20=20and=20getInfo("window.title?= =?UTF-8?q?")=20macro=20functions=20to=20sometimes=20not=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20work=20with=20custom=20tables.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20bugs=20rela?= =?UTF-8?q?ted=20to=20saving=20and=20=20=20=20=20=20=20=20=20opening=20emp?= =?UTF-8?q?ty=20tables.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norb?= =?UTF-8?q?ert=20Vischer,=20fixed=20a=20bug=20that=20caused=20the=20Mac=20?= =?UTF-8?q?menu=20=20=20=20=20=20=20=20=20bar=20to=20disappear=20when=20ac?= =?UTF-8?q?tivating=20the=20Channels,=20ColorPicker,=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20ContrastAdjuster=20and=20ThresholdAdjuster=20dialogs.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,?= =?UTF-8?q?=20fixed=20a=20bug=20that=20caused=20the=20"Save=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20changes=3F"=20dialog=20to=20not=20be=20the=20front-?= =?UTF-8?q?most=20window=20when=20quitting=20=20=20=20=20=20=20=20=20Image?= =?UTF-8?q?J.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Tihamer,=20fix?= =?UTF-8?q?ed=20a=20bug=20that=20caused=20the=20=20=20=20=20=20=20=20=20Cu?= =?UTF-8?q?rveFitter.getResultString()=20method=20to=20fail=20if=20there?= =?UTF-8?q?=20was=20a=20=20=20=20=20=20=20=20=20fitting=20error.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Ellen=20Arena,=20fixed=20?= =?UTF-8?q?1.52m=20regression=20that=20caused=20the=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Edit>Selection>Create=20Selection=20command=20to=20not=20?= =?UTF-8?q?work=20as=20expected=20=20=20=20=20=20=20=20=20with=20non-thres?= =?UTF-8?q?holded=20images.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?Laurent=20Thomas,=20fixed=20a=201.52n=20regression=20that=20cau?= =?UTF-8?q?sed=20=20=20=20=20=20=20=20=20the=20MaximumFinder.getMaxima()?= =?UTF-8?q?=20method=20to=20always=20return=200=20points.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Gabriel=20Landini,=20fixed=20a?= =?UTF-8?q?=20regression=20that=20could=20cause=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?the=20ImagePlus.setSlice()=20method=20to=20throw=20an=20excepti?= =?UTF-8?q?on.=20=20=20=E2=80=A2=201.52n=2022=20March=202019=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Ellen=20Arena,=20fixed=20a?= =?UTF-8?q?=201.52m=20regression=20that=20caused=20the=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Edit>Selection>Create=20Mask=20command=20to=20not=20pr?= =?UTF-8?q?eserve=20spatial=20=20=20=20=20=20=20=20=20calibration.=20=20?= =?UTF-8?q?=20=E2=80=A2=201.52m=2020=20March=202019=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20ROI=20improvements=20thanks=20to=20Michael=20Schmid?= =?UTF-8?q?,=20including=20more=20=20=20=20=20=20=20=20=20accurate=20Roi.c?= =?UTF-8?q?ontains,=20better=20ShapeRoi=20filling,=20improved=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20ShapeRoi.clone(),=20improved=20Roi=20Manager=20S?= =?UTF-8?q?plit,=20better=20ShapeRoi=20=20=20=20=20=20=20=20=20length=20ca?= =?UTF-8?q?lculation,=20more=20accurate=20perimeter=20for=20ovals=20and=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20rounded=20rectangles,=20more=20accurate?= =?UTF-8?q?=20MinFeret,=20removed=20point=20=20=20=20=20=20=20=20=20select?= =?UTF-8?q?ion=2032k=20slice=20limit,=20ability=20to=20press=20ESC=20to=20?= =?UTF-8?q?abort=20=20=20=20=20=20=20=20=20creation=20of=20polygonROI,=20a?= =?UTF-8?q?nd=20addition=20of=20Roi.getFeretPoints()=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20macro=20function=20(example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Tiago=20Ferreira,=20the=20"GUI=20scal?= =?UTF-8?q?e=20(0.5-3.0)"=20setting=20in=20=20=20=20=20=20=20=20=20the=20E?= =?UTF-8?q?dit>Options>Appearance=20dialog=20is=20now=20applied=20to=20alm?= =?UTF-8?q?ost=20all=20=20=20=20=20=20=20=20=20remaining=20dialogs=20and?= =?UTF-8?q?=20widgets,=20including=20the=20Histogram=20and=20Plot=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Windows=20and=20the=20Threshold=20widget.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,?= =?UTF-8?q?=20added=20the=20File>Show=20Folder=20submenu.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer=20and=20Micha?= =?UTF-8?q?el=20Schmid,=20changed=20"Noise=20=20=20=20=20=20=20=20=20Toler?= =?UTF-8?q?ance"=20to=20"Prominence"=20and=20added=20a=20"Strict"=20option?= =?UTF-8?q?=20to=20the=20=20=20=20=20=20=20=20=20Process>Find=20Maxima=20d?= =?UTF-8?q?ialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Hidenao=20?= =?UTF-8?q?Yamada,=20the=20File>Import>Raw=20command=20now=20uses=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20long=20instead=20of=20int=20for=20the=20gap?= =?UTF-8?q?=20between=20images.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20t?= =?UTF-8?q?o=20Stein=20Rorvik,=20Image>Stacks>Tools>Set=20Label=20and=20Im?= =?UTF-8?q?age>=20=20=20=20=20=20=20=20=20Stacks>Tools>Remove=20Slice=20La?= =?UTF-8?q?bels=20work=20with=20single=20images.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20On=20macOS,=20the=20Help>Update=20ImageJ=20command?= =?UTF-8?q?=20displays=20a=20message=20=20=20=20=20=20=20=20=20explaining?= =?UTF-8?q?=20how=20to=20work=20around=20Path=20Randomization=20if=20the?= =?UTF-8?q?=20ImageJ=20=20=20=20=20=20=20=20=20home=20directory=20is=20rea?= =?UTF-8?q?d-only=20and=20the=20file=20path=20starts=20with=20"/=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20private/var/folders/".=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Christophe=20Leterrier,=20the=20File>?= =?UTF-8?q?Import>Image=20Sequence=20=20=20=20=20=20=20=20=20command=20now?= =?UTF-8?q?=20always=20sorts=20the=20files=20names=20on=20macOS.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20The=20File>Save=20As>Image=20Sequence?= =?UTF-8?q?=20command=20saves=20single=20line=20slice=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20labels=20when=20saving=20in=20TIFF=20format.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20the=20F?= =?UTF-8?q?ile>Revert=20command=20now=20works=20=20=20=20=20=20=20=20=20wi?= =?UTF-8?q?th=20virtual=20stacks.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Alicia=20Daeden,=20the=20makeLine()=20and=20makePolygon?= =?UTF-8?q?()=20macro=20=20=20=20=20=20=20=20=20functions=20no=20longer=20?= =?UTF-8?q?have=20a=20200=20point=20limit.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Steve=20Fallows,=20File>Import>Raw=20only=20ge?= =?UTF-8?q?ts=20.raw=20file=20=20=20=20=20=20=20=20=20parameters=20from=20?= =?UTF-8?q?the=20filename=20when=20it=20uses=20'x'=20delimiters.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Gilles=20Carpentier,=20ad?= =?UTF-8?q?ded=20the=20is("line")=20and=20is=20=20=20=20=20=20=20=20=20("a?= =?UTF-8?q?rea")=20macro=20functions.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Albert=20Cardona,=20added=20the=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20ImagePlus.updateVirtualSlice()=20method.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Michael=20Kaul,=20added=20the?= =?UTF-8?q?=20Plot.update()=20method.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20'cyrilturies'=20and=20Jan=20Eglinger,=20fixed=20a=20b?= =?UTF-8?q?ug=20that=20=20=20=20=20=20=20=20=20caused=20Results=20table=20?= =?UTF-8?q?labels=20to=20not=20be=20displayed=20for=20line=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20measurements=20if=20no=20measurement=20options=20we?= =?UTF-8?q?re=20enabled=20in=20Analyze>=20=20=20=20=20=20=20=20=20Set=20Me?= =?UTF-8?q?asurements.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein?= =?UTF-8?q?=20Rorvik,=20fixed=20rounding=20errors=20in=20the=20Image>=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Scale=20command.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20toolbar=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20be=20corrupted=20when=20opening=20an=20overlay=20containing?= =?UTF-8?q?=20multi-point=20=20=20=20=20=20=20=20=20selections.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixe?= =?UTF-8?q?d=20bugs=20that=20caused=20numerous=20"//=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20setTool()"=20statements=20to=20be=20recorded=20when=20ope?= =?UTF-8?q?ning=20ROI=20sets=20or=20=20=20=20=20=20=20=20=20overlays=20tha?= =?UTF-8?q?t=20contain=20multi-point=20selections.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20multi-point=20sel?= =?UTF-8?q?ections=20to=20lose=20their=20=20=20=20=20=20=20=20=20'pointBef?= =?UTF-8?q?oreDeleting'=20property=20when=20saved=20and=20re-opened.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fi?= =?UTF-8?q?xed=20a=20bug=20that=20caused=20Process>=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Filters>Gaussian=20Blur=20to=20not=20be=20multithread-saf?= =?UTF-8?q?e.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Robert=20Lockw?= =?UTF-8?q?ood,=20fixed=20a=20bug=20that=20caused=20the=20File>=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Save=20command=20to=20not=20be=20correctly=20?= =?UTF-8?q?recorded.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Albert?= =?UTF-8?q?=20Cardona,=20fixed=20bugs=20that=20caused=20Edit>=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Selection>Restore=20Selection,=20and=20setting?= =?UTF-8?q?=20an=20ROI=20from=20the=20ROI=20=20=20=20=20=20=20=20=20Manage?= =?UTF-8?q?r,=20to=20not=20emit=20an=20Roi=20MODIFIED=20event.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Dr-Frog=20and=20Jan=20Egling?= =?UTF-8?q?er,=20fixed=20a=20bug=20that=20caused=20the=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20ImageProcessor.fillOutside(Roi)=20method=20to=20modify?= =?UTF-8?q?=20the=20Roi=20passed=20=20=20=20=20=20=20=20=20as=20the=20argu?= =?UTF-8?q?ment.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Teresa=20Ha?= =?UTF-8?q?ider,=20fixed=20a=20bug=20that=20sometimes=20caused=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Image>Transform>Bin=20to=20not=20correctly=20dis?= =?UTF-8?q?play=20the=20output=20image.=20=20=20=20=20=20=20=E2=96=A1=20Th?= =?UTF-8?q?anks=20to=20Stein=20Rorvik,=20fixed=20a=201.52d=20regression=20?= =?UTF-8?q?that=20caused=20=20=20=20=20=20=20=20=20File>Import>Image=20Seq?= =?UTF-8?q?uence=20to=20use=20the=20image=20label=20(if=20present)=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20as=20the=20slice=20label=20instead=20of=20?= =?UTF-8?q?the=20filename.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20G?= =?UTF-8?q?illes=20Carpentier,=20fixed=20a=201.52k=20regression=20that=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20caused=20the=20particle=20analyzer=20to?= =?UTF-8?q?=20unexpectedly=20create=20composite=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?ROIs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jan=20Eglin?= =?UTF-8?q?ger,=20fixed=20a=201.52i=20regression=20that=20caused=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20macro=20string=20expressions=20like=20"s"+a[i?= =?UTF-8?q?]*n=20to=20generate=20an=20error.=20=20=20=E2=80=A2=201.52k=202?= =?UTF-8?q?9=20January=202019=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Albert=20Cardona=20and=20Gabriel=20Landini,=20added=20the=20?= =?UTF-8?q?"GUI=20=20=20=20=20=20=20=20=20scale=20(0.5-3.0)"=20option=20to?= =?UTF-8?q?=20the=20Edit>Options>Appearance=20dialog,=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20which=20enables=20scaling=20of=20text=20in=20GenericDialo?= =?UTF-8?q?gs=20and=20in=20the=20=20=20=20=20=20=20=20=20Command=20Finder.?= =?UTF-8?q?=20It=20also=20doubles=20the=20size=20of=20the=20tool=20icons?= =?UTF-8?q?=20if=20=20=20=20=20=20=20=20=20the=20scale=20is=201.5=20or=20l?= =?UTF-8?q?arger=20and=20triples=20the=20size=20if=20the=20scale=20is=20?= =?UTF-8?q?=20=20=20=20=20=20=20=202.5=20or=20larger.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added=20clickabl?= =?UTF-8?q?e=20spaces=20between=20the=20=20=20=20=20=20=20=20=20four=20arr?= =?UTF-8?q?ow=20pairs=20in=20plot=20windows=20for=20quickly=20setting=20a?= =?UTF-8?q?=20single=20=20=20=20=20=20=20=20=20plot=20limit.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20ImageJ=20n?= =?UTF-8?q?ow=20displays=20a=20progress=20bar=20when=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20duplicating=20large=20(>200=20megapixel)=20stacks.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Michael=20Schmid=20contributed=20an?= =?UTF-8?q?=20improved=20version=20of=20the=20=20=20=20=20=20=20=20=20Thre?= =?UTF-8?q?sholdToSelection=20class=20(Edit>Selection>Create=20Selection)?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20that=20always=20converts=20single=20?= =?UTF-8?q?pixel=20wide=20lines=20to=20traced=20=20=20=20=20=20=20=20=20se?= =?UTF-8?q?lections=20and=20is=20up=20to=20five=20times=20faster.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Tatsuaki=20Kobayashi,=20I?= =?UTF-8?q?mageJ=20can=20now=20open=2032-bit=20float=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20DICOM=20images.=20=20=20=20=20=20=20=E2=96=A1=20Michael?= =?UTF-8?q?=20Schmid=20contributed=20the=20FloatArray=20class,=20an=20exte?= =?UTF-8?q?ndable=20=20=20=20=20=20=20=20=20float=20array.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added=20th?= =?UTF-8?q?e=20Table.setSelection=20=20=20=20=20=20=20=20=20(start,end,tit?= =?UTF-8?q?le),=20Table.getSelectionStart(title)=20and=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Table.getSelectionEnd(title)=20macro=20functions=20(ex?= =?UTF-8?q?ample).=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20setOption?= =?UTF-8?q?("ScaleConversions",boolean)=20macro=20function.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Robert=20Haase,=20fixed=20a=20b?= =?UTF-8?q?ug=20that=20caused=20the=20Edit>=20=20=20=20=20=20=20=20=20Sele?= =?UTF-8?q?ction>Create=20Selection=20command=20to=20ignore=20the=20"Black?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20background"=20setting=20when=20proce?= =?UTF-8?q?ssing=20non-thresholded=20binary=20=20=20=20=20=20=20=20=20imag?= =?UTF-8?q?es.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Johannes=20Wi?= =?UTF-8?q?bisana,=20fixed=20a=20bug=20in=20the=20Particle=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20Analyzer=20that=20caused=20ROIs=20added=20to=20over?= =?UTF-8?q?lays=20and=20the=20ROI=20Manager=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20not=20exclude=20interior=20holes.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Herbie,=20fixed=20a=20bug=20that=20ca?= =?UTF-8?q?used=20the=20Process>Binary>=20=20=20=20=20=20=20=20=20Make=20B?= =?UTF-8?q?inary=20command=20to=20incorrectly=20set=20the=20threshold=20of?= =?UTF-8?q?=208-bit=20=20=20=20=20=20=20=20=20binary=20images.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Nicolas=20De=20Francesco,=20?= =?UTF-8?q?fixed=20a=20bug=20that=20caused=20the=20LUT=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20to=20not=20be=20saved=20in=20the=20TIFF=20header=20whe?= =?UTF-8?q?n=20saving=20a=20single-channel=20=20=20=20=20=20=20=20=20image?= =?UTF-8?q?=20with=20a=20custom=20grayscale=20LUT.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Mark=20Mandelkern,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20multi-image=20=20=20=20=20=20=20=20=20DICOM?= =?UTF-8?q?=20files=20with=20RescaleSlope!=3D1.0=20to=20open=20incorrectly?= =?UTF-8?q?.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,?= =?UTF-8?q?=20fixed=20a=20bug=20that=20caused=20the=20contrast=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20range=20to=20change=20when=20converting=20an=208?= =?UTF-8?q?-bit=20or=2016-bit=20image=20to=20=20=20=20=20=20=20=20=2032-bi?= =?UTF-8?q?t.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik?= =?UTF-8?q?,=20fixed=20a=20bug=20that=20caused=20the=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Table.getColumn("Label")=20macro=20function=20to=20throw?= =?UTF-8?q?=20an=20exception.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Philippe=20Carl,=20fixed=20a=20bug=20that=20caused=20ImageJ?= =?UTF-8?q?=20to=20=20=20=20=20=20=20=20=20freeze=20when=20opening=20the?= =?UTF-8?q?=20Interactive=20Interpreter=20on=20Windows=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20using=20the=20ctrl+j=20keyboard=20shortcut.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20fixe?= =?UTF-8?q?d=20a=20bug=20that=20caused=20ImageJ=20to=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20fail=20to=20open=20one=20column=20tables.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20'Bio7',=20worked=20around=20a?= =?UTF-8?q?=20bug=20that=20caused=20toolbar=20popup=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20menus=20to=20not=20work=20with=20OpenJDK=2011=20and=2012?= =?UTF-8?q?=20on=20Windows.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?Ved=20Sharma,=20fixed=20a=20bug=20that=20caused=20the=20Histogr?= =?UTF-8?q?am=20=20=20=20=20=20=20=20=20command=20to=20not=20behave=20as?= =?UTF-8?q?=20expected=20when=20"Limit=20to=20Threshold"=20was=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20enabled=20in=20Analyze>Set=20Measurements=20and?= =?UTF-8?q?=20there=20was=20an=20invisble=20=20=20=20=20=20=20=20=20thresh?= =?UTF-8?q?old.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vi?= =?UTF-8?q?scher,=20fixed=20bugs=20in=20the=20toScaled(length)=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20and=20toUnscaled(length)=20macro=20functions.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20J=20Xiong,=20fixed?= =?UTF-8?q?=20a=201.52j=20regression=20that=20caused=20the=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20Image>Overlay>From=20ROI=20Manager=20command=20to?= =?UTF-8?q?=20throw=20an=20exception.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Philippe=20Carl,=20fixed=201.52j9=20regression=20that?= =?UTF-8?q?=20made=20it=20=20=20=20=20=20=20=20=20impossible=20to=20enter?= =?UTF-8?q?=20closing=20brackets=20into=20editor=20windows=20using=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20French=20keyboards.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=201.52j=20reg?= =?UTF-8?q?ression=20that=20sometimes=20=20=20=20=20=20=20=20=20caused=20m?= =?UTF-8?q?acro=20errors=20to=20be=20ignored=20(examples).=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20'yorgodillo',=20'mountain=5Fman?= =?UTF-8?q?'=20and=20Jan=20Eglinger,=20fixed=20=20=20=20=20=20=20=20=20a?= =?UTF-8?q?=201.52e=20regression=20that=20caused=20float=20to=208-bit=20co?= =?UTF-8?q?nversions=20to=20be=20=20=20=20=20=20=20=20=20done=20incorrectl?= =?UTF-8?q?y.=20=20=20=E2=80=A2=201.52j=2029=20December=202018=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Added=20the=20Plugins>Macros>Interactive?= =?UTF-8?q?=20Interpreter=20command=20=20=20=20=20=20=20=20=20(shortcut:?= =?UTF-8?q?=20"j"),=20which=20enables=20interactive=20editing=20and=20runn?= =?UTF-8?q?ing=20=20=20=20=20=20=20=20=20of=20macro=20and=20JavaScript=20c?= =?UTF-8?q?ode=20in=20an=20editor=20window=20(example).=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Type=20"js"=20in=20to=20switch=20the=20language=20to?= =?UTF-8?q?=20JavaScript.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ve?= =?UTF-8?q?d=20Sharma,=20point=20selections=20with=20more=20than=2065,535?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20points=20can=20now=20be=20saved=20an?= =?UTF-8?q?d=20reopened=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20Philippe=20Carl,=20the=20status=20bar=20is=20updated?= =?UTF-8?q?=20when=20=20=20=20=20=20=20=20=20adjusting=20elliptical=20and?= =?UTF-8?q?=20rotated=20rectangle=20selections.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Ilan=20Tal,=20added=20the=20"Ignore?= =?UTF-8?q?=20Rescale=20Slopet"=20checkbox=20=20=20=20=20=20=20=20=20to=20?= =?UTF-8?q?the=20Edit>Options>DICOM=20dialog=20box.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20Image>Edit>Resize?= =?UTF-8?q?=20can=20now=20convert=20a=20=20=20=20=20=20=20=20=20single=20i?= =?UTF-8?q?mage=20to=20a=20stack.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20MichaelSchmid,=20improved=20the=20calculation=20of=20Fe?= =?UTF-8?q?ret=20=20=20=20=20=20=20=20=20parameters=20for=20composite=20se?= =?UTF-8?q?lections.=20FeretAngle=20is=20now=20reported=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20(within=200.5=20deg),=20works=20with=20pixel=20aspect?= =?UTF-8?q?=20ratios=20different=20from=20=20=20=20=20=20=20=20=20one=20an?= =?UTF-8?q?d=20is=20more=20accuate=20due=20to=20use=20of=200.5=20deg=20inc?= =?UTF-8?q?rements.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20MichaelS?= =?UTF-8?q?chmid,=20the=20output=20of=20ROI=20Manager=20'AND',=20'OR'=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20and=20'XOR'=20operations=20are,=20if=20?= =?UTF-8?q?possible,=20converted=20from=20composite=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20ROIs=20into=20simpler=20polygon=20ROIs.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20errors=20in?= =?UTF-8?q?=20macro=20run()=20statements=20are=20=20=20=20=20=20=20=20=20n?= =?UTF-8?q?ow=20reported=20using=20a=20"Macro=20Error"=20dialog=20that=20d?= =?UTF-8?q?isplays=20the=20=20=20=20=20=20=20=20=20line=20number.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Added=20the=20ImagePlus.plotHistogram()?= =?UTF-8?q?=20method.=20For=20examples,=20run=20=20=20=20=20=20=20=20=20He?= =?UTF-8?q?lp>Examples>JavaScript>Histogram=20Plots.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20JavaScript-friendly=20ImageStatistics?= =?UTF-8?q?.histogram()=20=20=20=20=20=20=20=20=20method=20(example).=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Added=20the=20Overlay.setLabelFon?= =?UTF-8?q?tSize(size,options),=20=20=20=20=20=20=20=20=20Overlay.setLabel?= =?UTF-8?q?Color(),=20Overlay.setStrokeColor()=20and=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Overlay.setStrokeWidth()=20macro=20functions,=20and=20cor?= =?UTF-8?q?responding=20=20=20=20=20=20=20=20=20Overlay=20class=20methods?= =?UTF-8?q?=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jer?= =?UTF-8?q?ome=20Mutterer,=20added=20the=20setIgnoreErrors()=20and=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20getErrorMessage()=20methods=20to=20the=20I?= =?UTF-8?q?nterpreter=20class=20(example).=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bug=20that=20c?= =?UTF-8?q?aused=20Image>Edit>=20=20=20=20=20=20=20=20=20Resize=20to=20not?= =?UTF-8?q?=20preserve=20stack=20lookup=20tables.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20Orthogonal?= =?UTF-8?q?=20Views=20bugs=20that=20caused=20=20=20=20=20=20=20=20=20freez?= =?UTF-8?q?ing,=20dragging=20in=20XZ=20and=20YZ=20views=20to=20not=20work,?= =?UTF-8?q?=20missing=20=20=20=20=20=20=20=20=20density=20calibration=20an?= =?UTF-8?q?d=20incorrect=20behavior=20when=20"Rotate=20YZ"=20and=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20"Flip=20XZ"=20where=20enabled=20in=20Edit>Opt?= =?UTF-8?q?ions>DICOM.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein?= =?UTF-8?q?=20Rorvik,=20fixed=20a=20bug=20that=20caused=20particle=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20analyzer=20overlays=20to=20not=20be=20spec?= =?UTF-8?q?ific=20to=20the=20current=20slice=20when=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20processing=20one=20slice.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Fixed=20a=20bug=20that=20caused=20the=20color=20of=20overlay?= =?UTF-8?q?=20labels=20to=20be=20set=20=20=20=20=20=20=20=20=20to=20black?= =?UTF-8?q?=20after=20the=20image=20was=20saved=20and=20reopened.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20the?= =?UTF-8?q?=20Image>Overlay>To=20ROI=20Manager=20=20=20=20=20=20=20=20=20c?= =?UTF-8?q?ommand=20to=20not=20preserve=20overlay=20properties=20such=20a?= =?UTF-8?q?=20label=20color=20=20=20=20=20=20=20=20=20and=20scalability.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Wilhelm=20Burger?= =?UTF-8?q?,=20fixed=20a=20bug=20that=20caused=20the=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Roi.setLocation(x,y)=20method=20to=20not=20work=20correct?= =?UTF-8?q?ly=20with=20=20=20=20=20=20=20=20=20ShapeRois=20if=20x=20or=20y?= =?UTF-8?q?=20were=20not=20integers.=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20Philippe=20Carl,=20fixed=20a=20bug=20that=20caused=20t?= =?UTF-8?q?he=20status=20bar=20=20=20=20=20=20=20=20=20to=20not=20be=20upd?= =?UTF-8?q?ated,=20or=20to=20not=20be=20updated=20correctly,=20when=20movi?= =?UTF-8?q?ng=20=20=20=20=20=20=20=20=20or=20changing=20the=20length=20of?= =?UTF-8?q?=20straight=20line=20and=20arrow=20selections=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20using=20the=20arrow=20keys.=20=20=20=E2=80=A2=201.52i?= =?UTF-8?q?=2026=20November=202018=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Ved=20Sharma=20and=20Michael=20Kaul,=20added=20the=20Im?= =?UTF-8?q?age>Stacks>=20=20=20=20=20=20=20=20=20Measure=20Stack=20command?= =?UTF-8?q?=20(macro=20source),=20useful=20for=20plotting=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20stacks=20using=20the=20contextual=20(right-click)?= =?UTF-8?q?=20Plot=20command=20in=20=20=20=20=20=20=20=20=20Results=20tabl?= =?UTF-8?q?es.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutt?= =?UTF-8?q?erer,=20added=20the=20Image>Stacks>Tools>Magic=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20Montage=20Tools=20command=20(macro=20source).=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Tables=20can=20be=20sorted=20using?= =?UTF-8?q?=20the=20Sort=20command=20in=20the=20contextual=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20(right-click)=20menu=20or=20in=20the=20Results=20me?= =?UTF-8?q?nu=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20M?= =?UTF-8?q?atias=20Andina,=20the=20Image>Transform>Rotate=20command=20can?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20now=20be=20used=20interactiely.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,?= =?UTF-8?q?=20added=20an=20"F"=20(Fit=20All)=20icon=20next=20to=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20the=20"R"=20(Reset=20Range)=20icon=20in=20the?= =?UTF-8?q?=20bottom-left=20corner=20of=20plot=20=20=20=20=20=20=20=20=20w?= =?UTF-8?q?indows.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Robert=20?= =?UTF-8?q?Haase=20and=20Emanuele=20Martini,=20added=20a=20"Don't=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20reset=20range"=20checkbox=20to=20the=20"Thres?= =?UTF-8?q?hold"=20dialog=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Add?= =?UTF-8?q?ed=20an=20error=20bars=20example=20to=20the=20Help>Examples>Plo?= =?UTF-8?q?ts>Plot=20=20=20=20=20=20=20=20=20Styles=20macro.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Alphabetized=20the=20Image>Stacks>Tools=20?= =?UTF-8?q?menu.=20=20=20=20=20=20=20=E2=96=A1=20Moved=20the=20Image>Stack?= =?UTF-8?q?s>Plot=20XY=20Profile=20command=20to=20Image>Stacks>=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Tools>Plot=20XY=20Profile.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20'Barbara'=20and=20Michael=20Schmid?= =?UTF-8?q?,=20the=20Translate=20command=20=20=20=20=20=20=20=20=20in=20th?= =?UTF-8?q?e=20ROI=20Manager=20remembers=20the=20x=20and=20y=20offset=20va?= =?UTF-8?q?lues.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Alex=20Miro?= =?UTF-8?q?nov,=20added=20an=20optional=20properties=20string=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20argument=20to=20the=20makePoint()=20macro=20func?= =?UTF-8?q?tion=20(macro=20example,=20=20=20=20=20=20=20=20=20JavaScript?= =?UTF-8?q?=20example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Alex?= =?UTF-8?q?=20Mironov,=20the=20setLineWidth()=20macro=20function=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20automatically=20calls=20Overlay.add()=20when?= =?UTF-8?q?=20the=20line=20width=20changes=20(=20=20=20=20=20=20=20=20=20e?= =?UTF-8?q?xample).=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20Plot.rep?= =?UTF-8?q?lace()=20macro=20function=20and=20method.=20For=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20examples,=20run=20Help>Examples>Plots>Random=20Data?= =?UTF-8?q?=20or=20Help>Examples>=20=20=20=20=20=20=20=20=20JavaScript>Plo?= =?UTF-8?q?t=20Random=20Data.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Michael=20Schmid,=20added=20an=20"Add=20Fit"=20commamnd=20to?= =?UTF-8?q?=20the=20=20=20=20=20=20=20=20=20Data>>=20menu=20of=20Plot=20wi?= =?UTF-8?q?ndows.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20?= =?UTF-8?q?Thomas,=20ShortProcessor.rotate()=20and=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20FloatProcessor.rotate()=20now=20fill=20using=20the=20value?= =?UTF-8?q?=20set=20by=20=20=20=20=20=20=20=20=20setBackgroundValue().=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Kai=20Barthel,=20th?= =?UTF-8?q?e=20Analyze>Calibrate=20command=20resets=20the=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20display=20range=20of=20contrast-reduced=20images.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vische?= =?UTF-8?q?r,=20the=20curve=20fitter=20now=20works=20with=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20datasets=20containing=20NaNs.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20added=20the=20Plo?= =?UTF-8?q?t.objectCount=20macro=20=20=20=20=20=20=20=20=20function.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Matias=20Andina,=20add?= =?UTF-8?q?ed=20the=20setOption=20=20=20=20=20=20=20=20=20("SupportMacroUn?= =?UTF-8?q?do",boolean)=20macro=20function=20(example).=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20added=20a=20co?= =?UTF-8?q?nstructor=20for=20creating=20a=20=20=20=20=20=20=20=20=20plot?= =?UTF-8?q?=20from=20arrays=20to=20the=20PlotContentsDialog=20class=20(exa?= =?UTF-8?q?mple).=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20PointRoi.g?= =?UTF-8?q?etLastCounter()=20method.=20=20=20=20=20=20=20=E2=96=A1=20Added?= =?UTF-8?q?=20the=20getSizeInBytes()=20methods=20to=20the=20ImagePlus=20cl?= =?UTF-8?q?ass.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Philippe=20C?= =?UTF-8?q?arl=20and=20Michael=20Schmid,=20fixed=20a=20bug=20that=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20caused=20the=20macro=20interpreter=20to=20inc?= =?UTF-8?q?orrectly=20evaluate=20string=20=20=20=20=20=20=20=20=20expressi?= =?UTF-8?q?ons=20containing=20numeric=20arrays=20indexed=20using=20the=20+?= =?UTF-8?q?+=20=20=20=20=20=20=20=20=20operator.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20the=20=20=20=20=20=20=20=20=20changeValues()=20m?= =?UTF-8?q?acro=20funtion=20to=20reset=20the=20display=20range=20of=20=20?= =?UTF-8?q?=20=20=20=20=20=20=2016-bit=20and=2032-bit=20images.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Alex=20Mironov,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20setLineWidth(1)=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20in=20a=20macro=20to=20incorrectly=20set=20the=20line?= =?UTF-8?q?=20width=20to=20the=20width=20set=20=20=20=20=20=20=20=20=20in?= =?UTF-8?q?=20the=20Edit>Options>Line=20Width=20dialog.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bu?= =?UTF-8?q?g=20that=20caused=20the=20Undo=20=20=20=20=20=20=20=20=20comman?= =?UTF-8?q?d=20to=20not=20work=20after=20rotating=20an=20image=20with=20"E?= =?UTF-8?q?nlarge=20=20=20=20=20=20=20=20=20image"=20enabled.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Matias=20Andina,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20caused=20the=20Undo=20=20=20=20=20=20=20=20=20c?= =?UTF-8?q?ommand=20to=20not=20work=20after=20cropping=20or=20rotating=20a?= =?UTF-8?q?=20composite=20=20=20=20=20=20=20=20=20color=20image.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20nudging=20the=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20end=20of=20a=20line=20selection=20with=20alt-arrow=20keys?= =?UTF-8?q?=20to=20not=20update=20a=20=20=20=20=20=20=20=20=20live=20profi?= =?UTF-8?q?le=20plot.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Mark?= =?UTF-8?q?=20Senko=20and=20Michael=20Schmid,=20fixed=20a=20bug=20that=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20caused=20profile=20plots=20of=20line=20?= =?UTF-8?q?selections=20wider=20than=201=20to=20differ=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20from=20profile=20plots=20of=20rectangles=20of=20the=20?= =?UTF-8?q?same=20size.=20=20=20=20=20=20=20=E2=96=A1=20Fixed=20a=20bug=20?= =?UTF-8?q?that=20caused=20DICOM=20images=20to=20be=20displayed=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20incorrectly=20if=20"Open=20as=2032-bit=20floa?= =?UTF-8?q?t"=20was=20enabled=20in=20Edit>=20=20=20=20=20=20=20=20=20Optio?= =?UTF-8?q?ns>DICOM.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Kenneth?= =?UTF-8?q?=20Sloan,=20fixed=20a=20bug=20that=20caused=20the=20Paintbrush?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Tool=20(in=20"Paint=20on=20overlay"?= =?UTF-8?q?=20mode)=20to=20delete=20pre-existing=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20overlays.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'mou?= =?UTF-8?q?ntain=5Fman',=20fixed=20a=20bug=20that=20caused=20the=20Rescale?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Slope=20tag=20(0028,1053)=20to=20be?= =?UTF-8?q?=20ignored=20when=20opening=20DICOM=20images=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20and=20"Open=20as=2032-bit=20float"=20was=20not=20enabl?= =?UTF-8?q?ed=20in=20Edit>Options>=20=20=20=20=20=20=20=20=20DICOM.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fred=20Damen,=20fixed?= =?UTF-8?q?=20a=20file=20path=20recording=20bug=20that=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20caused=20a=20NullPointerException.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bu?= =?UTF-8?q?g=20that=20caused=20buttons=20in=20=20=20=20=20=20=20=20=20some?= =?UTF-8?q?=20dialogs=20(e.g.,=20"B&C"=20and=20"Threshold")=20to=20not=20b?= =?UTF-8?q?e=20displayed=20=20=20=20=20=20=20=20=20correctly=20on=20macOS?= =?UTF-8?q?=20when=20using=20the=20Metal=20look=20and=20feel.=20Opening=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20an=20Action=20Bar=20switches=20to=20Met?= =?UTF-8?q?al=20or=20use=20Edit>Options>Look=20and=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20Feel=20in=20Fiji.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20t?= =?UTF-8?q?o=20Michael=20Schmid,=20fixed=20a=20bug=20that=20caused=20plot?= =?UTF-8?q?=20stacks=20=20=20=20=20=20=20=20=20to=20not=20be=20spatially?= =?UTF-8?q?=20calibrated.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ni?= =?UTF-8?q?colas=20Stifani,=20fixed=20a=201.52h=20regression=20on=20Window?= =?UTF-8?q?s=20=20=20=20=20=20=20=20=20that=20caused=20canceled=20dialog?= =?UTF-8?q?=20boxes=20in=20macros=20started=20using=20the=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20Plugins>Macros>Run=20command=20to=20throw=20an=20ex?= =?UTF-8?q?ception.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome?= =?UTF-8?q?=20Mutterer,=20fixed=20a=20v1.52=20regression=20that=20caused?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20the=20getMetadata()=20macro=20functi?= =?UTF-8?q?on=20(without=20the=20"info"=20or=20"label"=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20argument)=20to=20not=20work=20as=20expected.=20=20=20?= =?UTF-8?q?=E2=80=A2=201.52h=2016=20October=202018=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Plot=20enhancements,=20thanks=20to=20Michael=20Schm?= =?UTF-8?q?id:=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20"Save"=20in=20p?= =?UTF-8?q?lot=20windows=20has=20moved=20into=20a=20new=20Data>>=20menu,?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20which=20includes=20two?= =?UTF-8?q?=20additional=20items:=20(1)=20Add=20from=20Plot=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20(takes=20a=20PlotObject,=20e.g.=20data?= =?UTF-8?q?=20set,=20text,=20etc.,=20from=20a=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20different=20plot)=20and=20(2)=20Add=20from=20Table?= =?UTF-8?q?=20(adds=20data=20from=20a=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20"Results"=20table).=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=98=86=20Values=20in=20tables=20can=20be=20be=20plotted=20di?= =?UTF-8?q?rectly=20using=20the=20=20=20=20=20=20=20=20=20=20=20=20=20cont?= =?UTF-8?q?extual=20menu=20or=20the=20Results>Plot=20command=20in=20"Resul?= =?UTF-8?q?ts"=20=20=20=20=20=20=20=20=20=20=20=20=20tables.=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=98=86=20Added=20the=20Separated=20Bar?= =?UTF-8?q?=20type,=20a=20bar=20graph=20with=20some=20space=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20between=20the=20columns.=20For=20an=20e?= =?UTF-8?q?xample,=20run=20Help>Examples>=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20JavaScript>Plot=20Styles.=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=98=86=20Histogram-like=20"Bar"=20plots=20also=20work=20w?= =?UTF-8?q?ith=20non-equidistant=20=20=20=20=20=20=20=20=20=20=20=20=20poi?= =?UTF-8?q?nts=20along=20x.=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Co?= =?UTF-8?q?nnected=20Circles=20fill=20the=20circles=20with=20the=20seconda?= =?UTF-8?q?ry=20color=20=20=20=20=20=20=20=20=20=20=20=20=20(=3D=20line=20?= =?UTF-8?q?color),=20if=20that=20color=20is=20given=20and=20not=20null.=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Improved=20the=20code?= =?UTF-8?q?=20for=20filling=20bars=20and=20"filled"=20curves.=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=98=86=20For=20"Bar"=20and=20"Separated?= =?UTF-8?q?=20Bar",=20the=20base=20line=20of=20the=20plot=20is=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20y=20=3D=200=20if=20the=20values=20di?= =?UTF-8?q?ffer=20by=20more=20than=20a=20factor=20of=202.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Added=20the=20Help>Examples>Plots>Plot=20Styl?= =?UTF-8?q?es=20and=20...JavaScript>=20=20=20=20=20=20=20=20=20Plot=20Styl?= =?UTF-8?q?es=20examples.=20=20=20=20=20=20=20=E2=96=A1=20The=20Edit>Selec?= =?UTF-8?q?tion>Create=20Mask=20command=20works=20with=20overlays=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20created=20by=20the=20Brush=20and=20Pencil=20t?= =?UTF-8?q?ools.=20=20=20=20=20=20=20=E2=96=A1=20Added=20a=20"Help"=20butt?= =?UTF-8?q?on=20to=20the=20Brush=20and=20Pencil=20tool=20dialog=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20boxes.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Gabriel=20Landini=20and=20Jerome=20Mutterer,=20the=20te?= =?UTF-8?q?xt=20tool=20=20=20=20=20=20=20=20=20now=20creates=20an=20"Enter?= =?UTF-8?q?=20text..."=20selection=20when=20you=20click=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20(without=20dragging)=20on=20an=20image=20and=20there?= =?UTF-8?q?=20is=20no=20existing=20=20=20=20=20=20=20=20=20selection.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Gabriel=20Landini,?= =?UTF-8?q?=20the=20"Show=20on=20all=20slices"=20option=20(was=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20"Show=20all")=20now=20appears=20in=20both=20the?= =?UTF-8?q?=20point=20and=20multi-point=20tool=20=20=20=20=20=20=20=20=20d?= =?UTF-8?q?ialogs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20R?= =?UTF-8?q?orvik,=20the=20Analyze>Tools>Synchronize=20Windows=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20tool=20now=20supports=20use=20of=20the=20"+"=20a?= =?UTF-8?q?nd=20"-"=20keys=20for=20synchronized=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?zooming=20when=20the=20"Image=20scaling"=20option=20is=20enable?= =?UTF-8?q?d.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Lorenzo=20Cang?= =?UTF-8?q?iano,=20added=20a=20"Points"=20column=20to=20the=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20Image>Overlay>List=20Elements=20table.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Added=20the=20Plot.setStyle()=20macro=20fu?= =?UTF-8?q?nction.=20For=20an=20example,=20run=20=20=20=20=20=20=20=20=20H?= =?UTF-8?q?elp>Examples>Plots>Plot=20Styles.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Added=20the=20IJ.exit()=20method,=20which=20aborts=20JavaScr?= =?UTF-8?q?ipts.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Bio7,=20fix?= =?UTF-8?q?ed=20a=20bug=20that=20caused=20images=20to=20turn=20black=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20when=20assigned=20an=20ImageRoi=20created?= =?UTF-8?q?=20by=20the=20Brush=20or=20Pencil=20tools.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20bugs=20that?= =?UTF-8?q?=20caused=20File>Open=20Next=20=20=20=20=20=20=20=20=20to=20som?= =?UTF-8?q?etimes=20fail=20when=20opening=20images=20of=20dissimilar=20typ?= =?UTF-8?q?es.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Sch?= =?UTF-8?q?mid,=20fixed=20several=20bugs=20in=20the=20Image>=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Adjust>Threshold=20tool,=20mostly=20related=20to?= =?UTF-8?q?=2032-bit=20images.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Michael=20Cammer=20and=20Michael=20Schmid,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20=20=20=20=20=20=20=20=20caused=20the=20"Propagate=20t?= =?UTF-8?q?o=20the=20other=20n=20channels=20of=20this=20image"=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20option=20of=20the=20"Set"=20command=20in=20the?= =?UTF-8?q?=20"B&C"=20tool=20to=20not=20work=20as=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20expected.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stei?= =?UTF-8?q?n=20Rorvik=20and=20Michael=20Schmid,=20fixed=20a=20bug=20that?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20caused=20an=20image=20pasted=20into?= =?UTF-8?q?=20a=20zoomed=20image=20to=20be=20incorrectly=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20positioned=20if=20the=20pasted=20image=20was=20equal?= =?UTF-8?q?=20or=20larger=20in=20size=20than=20=20=20=20=20=20=20=20=20the?= =?UTF-8?q?=20target=20image.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Stein=20Rorvik,=20fixed=20bugs=20that=20caused=20scale=20bar?= =?UTF-8?q?s=20to=20be=20=20=20=20=20=20=20=20=20incorrectly=20positioned?= =?UTF-8?q?=20on=20large=20images=20and=20macros=20to=20alter=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20default=20scale=20bar=20dialog=20settings.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20ke?= =?UTF-8?q?yboard=20shortcuts=20for=20zooming=20in=20and=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20out,=20as=20well=20as=20other=20shortcuts,=20to=20not?= =?UTF-8?q?=20work=20when=20a=20text=20=20=20=20=20=20=20=20=20selection?= =?UTF-8?q?=20was=20active.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?Stein=20Rorvik,=20fixed=20a=20bug=20that=20caused=20right-justi?= =?UTF-8?q?fied=20=20=20=20=20=20=20=20=20text=20added=20to=20an=20overlay?= =?UTF-8?q?=20by=20the=20Overlay.drawString()=20macro=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20function=20to=20not=20be=20displayed=20correctly.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20"hwada",=20fixed=20bug?= =?UTF-8?q?s=20that=20caused=20the=20=20=20=20=20=20=20=20=20ImagePlus.set?= =?UTF-8?q?Image(ImagePlus)=20method=20to=20sometimes=20not=20work=20as=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20expected.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Nathalie=20Houssin,=20fixed=20a=20bug=20that?= =?UTF-8?q?=20caused=20the=20Make=20=20=20=20=20=20=20=20=20Substack=20com?= =?UTF-8?q?mand=20to=20throw=20an=20exception=20when=20used=20with=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20hyperstacks=20opened=20by=20the=20OlympusV?= =?UTF-8?q?iewer=20plugin.=20=20=20=20=20=20=20=E2=96=A1=20Fixed=20bugs=20?= =?UTF-8?q?in=20the=20ImagePlus.setStack()=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20"Show=20=20=20=20=20=20=20=20=20All"?= =?UTF-8?q?=20button=20in=20the=20ROI=20Manager=20to=20not=20work=20as=20e?= =?UTF-8?q?xpected=20with=20=20=20=20=20=20=20=20=20point=20selections.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Lorenzo=20Cangiano,?= =?UTF-8?q?=20fixed=20a=20bug=20that=20caused=20=20=20=20=20=20=20=20=20pr?= =?UTF-8?q?ogrammatically=20generated=20overlays=20of=20PointRois=20on=20s?= =?UTF-8?q?tacks=20to=20=20=20=20=20=20=20=20=20be=20not=20shown=20when=20?= =?UTF-8?q?saved=20and=20reopened.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Robert=20Haase,=20fixed=20a=20bug=20that=20could=20caus?= =?UTF-8?q?e=20the=20=20=20=20=20=20=20=20=20PolygonRoi.getTracedPerimeter?= =?UTF-8?q?()=20method=20to=20throw=20a=20=20=20=20=20=20=20=20=20NullPoin?= =?UTF-8?q?terException.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Hyu?= =?UTF-8?q?ng-song=20Nam=20and=20Curtis=20Rueden,=20fixed=20a=20bug=20that?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20caused=20keyboard=20shortcuts=20to?= =?UTF-8?q?=20not=20work=20with=20the=20"Channels"=20tool.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Gilles=20Carpentier,=20fixed=20?= =?UTF-8?q?a=201.52f=20regression=20that=20=20=20=20=20=20=20=20=20caused?= =?UTF-8?q?=20the=20Edit>Selection>Create=20Mask=20command=20to=20not=20wo?= =?UTF-8?q?rk=20as=20=20=20=20=20=20=20=20=20expected=20if=20the=20image?= =?UTF-8?q?=20had=20both=20an=20roi=20and=20an=20overlay.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixed=20a?= =?UTF-8?q?=201.52g=20regression=20that=20caused=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20multi-channel=20images=20to=20lose=20color=20table=20and=20d?= =?UTF-8?q?isplay=20range=20=20=20=20=20=20=20=20=20information=20after=20?= =?UTF-8?q?being=20cropped=20and=20saved.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Stephen=20Royle,=20fixed=20a=201.52h=20regression?= =?UTF-8?q?=20that=20caused=20=20=20=20=20=20=20=20=20the=20Image>Transfor?= =?UTF-8?q?m>Rotate=2090=20Degrees=20Right=20(or=20Left)=20command=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20to=20not=20work=20as=20expected=20with=20c?= =?UTF-8?q?omposite=20images.=20=20=20=E2=80=A2=201.52g=2016=20September?= =?UTF-8?q?=202018=20=20=20=20=20=20=20=E2=96=A1=20A=20text=20selection=20?= =?UTF-8?q?in=20an=20overlay=20can=20be=20deleted=20by=20alt-clicking=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20on=20it=20and=20pressing=20backspace+de?= =?UTF-8?q?lete=20(on=20Windows)=20or=20=20=20=20=20=20=20=20=20command+de?= =?UTF-8?q?lete=20(on=20Macs).=20=20=20=20=20=20=20=E2=96=A1=20Fixed=20a?= =?UTF-8?q?=20bug=20that=20caused=20polygon=20and=20polyline=20selections?= =?UTF-8?q?=20to=20lose=20=20=20=20=20=20=20=20=20properties=20like=20colo?= =?UTF-8?q?r,=20line=20width=20and=20name=20when=20a=20point=20is=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20added=20by=20shift-clicking=20on=20an=20exist?= =?UTF-8?q?ing=20point.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Dave?= =?UTF-8?q?=20Mason,=20fixed=20a=20bug=20that=20caused=20the=20File>Import?= =?UTF-8?q?>=20=20=20=20=20=20=20=20=20URL=20command=20to=20not=20correctl?= =?UTF-8?q?y=20open=20Hyperstacks.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Volko=20Straub,=20fixed=20a=201.52f=20regression=20that?= =?UTF-8?q?=20caused=20=20=20=20=20=20=20=20=20getDirectory("")=20on=20Win?= =?UTF-8?q?dows=20to=20return=20a=20string=20ending=20in=20"/"=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20instead=20of=20the=20expected=20"\".=20=20=20?= =?UTF-8?q?=E2=80=A2=201.52f=207=20September=202018=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added=20the=20Pl?= =?UTF-8?q?ot.addHistogram()=20macro=20=20=20=20=20=20=20=20=20function,?= =?UTF-8?q?=20which=20plots=20a=20histogram=20from=20an=20array=20(example?= =?UTF-8?q?).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Visc?= =?UTF-8?q?her,=20any=20currently=20running=20macro=20is=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20aborted=20when=20running=20an=20installed=20macro=20fr?= =?UTF-8?q?om=20the=20Plugins>Macros=20=20=20=20=20=20=20=20=20menu=20or?= =?UTF-8?q?=20the=20editor's=20Macros=20menu.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20added=20the=20"Er?= =?UTF-8?q?ror=20Function"=20[y=3Da+b*erf=20=20=20=20=20=20=20=20=20((x-c)?= =?UTF-8?q?/d)]=20curve=20fit=20option=20and=20the=20ij.util.IJ.Math.erf(x?= =?UTF-8?q?)=20=20=20=20=20=20=20=20=20method=20(example).=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20The=20Edit>Selection>Create=20Mask=20command?= =?UTF-8?q?=20works=20with=20line=20=20=20=20=20=20=20=20=20selections=20a?= =?UTF-8?q?nd=20overlays.=20=20=20=20=20=20=20=E2=96=A1=20The=20"Black=20b?= =?UTF-8?q?ackground"=20setting=20defaults=20to=20'true'.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Anna=20Povolna,=20the=20"Open?= =?UTF-8?q?=20all=20files=20in=20folder"=20and=20"Use=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20virtual=20stack"=20options=20in=20the=20File>Import>raw?= =?UTF-8?q?=20dialog=20can=20be=20=20=20=20=20=20=20=20=20used=20at=20the?= =?UTF-8?q?=20same=20time.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'?= =?UTF-8?q?Sethur',=20ImageJ=20no=20longer=20sorts=20imported=20DICOM=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20stacks=20by=20series=20number=20(tag=20?= =?UTF-8?q?0020,0011)=20if=20"Sort=20images=20=20=20=20=20=20=20=20=20nume?= =?UTF-8?q?rically"=20is=20not=20checked=20in=20the=20File>Import>ImageSeq?= =?UTF-8?q?uence=20=20=20=20=20=20=20=20=20dialog.=20Also=20added=20a=20re?= =?UTF-8?q?cordable=20'noMetaSort'=20option=20to=20the=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20options=20string=20of=20the=20FolderOpener.open(dir,op?= =?UTF-8?q?tions)=20method.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?'Alan',=20added=20the=20createThresholdMask()=20and=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20createRoiMask()=20methods=20to=20the=20ImagePlus?= =?UTF-8?q?=20class.=20These=20methods=20=20=20=20=20=20=20=20=20are=20rec?= =?UTF-8?q?orded=20when=20using=20the=20Edit>Selection>Create=20Mask=20com?= =?UTF-8?q?mand=20=20=20=20=20=20=20=20=20(JavaScript=20example).=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Added=20the=20recordable=20Raw.open(),?= =?UTF-8?q?=20Raw.openAll()=20and=20=20=20=20=20=20=20=20=20Raw.openAllVir?= =?UTF-8?q?tual()=20methods=20(JavaScript=20example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20added=20the=20Dicom?= =?UTF-8?q?Tools.getTagName(tag)=20=20=20=20=20=20=20=20=20method.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Christian=20Tischer,?= =?UTF-8?q?=20fixed=20bugs=20in=20the=20RoiManager.add=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20(ImagePlus,Roi,int)=20method=20than=20caused=20it=20to?= =?UTF-8?q?=20not=20behave=20as=20=20=20=20=20=20=20=20=20expected=20if=20?= =?UTF-8?q?the=20ROI=20name=20was=20not=20null.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixed=20bugs=20t?= =?UTF-8?q?hat=20caused=20the=20Edit>Cut=20=20=20=20=20=20=20=20=20and=20A?= =?UTF-8?q?nalyze>Set=20Scale=20commands=20to=20not=20set=20the=20'changes?= =?UTF-8?q?'=20flag.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein?= =?UTF-8?q?=20Rorvik,=20fixed=20a=20bug=20that=20caused=20the=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Overlay.drawString=20macro=20function=20to=20ign?= =?UTF-8?q?ore=20the=20justification=20=20=20=20=20=20=20=20=20set=20by=20?= =?UTF-8?q?the=20setJustification()=20function.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20output=20of=20the=20=20=20=20=20=20=20=20=20Over?= =?UTF-8?q?lay.drawString()=20function=20to=20be=20lost=20when=20text=20is?= =?UTF-8?q?=20added=20=20=20=20=20=20=20=20=20using=20Overlay.addSelection?= =?UTF-8?q?().=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Lorenzo=20Can?= =?UTF-8?q?giono,=20fixed=20a=20bug=20that=20caused=20selections=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20pasted=20into=20images=20to=20not=20be=20save?= =?UTF-8?q?d.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Mahmoudi=20Sid?= =?UTF-8?q?i=20Ahmed,=20fixed=20a=20bug=20that=20caused=20the=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Analyze>Calibrate=20command=20to=20not=20work=20?= =?UTF-8?q?with=20signed=2016-bit=20=20=20=20=20=20=20=20=20images.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Menelaos=20Symeonides,?= =?UTF-8?q?=20fixed=20an=20ROI=20Manager=20bug=20that=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20caused=20the=20stack=20position=20to=20be=20ignored=20whe?= =?UTF-8?q?n=20measuring=20renamed=20=20=20=20=20=20=20=20=20ROIs.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ron=20DeSpain,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20attempts=20to=20add=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20to=20(by=20holding=20shift=20key=20down)=20and=20su?= =?UTF-8?q?bract=20from=20(by=20holding=20alt=20=20=20=20=20=20=20=20=20ke?= =?UTF-8?q?y=20down)=20elliptical=20selections=20to=20fail.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Ron=20DeSpain,=20fixed=20a=20bu?= =?UTF-8?q?g=20that=20caused=20the=20Window>Tile=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20command=20to=20overlap=20the=20"ImageJ"=20window=20with=20im?= =?UTF-8?q?age=20titles.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Pet?= =?UTF-8?q?e=20Bankhead,=20fixed=20a=20bug=20the=20caused=20the=20Process>?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Batch>Convert=20command=20to=20not?= =?UTF-8?q?=20work=20correctly=20on=20Macs.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20'Hamish',=20fixed=20a=20bug=20that=20caused=20?= =?UTF-8?q?the=20roiManager=20=20=20=20=20=20=20=20=20("delete")=20macro?= =?UTF-8?q?=20function=20to=20throw=20an=20exception=20when=20used=20in=20?= =?UTF-8?q?a=20=20=20=20=20=20=20=20=20loop.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20cau?= =?UTF-8?q?sed=20one=20column=20=20=20=20=20=20=20=20=20results=20tables?= =?UTF-8?q?=20to=20not=20be=20displayed=20correctly.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20File>Import>Raw=20=20=20=20=20=20=20=20=20to=20s?= =?UTF-8?q?ilently=20fail=20when=20importing=20a=20stack=20and=20the=20fil?= =?UTF-8?q?e=20size=20was=20=20=20=20=20=20=20=20=20smaller=20than=20the?= =?UTF-8?q?=20size=20of=20a=20single=20image.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20the=20=20=20=20=20=20=20=20=20Overlay.drawString?= =?UTF-8?q?()=20macro=20function=20to=20not=20correctly=20display=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20right-justified=20text.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20bugs=20that?= =?UTF-8?q?=20caused=20the=20run=20=20=20=20=20=20=20=20=20("Raw...",optio?= =?UTF-8?q?ns)=20and=20run("Image=20Sequence...",options)=20macro=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20functions=20to=20fail=20silently=20if=20the?= =?UTF-8?q?=20file=20or=20folder=20did=20not=20exist.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20the=20stack=20title=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20be=20incorrect=20after=20importing=20an=20image=20sequence?= =?UTF-8?q?=20on=20Windows=20=20=20=20=20=20=20=20=20using=20a=20file=20pa?= =?UTF-8?q?th=20with=20forward=20slashes.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20File>Open=20Next=20=20=20=20=20=20=20=20=20to=20not=20correc?= =?UTF-8?q?tly=20open=20a=20non-composite=20image=20after=20having=20opene?= =?UTF-8?q?d=20=20=20=20=20=20=20=20=20a=20composite=20image.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Ved=20Sharma,=20fixed=20an?= =?UTF-8?q?=20ROI=20Manager=20bug=20that=20caused=20a=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20"Rename=20ROI"=20dialog=20do=20be=20unexpectadly=20displa?= =?UTF-8?q?yed=20when=20running=20=20=20=20=20=20=20=20=20macro=20using=20?= =?UTF-8?q?setKeyDown("alt")=20and=20makeOval()=20to=20create=20a=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20composite=20selection.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Ved=20Sharma,=20fixed=20an=20ROI=20Ma?= =?UTF-8?q?nager=20bug=20that=20caused=20an=20=20=20=20=20=20=20=20=20exce?= =?UTF-8?q?ption=20when=20saving=20an=20ROI=20set=20containing=20a=20point?= =?UTF-8?q?=20selection=20=20=20=20=20=20=20=20=20followed=20by=20a=20comp?= =?UTF-8?q?osite=20selection.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Salim=20Kanoun,=20fixed=20a=20bug=20that=20caused=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20RoiManager.addRoi(roi)=20calls=20to=20be=20ig?= =?UTF-8?q?nored=20if=20the=20ROI=20was=20a=20=20=20=20=20=20=20=20=20dupl?= =?UTF-8?q?icate.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'TMC',=20f?= =?UTF-8?q?ixed=20a=20bug=20that=20caused=20the=20ROI=20Manager's=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20"Interpolate=20ROIs"=20command=20to=20throw?= =?UTF-8?q?=20an=20exception.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20'Agnieszka',=20fixed=20a=20bug=20that=20caused=20the=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20ImagePlus.getFileInfo()=20method=20to=20th?= =?UTF-8?q?row=20a=20NullPointerException.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20cau?= =?UTF-8?q?sed=20the=20Macros>=20=20=20=20=20=20=20=20=20Evaluate=20comman?= =?UTF-8?q?ds=20in=20the=20text=20editor=20to=20not=20update=20the=20Windo?= =?UTF-8?q?w=20=20=20=20=20=20=20=20=20menu.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Norbert=20Vischer,=20fixed=20a=20bug=20that=20?= =?UTF-8?q?caused=20the=20macro=20=20=20=20=20=20=20=20=20editor=20to=20no?= =?UTF-8?q?t=20always=20abort=20any=20existing=20macro=20before=20running?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20another=20one.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Manel=20Bosch,=20fixed=20a=201.52e=20?= =?UTF-8?q?regression=20that=20caused=20=20=20=20=20=20=20=20=20image=20co?= =?UTF-8?q?nversions=20to=20RGB=20to=20not=20preserve=20the=20color=20codi?= =?UTF-8?q?ng.=20=20=20=E2=80=A2=201.52e=2011=20July=202018=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20The=20"Threshold"=20tool=20no=20longer=20rese?= =?UTF-8?q?ts=20the=20display=20range=20of=20=20=20=20=20=20=20=20=2016-bi?= =?UTF-8?q?t=20and=2032-bit=20images.=20=20=20=20=20=20=20=E2=96=A1=20Rest?= =?UTF-8?q?ored=20the=20"Set"=20button=20(removed=20in=201.51r)=20to=20the?= =?UTF-8?q?=20"Threshold"=20=20=20=20=20=20=20=20=20dialog,=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Kai=20Schleicher,=20the=20optio?= =?UTF-8?q?ns=20string=20of=20the=20=20=20=20=20=20=20=20=20FolderOpener.o?= =?UTF-8?q?pen(dir,options)=20method=20can=20now=20include=20a=20file=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20name=20filter=20(example).=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Added=20a=20no-argument=20constructor=20to?= =?UTF-8?q?=20the=20PointRoi=20class=20(example=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?at=20Help>Examples>JavaScript>Points).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20Roi.size()=20method,=20equivalent=20t?= =?UTF-8?q?o=20Roi.getPolygon=20=20=20=20=20=20=20=20=20().npoints.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Added=20the=20FFT.forward(),=20FFT.m?= =?UTF-8?q?ultiply(),=20FFT.inverse()=20and=20=20=20=20=20=20=20=20=20FFT.?= =?UTF-8?q?filter()=20methods=20(JavaScript=20example).=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20The=20open("/path/to/file.avi")=20macro=20functi?= =?UTF-8?q?on=20and=20the=20=20=20=20=20=20=20=20=20IJ.openImage("/path/to?= =?UTF-8?q?/file.avi")=20method=20now=20open=20AVI=20files=20by=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20default=20as=20virtual=20stacks.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Volko=20Straub=20and=20Micha?= =?UTF-8?q?el=20Schmid,=20fixed=20bugs=20that=20=20=20=20=20=20=20=20=20ca?= =?UTF-8?q?used=20the=20ImageProcessor.isInvertedLut()=20and=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20ImageProcessor.isColorLut()=20methods=20to=20som?= =?UTF-8?q?etimes=20incorrectly=20=20=20=20=20=20=20=20=20return=20'true'?= =?UTF-8?q?=20with=20thresholded=20images.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Volko=20Straub,=20fixed=20a=20bug=20that=20cou?= =?UTF-8?q?ld=20cause=20=20=20=20=20=20=20=20=20non-thresholded=20pixels?= =?UTF-8?q?=20in=2016-bit=20and=2032-bit=20images=20to=20be=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20highlighted=20in=20red=20(example).=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Thomas=20Boudier=20and=20Jan=20?= =?UTF-8?q?Eglinger,=20fixed=20a=20bug=20that=20=20=20=20=20=20=20=20=20ca?= =?UTF-8?q?used=20macro=20file=20name=20parameters=20containing=20a=20"]"?= =?UTF-8?q?=20character=20to=20=20=20=20=20=20=20=20=20not=20be=20read=20c?= =?UTF-8?q?orrectly.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael?= =?UTF-8?q?=20Nonet,=20fixed=20a=20bug=20caused=20the=20median=20to=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20always=20be=20set=20to=20zero=20when=20mea?= =?UTF-8?q?suring=20line=20selections.=20=20=20=20=20=20=20=E2=96=A1=20Tha?= =?UTF-8?q?nks=20to=20Norbert=20Vischer,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20errors=20after=20=20=20=20=20=20=20=20=20running=20the=20run?= =?UTF-8?q?("RGB=20Stack")=20or=20run("HSB=20Stack")=20macro=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20functions=20on=20large=20images=20when=20running?= =?UTF-8?q?=20Java=208=20on=20macOS.=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20Chris=20Wood=20and=20Curtis=20Rueden,=20fixed=20a=20bu?= =?UTF-8?q?g=20that=20caused=20=20=20=20=20=20=20=20=20the=20Image>Stacks>?= =?UTF-8?q?Delete=20Slice=20command=20to=20deadlock=20when=20deleting=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20the=20last=20channel=20of=20a=20hyperst?= =?UTF-8?q?ack.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorv?= =?UTF-8?q?ik,=20fixed=20a=20bug=20that=20caused=20the=20Process>=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Math>NaN=20Background=20command=20to=20throw?= =?UTF-8?q?=20an=20exception=20when=20=20=20=20=20=20=20=20=20attempting?= =?UTF-8?q?=20to=20process=20a=20non-32-bit=20stack.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20o?= =?UTF-8?q?n=20Windows=20that=20caused=20text=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20be=20pasted=20into=20text=20editor=20windows=20at=20the=20wr?= =?UTF-8?q?ong=20position.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20S?= =?UTF-8?q?tein=20Rorvik,=20fixed=20a=20bug=20that=20caused=20print("?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ") 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. --- build.xml | 3 +- ij/IJ.java | 10 ++-- ij/ImageJ.java | 9 ++-- ij/ImagePlus.java | 5 +- ij/Prefs.java | 10 ++-- ij/VirtualStack.java | 11 ++++- ij/WindowManager.java | 4 +- ij/gui/GenericDialog.java | 24 +++++++++- ij/gui/StackWindow.java | 14 +++--- ij/gui/Toolbar.java | 8 +++- ij/io/ImageReader.java | 2 +- ij/macro/Functions.java | 28 +++++++---- ij/measure/ResultsTable.java | 5 +- ij/plugin/Animator.java | 42 +++++++++++----- ij/plugin/Benchmark.java | 8 ++-- ij/plugin/Options.java | 2 + ij/plugin/Orthogonal_Views.java | 10 ++-- ij/plugin/Thresholder.java | 16 +------ ij/plugin/filter/Filters.java | 34 ++++--------- ij/plugin/filter/ParticleAnalyzer.java | 14 ++---- ij/plugin/filter/PlugInFilterRunner.java | 1 + ij/plugin/frame/Recorder.java | 6 ++- ij/process/ImageProcessor.java | 5 ++ ij/process/ShortProcessor.java | 11 +++-- plugins/MacAdapter9.class | Bin 0 -> 2272 bytes plugins/MacAdapter9.source | 58 +++++++++++++++++++++++ release-notes.html | 41 ++++++++++++++++ 27 files changed, 273 insertions(+), 108 deletions(-) create mode 100644 plugins/MacAdapter9.class create mode 100644 plugins/MacAdapter9.source diff --git a/build.xml b/build.xml index bafc7fd6e..8728d0cb3 100644 --- a/build.xml +++ b/build.xml @@ -16,7 +16,8 @@ - + + 8) // newer JREs use different drag-drop, about mechanism + IJ.runPlugIn("ij.plugin.MacAdapter9", ""); + else + IJ.runPlugIn("ij.plugin.MacAdapter", ""); } catch(Throwable e) {} } if (applet==null) diff --git a/ij/ImagePlus.java b/ij/ImagePlus.java index 868ca5b09..b97570911 100644 --- a/ij/ImagePlus.java +++ b/ij/ImagePlus.java @@ -2074,7 +2074,10 @@ public void createNewRoi(int sx, int sy) { } } if (Prefs.pointAutoNextSlice && getStackSize()>1) { + boolean order = Prefs.reverseNextPreviousOrder; + Prefs.reverseNextPreviousOrder = true; IJ.run(this, "Next Slice [>]", ""); + Prefs.reverseNextPreviousOrder = order; deleteRoi(); } break; @@ -2838,7 +2841,7 @@ public void paste() { cr = cRoi.getBounds(); if (cr==null) cr = new Rectangle(0, 0, w, h); - if (r==null || Math.abs(cr.width-r.width)>10 || Math.abs(cr.height-r.height)>10) { + if (r==null || (cr.width!=r.width || cr.height!=r.height)) { // Create a new roi centered on visible part of image, or centered on image if clipboard is >= image ImageCanvas ic = win!=null?ic = win.getCanvas():null; Rectangle srcRect = ic!=null?ic.getSrcRect():new Rectangle(0,0,width,height); diff --git a/ij/Prefs.java b/ij/Prefs.java index 80109edb0..aa87a9234 100644 --- a/ij/Prefs.java +++ b/ij/Prefs.java @@ -58,7 +58,7 @@ public class Prefs { REVERSE_NEXT_PREVIOUS_ORDER=1<<5, AUTO_RUN_EXAMPLES=1<<6, SHOW_ALL_POINTS=1<<7, DO_NOT_SAVE_WINDOW_LOCS=1<<8, JFILE_CHOOSER_CHANGED=1<<9, CANCEL_BUTTON_ON_RIGHT=1<<10, IGNORE_RESCALE_SLOPE=1<<11, - NON_BLOCKING_DIALOGS=1<<12; + NON_BLOCKING_DIALOGS=1<<12, MODERN_MODE=1<<13; public static final String OPTIONS2 = "prefs.options2"; /** file.separator system property */ @@ -100,7 +100,7 @@ public class Prefs { /** Do not draw black border around image. */ public static boolean noBorder; /** Only show ROIs associated with current slice in Roi Manager "Show All" mode. */ - public static boolean showAllSliceOnly; + public static boolean showAllSliceOnly = true; /** Include column headers when copying tables to clipboard. */ public static boolean copyColumnHeaders; /** Do not include row numbers when copying tables to clipboard. */ @@ -186,6 +186,8 @@ public class Prefs { public static boolean supportMacroUndo; /** Use NonBlockingGenericDialogs in filters */ public static boolean nonBlockingFilterDialogs; + /** Currently not used */ + public static boolean modernMode; //Save location of moved image windows */ //public static boolean saveImageLocation = true; @@ -551,6 +553,7 @@ static void loadOptions() { dialogCancelButtonOnRight = (options2&CANCEL_BUTTON_ON_RIGHT)!=0; ignoreRescaleSlope = (options2&IGNORE_RESCALE_SLOPE)!=0; nonBlockingFilterDialogs = (options2&NON_BLOCKING_DIALOGS)!=0; + modernMode = (options2&MODERN_MODE)!=0; } static void saveOptions(Properties prefs) { @@ -581,7 +584,8 @@ static void saveOptions(Properties prefs) { + (jFileChooserSettingChanged?JFILE_CHOOSER_CHANGED:0) + (dialogCancelButtonOnRight?CANCEL_BUTTON_ON_RIGHT:0) + (ignoreRescaleSlope?IGNORE_RESCALE_SLOPE:0) - + (nonBlockingFilterDialogs?NON_BLOCKING_DIALOGS:0); + + (nonBlockingFilterDialogs?NON_BLOCKING_DIALOGS:0) + + (modernMode?MODERN_MODE:0); prefs.put(OPTIONS2, Integer.toString(options2)); } diff --git a/ij/VirtualStack.java b/ij/VirtualStack.java index a79b8989b..10dcaec96 100644 --- a/ij/VirtualStack.java +++ b/ij/VirtualStack.java @@ -17,6 +17,7 @@ public class VirtualStack extends ImageStack { private String[] names; private String[] labels; private int bitDepth; + private int delay; private Properties properties; private boolean generateData; private int[] indexes; // used to translate non-CZT hyperstack slice numbers @@ -62,6 +63,7 @@ public VirtualStack(int width, int height, int slices, String options) { if (options.contains("16-bit")) depth=16; if (options.contains("RGB")) depth=24; if (options.contains("32-bit")) depth=32; + if (options.contains("delay")) delay=250; this.generateData = options.contains("fill"); this.bitDepth = depth; } @@ -149,6 +151,7 @@ public ImageProcessor getProcessor(int n) { case 24: ip = new ColorProcessor(w,h); break; case 32: ip = new FloatProcessor(w,h); break; } + String hlabel = null; if (generateData) { int value = 0; ImagePlus img = WindowManager.getCurrentImage(); @@ -160,8 +163,14 @@ public ImageProcessor getProcessor(int n) { for (int i=0; i0) + IJ.wait(delay); return ip; } n = translate(n); // update n for hyperstacks not in the default CZT order diff --git a/ij/WindowManager.java b/ij/WindowManager.java index 3a206a5c2..c6d4022b8 100644 --- a/ij/WindowManager.java +++ b/ij/WindowManager.java @@ -394,7 +394,9 @@ private static void removeImageWindow(ImageWindow win) { if (index==-1) return; // not on the window list try { - imageList.remove(win); + synchronized(WindowManager.class) { + imageList.remove(win); + } activations.remove(win); if (imageList.size()>1 && !Prefs.closingAll) { ImageWindow win2 = activations.size()>0?(ImageWindow)activations.get(activations.size()-1):null; diff --git a/ij/gui/GenericDialog.java b/ij/gui/GenericDialog.java index a53cca8ce..062eb2872 100644 --- a/ij/gui/GenericDialog.java +++ b/ij/gui/GenericDialog.java @@ -372,6 +372,26 @@ public void addFileField(String label, String defaultPath, int columns) { saveLabel(panel, label); } + /** + * Add button to the dialog + * @param label button label + * @param listener listener to handle the action when pressing the button + */ + public void addButton(String label, ActionListener listener) { + if (GraphicsEnvironment.isHeadless()) + return; + Button button = new Button(label); + button.addActionListener(listener); + button.addKeyListener(this); + GridBagLayout layout = (GridBagLayout)getLayout(); + Panel panel = new Panel(); + addPanel(panel); + GridBagConstraints constraints = layout.getConstraints(panel); + remove(panel); + layout.setConstraints(button, constraints); + add(button); + } + /** Adds a popup menu that lists the currently open images. * Call getNextImage() to retrieve the selected * image. Based on the addImageChoice() @@ -735,11 +755,11 @@ public void addTextAreas(String text1, String text2, int rows, int columns) { if (textArea1!=null) return; Panel panel = new Panel(); int scrollbars = TextArea.SCROLLBARS_NONE; - if (text1.endsWith("SCROLLBARS_BOTH")) { + if (text1!=null && text1.endsWith("SCROLLBARS_BOTH")) { scrollbars = TextArea.SCROLLBARS_BOTH; text1 = text1.substring(0, text1.length()-15); } - if (text1.endsWith("SCROLLBARS_VERTICAL_ONLY")) { + if (text1!=null && text1.endsWith("SCROLLBARS_VERTICAL_ONLY")) { scrollbars = TextArea.SCROLLBARS_VERTICAL_ONLY; text1 = text1.substring(0, text1.length()-24); } diff --git a/ij/gui/StackWindow.java b/ij/gui/StackWindow.java index bd84d6098..324bdfd10 100644 --- a/ij/gui/StackWindow.java +++ b/ij/gui/StackWindow.java @@ -134,7 +134,7 @@ public synchronized void adjustmentValueChanged(AdjustmentEvent e) { t = tSelector.getValue(); if (t==imp.getFrame()&&e.getAdjustmentType()==AdjustmentEvent.TRACK) return; } - updatePosition(); + slice = (t-1)*nChannels*nSlices + (z-1)*nChannels + c; notify(); } if (!running) @@ -160,11 +160,6 @@ else if (imp.getNFrames()==stackSize) throw new RuntimeException("Unknownsource:"+source); } - void updatePosition() { - slice = (t-1)*nChannels*nSlices + (z-1)*nChannels + c; - imp.updatePosition(c, z, t); - } - public void actionPerformed(ActionEvent e) { } @@ -244,8 +239,10 @@ public void run() { if (slice>0) { int s = slice; slice = 0; - if (s!=imp.getCurrentSlice()) + if (s!=imp.getCurrentSlice()) { + imp.updatePosition(c, z, t); setSlice(imp,s); + } } } } @@ -301,7 +298,8 @@ public void setPosition(int channel, int slice, int frame) { tSelector.setValue(frame); SyncWindows.setT(this, frame); } - updatePosition(); + this.slice = (t-1)*nChannels*nSlices + (z-1)*nChannels + c; + imp.updatePosition(c, z, t); if (this.slice>0) { int s = this.slice; this.slice = 0; diff --git a/ij/gui/Toolbar.java b/ij/gui/Toolbar.java index ecdd42cfd..a3efe6f0a 100644 --- a/ij/gui/Toolbar.java +++ b/ij/gui/Toolbar.java @@ -5,7 +5,11 @@ import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import java.io.File; -import java.util.*; +import java.util.Timer; +import java.util.Hashtable; +import java.util.TimerTask; +import java.util.Arrays; +import java.util.Locale; import ij.*; import ij.plugin.frame.*; import ij.plugin.MacroInstaller; @@ -1271,7 +1275,7 @@ public void mousePressed(final MouseEvent e) { if (!isRightClick && longClickDelay>0) { if (pressTimer==null) - pressTimer = new java.util.Timer(); + pressTimer = new Timer(); pressTimer.schedule(new TimerTask() { public void run() { if (pressTimer != null) { diff --git a/ij/io/ImageReader.java b/ij/io/ImageReader.java index 2f6d20a98..f111cbf5b 100644 --- a/ij/io/ImageReader.java +++ b/ij/io/ImageReader.java @@ -154,7 +154,7 @@ short[] readCompressed16bitImage(InputStream in) throws IOException { int base = 0; short last = 0; for (int k=0; k 0) { diff --git a/ij/macro/Functions.java b/ij/macro/Functions.java index 2110488c0..f74dd48ae 100644 --- a/ij/macro/Functions.java +++ b/ij/macro/Functions.java @@ -5220,6 +5220,18 @@ else if (name.equals("getOrthoViews")) setPosition(imp); return Double.NaN; } + if (name.equals("setChannel")) { + imp.setPosition((int)getArg(),imp.getSlice(),imp.getFrame()); + return Double.NaN; + } + if (name.equals("setSlice")) { + imp.setPosition(imp.getChannel(), (int)getArg(), imp.getFrame()); + return Double.NaN; + } + if (name.equals("setFrame")) { + imp.setPosition(imp.getChannel(), imp.getSlice(), (int)getArg()); + return Double.NaN; + } if (name.equals("getPosition")) { getPosition(imp); return Double.NaN; @@ -5245,16 +5257,12 @@ else if (name.equals("getOrthoViews")) {getStackUnits(cal); return Double.NaN;} if (name.equals("setUnits")) {setStackUnits(imp); return Double.NaN;} - if (imp.getStackSize()==1) + if (imp.getStackSize()==1) { interp.error("Stack required"); + return Double.NaN; + } if (name.equals("setDimensions")) setDimensions(imp); - else if (name.equals("setChannel")) - imp.setPosition((int)getArg(), imp.getSlice(), imp.getFrame()); - else if (name.equals("setSlice")) - imp.setPosition(imp.getChannel(), (int)getArg(), imp.getFrame()); - else if (name.equals("setFrame")) - imp.setPosition(imp.getChannel(), imp.getSlice(), (int)getArg()); else if (name.equals("setDisplayMode")) setDisplayMode(imp, getStringArg()); else if (name.equals("getDisplayMode")) @@ -8010,7 +8018,11 @@ private Variable doProperty() { return v; } else if (name.equals("setSliceLabel")) { String label = getFirstString(); - int slice = (int)getLastArg(); + int slice = imp.getCurrentSlice(); + if (interp.nextToken()==',') + slice = (int)getLastArg(); + else + interp.getRightParen(); if (slice<1 || slice>imp.getStackSize()) interp.error("Argument must be >=1 and <="+imp.getStackSize()); imp.getStack().setSliceLabel(label, slice); diff --git a/ij/measure/ResultsTable.java b/ij/measure/ResultsTable.java index e40ed9743..aeef7d31d 100644 --- a/ij/measure/ResultsTable.java +++ b/ij/measure/ResultsTable.java @@ -1235,8 +1235,9 @@ public static ResultsTable open(String path) throws IOException { if (j==labelsIndex&&labels) rt.addLabel(headings[labelsIndex], items[labelsIndex]); else { - double value = j>"); + int threads = Prefs.getThreads(); + String suffix = " THREAD"+(threads>1?"S":"")+")>>"; + rt.addValue("Computer", "<Duplicate to convert to a normal stack."); diff --git a/ij/plugin/filter/Filters.java b/ij/plugin/filter/Filters.java index 26ef9dce0..89f6be556 100644 --- a/ij/plugin/filter/Filters.java +++ b/ij/plugin/filter/Filters.java @@ -20,14 +20,14 @@ public int setup(String arg, ImagePlus imp) { this.imp = imp; if (imp!=null) { Roi roi = imp.getRoi(); + if (imp.getType()==ImagePlus.GRAY16 && arg.equals("invert")) { + imp.resetRoi(); + roi = null; + } if (roi!=null && !roi.isArea()) noRoi = true; } int flags = IJ.setupDialog(imp, DOES_ALL-DOES_8C+SUPPORTS_MASKING); - if ((flags&PlugInFilter.DOES_STACKS)!=0 && imp.getType()==ImagePlus.GRAY16 && imp.getStackSize()>1 && arg.equals("invert")) { - invert16BitStack(imp); - return DONE; - } return flags; } @@ -38,6 +38,9 @@ public void run(ImageProcessor ip) { if (arg.equals("invert")) { ip.invert(); + slice++; + if (imp.getBitDepth()==16 && imp.getStackSize()>1 && slice==imp.getStackSize()) + imp.resetDisplayRange(); return; } @@ -87,28 +90,7 @@ public void run(ImageProcessor ip) { } } - - void invert16BitStack(ImagePlus imp) { - imp.deleteRoi(); - imp.getCalibration().disableDensityCalibration(); - ImageStatistics stats = new StackStatistics(imp); - ImageStack stack = imp.getStack(); - int nslices = stack.size(); - int min=(int)stats.min, range=(int)(stats.max-stats.min); - int n = imp.getWidth()*imp.getHeight(); - for (int slice=1; slice<=nslices; slice++) { - ImageProcessor ip = stack.getProcessor(slice); - short[] pixels = (short[])ip.getPixels(); - for (int i=0; i0 && !isSigned16Bit()) + range = (int)Math.pow(2,defaultRange); + setMinAndMax(0, range-1); process(INVERT, 0.0); + resetMinAndMax(); } - + public void add(int value) {process(ADD, value);} public void add(double value) {process(ADD, value);} public void set(double value) {process(SET, value);} diff --git a/plugins/MacAdapter9.class b/plugins/MacAdapter9.class new file mode 100644 index 0000000000000000000000000000000000000000..44ef7dd31b5e5273ffaf3f44ef0c55ddad8ebb3f GIT binary patch literal 2272 zcmZuySyLQU6#nio&@gleApsK&dn7;z;}S#2AO-`Gi7W|V5aQO%T!)6Cd(sObafxv^ z`UiaR)n~P8NTkZji!c5p%TmAF)3X3mQ+2zi?>XN+=R4my_pg6{{{z4U{18I~H5#Hi zYEdW9ykTq`@vLEG;`3`8GUW->jhU9|jSJND58R5O9t|2|IvSxD&5gTWd{Vlbo}Ckj zWu#a7bE1D>CP1t(Nhpja9Y@hD(BevOJ}0efW>!ucRyr#kfxiB-Q@Vf~FB-X_RiY3} zi;m+sA#jv96Kl5bl|Xu`fK*z90Bt&+!AXH80^Ib?vVV6K{|W=T*W+0p9AI`Ow~UOu zK0G`e!)df@=+M!LE`eHeBc8l2(2%yT+FM)9P@pwL4p?6F9Mj4K!StY4!xNtlXrWe4Kw&`tp(lI=nbhqvE zPKMu!FpRi{7j(Rcmv}}Qp=ctYtsCx~++j2n$ExzUpyL%>6o^{E=aK*_B$d!`Nk9+q zOgpY}XuxIg^O%lTL8Y~lwOrQEm{xq&NKK@T9D^Dqn>oW z6sy#HBkQ|?E+>)FkyepKUGu)w@FA;5E7ndWES(r6Y80!cjty*bWH@rm-j+)0$#4Md zum9FQ3JWJI6kA6QcUWMXz!O$_BAs5c7i20BeAT{LRp)YmQG(57)iCx<($cUk(0-_q zDyM*k9f9scCI_dDhWi4i51CcW0}US+dn8D;SZ%icqM5M_&v(d2-yz|S9ah75f=pkv z)3iT2V_I^~-&&K-lF|<4;P@6xyB^HSAQOSEDx)gc3MK_>$RHG<;j}nY#k`bo+2zQh zXQVb~ja+zgYvD|l^MbtNOV?XARgaBVfm22Wq(XXX{1@j~0l>}KmMeqU>c>*q@QR5o z+P;&LDp1z5qW6at_vq%Bh)}vNeB8x7d;|_MH8S}8g!fqlpF-n1uQIL=_@$js!DsE@ zF2pZ<5%`R&+6J1rK13H+WjdyALOxGChBiAin8y*d98*hc*|Uw{v_TZDXh0j9czqnl zNn(7CFG8dqJ|ncMYdQ58&y{`ET?^h1wLw^4;;Yd95z!QC@?0L>PjFUXcIXMt3;c*n ze0f>mDMsdg#pwAwUd!X^@*a{agDr3FV)k*tzbm2k2HY{&JxmhJ`3 paths = new Vector(); + + public void run(String arg) { + Desktop dtop = Desktop.getDesktop(); + dtop.setOpenFileHandler(this); + dtop.setAboutHandler(this); + dtop.setQuitHandler(this); + } + + @Override + public void handleAbout(AboutEvent e) { + IJ.doCommand("About ImageJ..."); + } + + @Override + public void openFiles(OpenFilesEvent e) { + for (File file: e.getFiles()) { + paths.add(file.getPath()); + Thread thread = new Thread(this, "Open"); + thread.setPriority(thread.getPriority()-1); + thread.start(); + } + } + + @Override + public void handleQuitRequestWith(QuitEvent e, QuitResponse response) { + new Executer("Quit", null); // works with the CommandListener + } + + // Not adding preference handling + // because we don't have the equivalent of app.setEnabledPreferencesMenu(true); + // @Override + // public void handlePreferences(PreferencesEvent e) { + // IJ.error("The ImageJ preferences are in the Edit>Options menu."); + // } + + public void run() { + if (paths.size() > 0) { + (new Opener()).openAndAddToRecent(paths.remove(0)); + } + } +} diff --git a/release-notes.html b/release-notes.html index ae7251647..8eb21e9b3 100644 --- a/release-notes.html +++ b/release-notes.html @@ -5,6 +5,47 @@ +
  • 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 +(example). +
    • 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 From 649a92bf166b1fa5ed872ec7a9b7cfbf116a0676 Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Sun, 12 Sep 2021 19:21:02 -0500 Subject: [PATCH 3/5] Bump to next development cycle --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 26d4495ee..0081bbbd1 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ net.imagej ij - 1.53k + 1.53l-SNAPSHOT ImageJ ImageJ is an open source Java image processing program inspired by NIH Image for the Macintosh. From 85b07dddd3a6dfb7867c879fb9f2cc6c0ae957aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Berthoz?= Date: Sun, 12 Sep 2021 12:49:05 +0200 Subject: [PATCH 4/5] Describe how to contribute to ImageJ1.x in README The procedure to contribute to ImageJ1.x is poorly described. The README is very brief: it simply says that changes should go to the [imagej1 repository](https://github.com/imagej/imagej1). On the other hand, the ImageJ1 repository, indicates: > To develop this code, use https://github.com/imagej/ImageJA. yielding an infinite loop. The actual way to contribute to ImageJ1.x is described on [this section](https://imagej.net/contribute/#imagej) of the wiki. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 11f87c259..946b0f484 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,6 @@ See the [ImageJA page](https://imagej.net/libs/imageja) for details. Because much of the content in this repository is generated automatically, depending on the type of change you want to make your edit should go in one of three places: -* Source file content changes (e.g. bug fixes) should go to the [imagej1 repository](https://github.com/imagej/imagej1). +* Source file content changes (e.g. bug fixes) should go to the [imagej1 repository](https://github.com/imagej/imagej1). To submit changes in the ImageJ1 repository, see [Contributing#ImageJ](https://imagej.net/contribute/#imagej) on the Wiki. * Source file *location* changes (e.g. moving a file to the correct package) go in the [ij1-builds repository](https://github.com/imagej/ij1-builds). * Changes to the build structure (e.g. `pom.xml` updates) can be done directly in this repository. From 10527dfd6e7a5433e691fbdc43bead05efaad2d4 Mon Sep 17 00:00:00 2001 From: Wayne Rasband Date: Wed, 29 Sep 2021 19:42:50 +0000 Subject: [PATCH 5/5] =?UTF-8?q?=20=20=E2=80=A2=20=20=20=E2=80=A2=201.53m?= =?UTF-8?q?=2027=20September=202021=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Zoltan=20Kis,=20the=20File>Import>Image=20Sequence=20di?= =?UTF-8?q?alog=20now=20=20=20=20=20=20=20=20=20displays=20the=20number=20?= =?UTF-8?q?of=20images=20that=20will=20be=20opened.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20exceptions=20on?= =?UTF-8?q?=20the=20Event=20Dispatch=20=20=20=20=20=20=20=20=20Thread=20ar?= =?UTF-8?q?e=20now=20reported=20in=20the=20Log=20window.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Remi=20Berthoz,=20the=20Analyze>To?= =?UTF-8?q?ols>Scale=20Bar=20command=20now=20=20=20=20=20=20=20=20=20has?= =?UTF-8?q?=20the=20ability=20to=20draw=20both=20vertical=20and/or=20horiz?= =?UTF-8?q?ontal=20scale=20=20=20=20=20=20=20=20=20bars.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20added=20a=20"Col?= =?UTF-8?q?ors..."=20command=20to=20the=20=20=20=20=20=20=20=20=20Color=20?= =?UTF-8?q?Picker=20dropdown=20menu=20and=20made=20most=20of=20the=20comma?= =?UTF-8?q?nds=20in=20=20=20=20=20=20=20=20=20that=20menu=20recordable.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Esteban=20Fernandez?= =?UTF-8?q?,=20added=20a=20"Fill=20color:"=20field=20to=20the=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Image>Stacks>Images=20to=20Stack=20dialog=20box.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Barry=20DeZonia,?= =?UTF-8?q?=20the=20findMinAndMax()=20methods=20in=20the=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Short/Int/Float=20processors=20are=20now=20faster=20(P?= =?UTF-8?q?lugins>Utilities>=20=20=20=20=20=20=20=20=20Benchmark=20runs=20?= =?UTF-8?q?3%=20faster).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Mic?= =?UTF-8?q?hael=20Schmid,=20added=20support=20for=20drag=20and=20drop=20to?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20JFileChooser=20dialogs.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Nicolas=20De=20Francesco,=20?= =?UTF-8?q?updated=20the=20Edit>Selection>Fit=20=20=20=20=20=20=20=20=20Re?= =?UTF-8?q?ctangle=20command=20so=20that=20it=20produces=20more=20predicta?= =?UTF-8?q?ble=20results.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ph?= =?UTF-8?q?ilippe=20Carl,=20File>Import>Image=20Sequence=20no=20longer=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20limits=20the=20number=20of=20files=20th?= =?UTF-8?q?at=20can=20be=20imported=20to=2040=20when=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20"Open=20as=20separate=20images"=20is=20enabled.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Fred=20Damen,=20improved?= =?UTF-8?q?=20recording=20of=20the=20ROI=20Manager's=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20"Open..."=20and=20"Save..."=20commands,=20and=20made=20th?= =?UTF-8?q?e=20open(path)=20and=20=20=20=20=20=20=20=20=20save(path)=20met?= =?UTF-8?q?hods=20public.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Mi?= =?UTF-8?q?chael=20Schmid,=20the=20File>Import>Image=20Sequence=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20command=20no=20longer=20creates=20excessive?= =?UTF-8?q?=20image=20IDs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20M?= =?UTF-8?q?ichael=20Schmid,=20added=20the=20FolderOpener.openProcessor=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20()=20method,=20used=20by=20the=20FileIn?= =?UTF-8?q?foVirtualStack=20class.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Norbert=20Vischer,=20fixed=20a=20bug=20that=20caused=20?= =?UTF-8?q?the=20Process>=20=20=20=20=20=20=20=20=20Filters>Convolve=20com?= =?UTF-8?q?mand=20to=20sometimes=20not=20be=20correctly=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20recorded.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Fred=20Damen,=20fixed=20a=20bug=20that=20caused=20a=20null?= =?UTF-8?q?=20pointer=20=20=20=20=20=20=20=20=20exception=20when=20the=20F?= =?UTF-8?q?ile>Import>Results=20dialog=20was=20canceled.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Ved=20Sharma,=20fixed=20a=20bug=20?= =?UTF-8?q?that=20caused=20an=20invalid=20macro=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?error=20when=20assigning=20a=20string=20value=20returned=20by?= =?UTF-8?q?=20a=20user=20defined=20=20=20=20=20=20=20=20=20function=20to?= =?UTF-8?q?=20an=20array=20element.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Fred=20Damen,=20fixed=20a=20bug=20that=20caused=20the?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20RoiManager.save()=20method=20to=20al?= =?UTF-8?q?ways=20return=20true.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20Ved=20Sharma,=20fixed=20a=20bug=20that=20caused=20the=20RO?= =?UTF-8?q?I=20Manager's=20=20=20=20=20=20=20=20=20"OR=20(Combine)"=20comm?= =?UTF-8?q?and=20to=20not=20work=20as=20expected=20if=20the=20first=20ROI?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20was=20composite.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Philippe=20Carl,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20File>=20=20=20=20=20=20=20=20=20Import?= =?UTF-8?q?>Image=20Sequence=20command=20to=20not=20work=20as=20expected?= =?UTF-8?q?=20when=20=20=20=20=20=20=20=20=20importing=20stacks=20and=20th?= =?UTF-8?q?e=20"Open=20as=20separate=20images"=20option=20was=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20enabled.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Philippe=20Carl,=20fixed=20a=20bug=20that=20caused=20th?= =?UTF-8?q?e=20Image>=20=20=20=20=20=20=20=20=20Overlay>Flatten=20command?= =?UTF-8?q?=20to=20not=20work=20with=20ROIs,=20or=20the=20ROI=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Manager=20in=20"Show=20All"=20mode,=20on=20compo?= =?UTF-8?q?site=20images.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ro?= =?UTF-8?q?drigo=20Goncalves,=20fixed=20a=20bug=20that=20caused=20the=20Fi?= =?UTF-8?q?le>=20=20=20=20=20=20=20=20=20Save=20As>Image=20Sequence=20comm?= =?UTF-8?q?and=20to=20display=20multiple=20error=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20messages=20when=20the=20specified=20directory=20did=20not=20?= =?UTF-8?q?exist.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Herbie=20G?= =?UTF-8?q?luender,=20fixed=20a=20bug=20the=20caused=20the=20exit(msg)=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20macro=20function=20to=20fail=20when=20t?= =?UTF-8?q?he=20argument=20was=20a=20number=20or=20a=20call=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20to=20a=20user-defined=20function.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20fixed=20a=20t?= =?UTF-8?q?ypo=20in=20OpenDialog.java=20that=20=20=20=20=20=20=20=20=20cau?= =?UTF-8?q?sed=20the=20GitHub=20version=20of=20ImageJ=20to=20fail=20to=20c?= =?UTF-8?q?ompile.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Daniel=20?= =?UTF-8?q?Nebdal,=20fixed=20a=20bug=20that=20caused=20the=20Plugins>=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Macros>Edit=20command=20to=20not=20open?= =?UTF-8?q?=20".py"=20and=20".bsh"=20files.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Remi=20Berthoz,=20fixed=20a=20bug=20that=20cau?= =?UTF-8?q?sed=20the=20Image>Type>=20=20=20=20=20=20=20=20=20RGB=20Stack?= =?UTF-8?q?=20command=20to=20not=20work=20correctly=20with=20RGB=20stacks?= =?UTF-8?q?=20that=20=20=20=20=20=20=20=20=20had=20multiple=20slices=20and?= =?UTF-8?q?=20multiple=20frames.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20caused=20the=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Property.setSliceLabel()=20macro=20func?= =?UTF-8?q?tion=20to=20sometimes=20not=20work=20=20=20=20=20=20=20=20=20as?= =?UTF-8?q?=20expected=20with=20single=20images.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Ved=20Sharma,=20fixed=20a=20regressio?= =?UTF-8?q?n=20that=20caused=20the=20=20=20=20=20=20=20=20=20roiManager("S?= =?UTF-8?q?et=20Fill=20Color",color)=20macro=20function=20to=20fail=20when?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20used=20with=20a=20text=20selection.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'natalia',=20fix?= =?UTF-8?q?ed=20a=201.52p=20regression=20that=20caused=20FITS=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20images=20to=20open=20flipped=20vertically.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20"J=20Xiong",=20fixed?= =?UTF-8?q?=20a=20regression=20that=20caused=20the=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20particle=20analyzer=20to=20not=20work=20the=20same=20as=20it?= =?UTF-8?q?=20did=20in=20ImageJ=201.52=20=20=20=20=20=20=20=20=20with=20bi?= =?UTF-8?q?nary=20images=20that=20were=20not=20thresholded=20and=20the=20"?= =?UTF-8?q?Black=20=20=20=20=20=20=20=20=20background"=20options=20was=20n?= =?UTF-8?q?ot=20set.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Hyung-s?= =?UTF-8?q?ong=20Nam,=20fixed=20a=201.53f=20regression=20that=20caused=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20menus=20to=20unexpectedly=20popup=20whe?= =?UTF-8?q?n=20using=20the=20"hand"=20tool=20to=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?scroll=20through=20images.=20=20=20=E2=80=A2=201.53k=206=20July?= =?UTF-8?q?=202021=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20Mike=20Nelson,?= =?UTF-8?q?=2016-bit=20images=20are=20inverted=20using=20the=20full=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20pixel=20value=20range=20(0-65535)=20or,=20?= =?UTF-8?q?if=20set,=20using=20the=20"Unsigned=20=20=20=20=20=20=20=20=201?= =?UTF-8?q?6-bit=20range"=20in=20the=20"Set"=20option=20of=20the=20Image>A?= =?UTF-8?q?djust>=20=20=20=20=20=20=20=20=20Brightness/Contrast=20dialog.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Alan=20Brooks,?= =?UTF-8?q?=20added=20the=20macOS-specific=20MacAdapter9=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20plugin,=20which,=20on=20Java=209=20or=20later,=20suppo?= =?UTF-8?q?rts=20drag=20and=20drop=20on=20=20=20=20=20=20=20=20=20the=20Im?= =?UTF-8?q?ageJ.app=20and=20the=20"About=20ImageJ"=20command.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Romain=20Guiet,=20the=20ROI?= =?UTF-8?q?=20Manager's=20"Associate=20'Show=20All'=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20ROIs=20with=20slices"=20option=20is=20now=20enabled=20by?= =?UTF-8?q?=20default.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Gille?= =?UTF-8?q?s=20Carpentier,=20the=20particle=20analyzer=20now=20assumes=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20the=20threshold=20is=20255=20unless=20"?= =?UTF-8?q?Black=20background"=20is=20not=20set,=20the=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20image=20does=20not=20have=20an=20inverted=20LUT=20and?= =?UTF-8?q?=20fewer=20than=20half=20the=20=20=20=20=20=20=20=20=20pixels?= =?UTF-8?q?=20have=20a=20value=20of=20zero,=20in=20which=20case=20the=20th?= =?UTF-8?q?reshold=20is=20set=20=20=20=20=20=20=20=20=20to=20zero.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'pdd2110',=20added=20t?= =?UTF-8?q?he=20Property.setSliceLabel(label)=20=20=20=20=20=20=20=20=20ma?= =?UTF-8?q?cro=20function.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'?= =?UTF-8?q?John=20D.',=20added=20the=20GenericDialog.addButton()=20method?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20(example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'Oodegard',=20fixed=20a=20bug=20that?= =?UTF-8?q?=20caused=20the=20"Auto-next=20=20=20=20=20=20=20=20=20slice"?= =?UTF-8?q?=20option=20of=20the=20point=20tool=20to=20not=20work=20as=20ex?= =?UTF-8?q?pected=20with=20=20=20=20=20=20=20=20=20hyperstacks.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20NaN=20values=20in=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20tables=20read=20from=20a=20file=20to=20be=20strings?= =?UTF-8?q?=20instead=20of=20numbers.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Gabriel=20Landini=20and=20Michael=20Schmid,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20=20=20=20=20=20=20=20=20caused=20the=20"Top?= =?UTF-8?q?=20Hat"=20filter=20to=20fail=20when=20applying=20it=20to=20a=20?= =?UTF-8?q?stack=20=20=20=20=20=20=20=20=20one=20slice=20at=20a=20time.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,?= =?UTF-8?q?=20fixed=20a=20bug=20that=20caused=20the=20Image>=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Stacks>Set=20Slice=20command=20to=20not=20work?= =?UTF-8?q?=20as=20expected=20with=20=20=20=20=20=20=20=20=20hyperstacks.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas?= =?UTF-8?q?,=20fixed=20a=20bug=20that=20caused=20hyperstacks=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20to=20be=20displayed=20incorrectly=20if=20the=20Z?= =?UTF-8?q?=20or=20T=20sliders=20where=20moved=20=20=20=20=20=20=20=20=20q?= =?UTF-8?q?uickly=20and=20the=20images=20were=20slow=20to=20load.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20sometimes=20caused=20the=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20WindowManager.getIDList()=20method=20to=20throw=20an?= =?UTF-8?q?=20exception.=20=20=20=E2=80=A2=201.53j=2013=20May=202021=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'VolkerH',=20the=20tab?= =?UTF-8?q?le=20created=20by=20Image>Overlay>List=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20Elements=20now=20displays=20row=20numbers=20and=20arrow=20se?= =?UTF-8?q?lection=20'X'=20and=20=20=20=20=20=20=20=20=20'Y'=20values=20ar?= =?UTF-8?q?e=20the=20coordinates=20of=20the=20arrow=20tip.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20added=20the?= =?UTF-8?q?=20Color.setForegroundValue()=20=20=20=20=20=20=20=20=20and=20C?= =?UTF-8?q?olor.setBackgroundValue()=20macro=20functions=20and=20the=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20Toolbar.setForegroundValue(),=20Toolbar.se?= =?UTF-8?q?tBackgroundValue(),=20=20=20=20=20=20=20=20=20ImageProcessor.se?= =?UTF-8?q?tGlobalForegroundColor()=20and=20=20=20=20=20=20=20=20=20ImageP?= =?UTF-8?q?rocessor.setGlobalBackgroundColor()=20methods.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added=20th?= =?UTF-8?q?e=20IJ.checksum()=20macro=20=20=20=20=20=20=20=20=20function,?= =?UTF-8?q?=20which=20returns=20the=20MD5=20(or=20SHA-256)=20checksum=20fr?= =?UTF-8?q?om=20a=20=20=20=20=20=20=20=20=20string=20or=20file=20(example)?= =?UTF-8?q?.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmi?= =?UTF-8?q?d,=20added=20the=20Fit.doWeightedFit=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?(equation,x,y,weights[,initialGuesses])=20macro=20function.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,?= =?UTF-8?q?=20added=20the=20Plot.removeNaNs=20macro=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20function.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20L?= =?UTF-8?q?aurent=20Thomas,=20added=20support=20for=20scrollbars=20in=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20GenericDialog=20TextAreas.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Fred=20Damen,=20added=20the?= =?UTF-8?q?=20Zoom.in(imp),=20Zoom.out(imp),=20=20=20=20=20=20=20=20=20Zoo?= =?UTF-8?q?m.unzoom(imp)=20and=20Zoom.maximize(imp)=20methods.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20John=20Dunsmuir,=20added=20t?= =?UTF-8?q?he=20PointRoi.addPoint=20=20=20=20=20=20=20=20=20(x,y,position)?= =?UTF-8?q?=20method.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fred?= =?UTF-8?q?=20Damen,=20fixed=20bugs=20that=20caused=20programmatic=20image?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20window=20zooming=20to=20not=20work?= =?UTF-8?q?=20reliably=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Michael=20Schmid,=20fixed=20a=20bug=20with=20HTMLDialog?= =?UTF-8?q?s=20that=20=20=20=20=20=20=20=20=20caused=20the=20initial=20scr?= =?UTF-8?q?oll=20position=20to=20be=20at=20the=20end=20when=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20displaying=20more=20text=20than=20what=20fits=20in?= =?UTF-8?q?=20the=20window.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?'Sethur',=20fixed=20bugs=20that=20caused=20DICOM=20files=20usin?= =?UTF-8?q?g=20=20=20=20=20=20=20=20=20newer=20VRs=20(from=202014=20and=20?= =?UTF-8?q?later),=20such=20as=20UC=20and=20UR,=20to=20fail.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Bruno=20Vellutini,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20images=20=20=20=20=20=20=20=20=20r?= =?UTF-8?q?otated=20interactively=20using=20the=20"Enlarge=20image"=20and?= =?UTF-8?q?=20"Preview"=20=20=20=20=20=20=20=20=20options=20to=20not=20hav?= =?UTF-8?q?e=20the=20grid=20lines=20removed=20after=20the=20rotation.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,?= =?UTF-8?q?=20fixed=20a=20bug=20that=20caused=20the=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Prefs.savePreferences()=20method=20to=20throw=20a=20null?= =?UTF-8?q?=20pointer=20=20=20=20=20=20=20=20=20exception=20if=20the=20"Im?= =?UTF-8?q?ageJ"=20window=20was=20not=20open.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20the=20slice=20label=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20be=20incorrect=20after=20importing=20an=20image=20sequence?= =?UTF-8?q?=20and=20"Start"=20=20=20=20=20=20=20=20=20was=20greater=20than?= =?UTF-8?q?=201=20and=20"Count"=20was=201.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20cau?= =?UTF-8?q?sed=20the=20Images=20to=20=20=20=20=20=20=20=20=20Stack=20comma?= =?UTF-8?q?nd=20to=20ignore=20slice=20labels=20when=20the=20"Use=20titles?= =?UTF-8?q?=20as=20=20=20=20=20=20=20=20=20labels"=20option=20was=20not=20?= =?UTF-8?q?enabled.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'ghf',?= =?UTF-8?q?=20worked=20around=20a=20Fiji=20bug=20that=20caused=20the=20Fil?= =?UTF-8?q?e>=20=20=20=20=20=20=20=20=20Import>Image=20Sequence=20command?= =?UTF-8?q?=20to=20fail=20if=20the=20folder=20contained=20a=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20".h5"=20file.=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20Jerome=20Mutterer,=20fixed=20bugs=20that=20caused=20th?= =?UTF-8?q?e=20=20=20=20=20=20=20=20=20Stack.setDisplayMode(),=20Stack.set?= =?UTF-8?q?Slice(),=20Stack.setFrame()=20and=20=20=20=20=20=20=20=20=20Sta?= =?UTF-8?q?ck.setPosition()=20macro=20functions=20to=20not=20work=20as=20e?= =?UTF-8?q?xpected=20in=20=20=20=20=20=20=20=20=20batch=20mode,=20and=20th?= =?UTF-8?q?e=20ImagePlus.setDisplayMode(),=20ImagePlus.setZ=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20(),=20ImagePlus.setSetT()=20and=20ImagePlus.setPosi?= =?UTF-8?q?tion()=20methods=20to=20=20=20=20=20=20=20=20=20not=20work=20as?= =?UTF-8?q?=20expected=20when=20the=20image=20was=20not=20displayed.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Nicolas=20Montes,=20fi?= =?UTF-8?q?xed=20a=20bug=20that=20caused=20the=20particle=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20analyzer=20to=20throw=20an=20exception=20when=20bot?= =?UTF-8?q?h=20the=20"Composite=20ROIs"=20=20=20=20=20=20=20=20=20and=20"S?= =?UTF-8?q?how:=20Outlines"=20options=20where=20used.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Christian=20Kremser,=20fixed=20a=201.?= =?UTF-8?q?53i=20regression=20that=20=20=20=20=20=20=20=20=20caused=20macr?= =?UTF-8?q?o=20statements=20like=20"n=3DDialog.getNumber()+1"=20to=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20generate=20and=20error.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Christian=20Tischer,=20fixed=20a?= =?UTF-8?q?=20regression=20that=20caused=20the=20=20=20=20=20=20=20=20=20R?= =?UTF-8?q?OI=20Manager=20to=20not=20set=20the=20hyperstack=20position=20o?= =?UTF-8?q?f=20ROIs=20without=20=20=20=20=20=20=20=20=20a=20c,z,t=20positi?= =?UTF-8?q?on.=20=20=20=E2=80=A2=201.53i=2024=20March=202021=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20added?= =?UTF-8?q?=20the=20"Apply=20LUTs"=20checkbox=20to=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20the=20command=20finder=20(Plugins>Utilities>Find=20Commands)?= =?UTF-8?q?.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Visch?= =?UTF-8?q?er,=20the=20current=20line=20number,=20or=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20selection=20range,=20in=20Editor,=20Table=20or=20Log=20wi?= =?UTF-8?q?ndows,=20is=20displayed=20=20=20=20=20=20=20=20=20in=20the=20st?= =?UTF-8?q?atus=20bar.=20The=20total=20number=20of=20lines=20is=20displaye?= =?UTF-8?q?d=20after=20=20=20=20=20=20=20=20=20Select=20All.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20ImageJ?= =?UTF-8?q?=20now=20corrects=20the=20orientation=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20of=20phone=20camera=20photos.=20Does=20not=20work=20on=20Fij?= =?UTF-8?q?i=20because=20it=20is=20=20=20=20=20=20=20=20=20missing=20Exif?= =?UTF-8?q?=5FReader.jar.=20=20=20=20=20=20=20=E2=96=A1=20Improved=20the?= =?UTF-8?q?=20Plugins>Utilities>Benchmark=20command.=20It=20now=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20suppresses=20subordinate=20status=20bar=20mes?= =?UTF-8?q?sages=20and=20displays=20=20=20=20=20=20=20=20=20subordinate=20?= =?UTF-8?q?progress=20bars=20as=20dots.=20=20=20=20=20=20=20=E2=96=A1=20Th?= =?UTF-8?q?anks=20to=20Peter=20Haub,=20the=20particle=20analyzer=20display?= =?UTF-8?q?s=20=20=20=20=20=20=20=20=20"ParticleAnalyzer:=20threshold=20ha?= =?UTF-8?q?s=20not=20set;=20assumed=20to=20be=20=20=20=20=20=20=20=20=20mi?= =?UTF-8?q?n-max"=20in=20the=20Log=20window=20if=20it=20was=20not=20called?= =?UTF-8?q?=20from=20a=20macro=20=20=20=20=20=20=20=20=20and=20a=20thresho?= =?UTF-8?q?ld=20was=20not=20set.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20Laurent=20Thomas,=20File>Save=20As>Image=20Sequence,=20whe?= =?UTF-8?q?n=20=20=20=20=20=20=20=20=20"Use=20slice=20labels=20as=20names"?= =?UTF-8?q?=20is=20enabled,=20now=20supports=20file=20names=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20as=20long=20as=20111=20characters,=20excluding=20th?= =?UTF-8?q?e=20extension.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Mi?= =?UTF-8?q?chael=20Schmid,=20ImageJ=20displays=20"horizontal"=20in=20the?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20image=20info=20line=20of=20column=20?= =?UTF-8?q?average=20plots=20and=20"vertical"=20with=20row=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20average=20plots.=20=20=20=20=20=20=20=E2=96=A1=20Th?= =?UTF-8?q?anks=20to=20Jerome=20Mutterer,=20added=20the=20showStatus=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20(message,options)=20macro=20function=20and?= =?UTF-8?q?=20the=20IJ.showStatus=20=20=20=20=20=20=20=20=20(message,optio?= =?UTF-8?q?ns)=20method=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Added?= =?UTF-8?q?=20the=20Overlay.update(index)=20macro=20function.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Added=20the=20ImagePlus.setBorderColor()?= =?UTF-8?q?=20method,=20used=20by=20Image>=20=20=20=20=20=20=20=20=20Color?= =?UTF-8?q?>Split=20Channels=20to=20colorize=20image=20borders.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,=20added?= =?UTF-8?q?=20the=20=20=20=20=20=20=20=20=20ImageStack.getShortStackLabel(?= =?UTF-8?q?n,max),=20Zoom.toSelection(imp),=20=20=20=20=20=20=20=20=20Zoom?= =?UTF-8?q?.set(imp,mag)=20and=20Zoom.set(imp,mag,x,y)=20methods.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Herbie=20Gluender,=20fixe?= =?UTF-8?q?d=20a=20bug=20that=20caused=20the=20status=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20bar=20to=20stop=20being=20updated=20after=20activating=20?= =?UTF-8?q?an=20overlay=20=20=20=20=20=20=20=20=20selection.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Fred=20Damen,=20fixed=20a=20?= =?UTF-8?q?bug=20with=20one=20slice=20stacks=20that=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20caused=20the=20slice=20label=20to=20not=20be=20displayed?= =?UTF-8?q?=20on=20the=20image=20info=20=20=20=20=20=20=20=20=20line=20or?= =?UTF-8?q?=20in=20the=20Image>Show=20Info=20window.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Antoneta,=20fixed=20a=20bug=20with=20?= =?UTF-8?q?the=20Flatten=20command=20that=20=20=20=20=20=20=20=20=20caused?= =?UTF-8?q?=20multi-point=20selections=20on=20stacks=20to=20lose=20counter?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20information.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Herbie=20Gluender,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20unexpected=20=20=20=20=20=20=20=20=20overlay?= =?UTF-8?q?=20entries=20after=20running=20the=20particle=20analyzer=20with?= =?UTF-8?q?=20the=20=20=20=20=20=20=20=20=20"Add=20to=20manager"=20option?= =?UTF-8?q?=20in=20a=20batch=20mode=20macro.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Norbert=20Vischer,=20fixed=20a=20bug=20that=20?= =?UTF-8?q?caused=20string=20=20=20=20=20=20=20=20=20functions=20added=20i?= =?UTF-8?q?n=20ImageJ=201.52t=20(s.contains(),=20s.endsWith(),=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20s.indexOf(),=20s.lastIndexOf(),=20s.lengths.star?= =?UTF-8?q?tsWith())=20to=20return=20=20=20=20=20=20=20=20=20a=20string=20?= =?UTF-8?q?instead=20of=20a=20number=20when=20used=20in=20an=20assignment?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20statement.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Robert=20Haase,=20fixed=20a=20bug=20w?= =?UTF-8?q?ith=20the=20roiManager=20=20=20=20=20=20=20=20=20("select",inde?= =?UTF-8?q?x)=20macro=20function=20that=20caused=20it=20to=20sometimes=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20restore=20ROIs=20at=20the=20wrong=20pos?= =?UTF-8?q?ition.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20?= =?UTF-8?q?Thomas,=20fixed=20a=20bug=20that=20caused=20the=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20ContrastEnhancer.stretchHistogram()=20methoid=20to?= =?UTF-8?q?=20not=20work=20as=20=20=20=20=20=20=20=20=20expected=20with=20?= =?UTF-8?q?stacks.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael?= =?UTF-8?q?=20Schmid,=20fixed=20a=20bug=20that=20caused=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20WaitForUserDialogs=20to=20not=20be=20scaled=20on=20hig?= =?UTF-8?q?h-resolution=20screens.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Stein=20Rorvik,=20fixed=20a=20macro=20interpreter=20bug?= =?UTF-8?q?=20that=20=20=20=20=20=20=20=20=20caused=20if=20statements=20us?= =?UTF-8?q?ing=20string=20functions=20to=20sometimes=20fail=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20(e.g.,=20"if=20(getTitle.length>10)=20...").=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20f?= =?UTF-8?q?ixed=20a=20bug=20that=20caused=20the=20first=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20column=20of=20tables=20copied=20to=20the=20clipboard?= =?UTF-8?q?=20to=20be=20missing=20if=20the=20=20=20=20=20=20=20=20=20table?= =?UTF-8?q?=20did=20not=20have=20row=20numbers=20and=20the=20"Copy=20row?= =?UTF-8?q?=20numbers"=20=20=20=20=20=20=20=20=20option=20in=20Edit>Option?= =?UTF-8?q?s>Input/Output=20was=20not=20enabled.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Shayna=20Sosnowik,=20fixed=20a=201.53?= =?UTF-8?q?g=20regression=20that=20caused=20=20=20=20=20=20=20=20=20the=20?= =?UTF-8?q?"Properties..."=20command=20in=20the=20ROI=20Manager=20to=20not?= =?UTF-8?q?=20work=20as=20=20=20=20=20=20=20=20=20expected=20when=20changi?= =?UTF-8?q?ng=20the=20stroke=20color.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Stein=20Rorvik,=20fixed=20a=201.53i=20regression=20th?= =?UTF-8?q?at=20caused=20=20=20=20=20=20=20=20=20the=20str.trim()=20macro?= =?UTF-8?q?=20function=20to=20sometimes=20fail.=20=20=20=E2=80=A2=201.53h?= =?UTF-8?q?=2004=20February=202021=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Laura=20Shankman,=20added=20the=20Image>Overlay>Measure?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Overlay=20command.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20added=20the?= =?UTF-8?q?=20Help>Examples>Macro>Colors=20=20=20=20=20=20=20=20=20of=2020?= =?UTF-8?q?21=20example,=20which=20runs=20more=20smoothly=20with=20ImageJ?= =?UTF-8?q?=201.53h20=20=20=20=20=20=20=20=20=20or=20later,=20where=20ROIs?= =?UTF-8?q?=20are=20not=20drawn=20in=20batch=20mode.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20Help>Examples>JavaScript>Dialog=20Dem?= =?UTF-8?q?o=20and=20Help>=20=20=20=20=20=20=20=20=20Examples>Macro>Save?= =?UTF-8?q?=20All=20Images=20examples.=20=20=20=20=20=20=20=E2=96=A1=20Tha?= =?UTF-8?q?nks=20to=20Christophe=20Leterrier,=20Image>Type>RGB=20Color=20c?= =?UTF-8?q?onverts=20=20=20=20=20=20=20=20=20hyperstacks=20of=20HSB=20stac?= =?UTF-8?q?ks=20to=20stacks=20of=20RGB=20images.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Alex=20Zwetsloot,=20line=20selections?= =?UTF-8?q?=20are=20no=20longer=20=20=20=20=20=20=20=20=20activated=20by?= =?UTF-8?q?=20double=20clicks=20with=20the=20segmented=20and=20freehand=20?= =?UTF-8?q?line=20=20=20=20=20=20=20=20=20tools.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added=20the=20Co?= =?UTF-8?q?lor.set(string),=20=20=20=20=20=20=20=20=20Color.set(number),?= =?UTF-8?q?=20Color.foreground,=20Color.background,=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Color.setForeground(r,g,b),=20Color.setBackground(r,b,g),?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Color.setForeground(string),Color.se?= =?UTF-8?q?tBackground(string),=20=20=20=20=20=20=20=20=20Color.toString(r?= =?UTF-8?q?,g,b),=20Color.toArray(color),=20Color.setLut(reds,=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20greens,=20blues)=20and=20Color.getLut(reds,=20gr?= =?UTF-8?q?eens,=20blues)=20macro=20=20=20=20=20=20=20=20=20functions.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Raniere=20Silva,=20?= =?UTF-8?q?added=20the=20Overlay.xor()=20macro=20=20=20=20=20=20=20=20=20f?= =?UTF-8?q?unction.=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20Overlay.?= =?UTF-8?q?fill()=20macro=20function.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Stein=20Rorvik,=20added=20the=20File.isFile()=20macro?= =?UTF-8?q?=20function.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Rani?= =?UTF-8?q?ere=20Silva,=20added=20the=20getDir("cwd")=20("current=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20working=20directory")=20macro=20function.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Added=20the=20Roi.getFloatBounds(?= =?UTF-8?q?)=20and=20Image.title=20macro=20functions.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Alan=20Brooks,=20added=20the=20Toolba?= =?UTF-8?q?r.setIcon()=20method=20(=20=20=20=20=20=20=20=20=20example1,=20?= =?UTF-8?q?example2,=20example3,=20example4.=20example5).=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Added=20the=20Overlay.xor()=20and=20Roi.xor()?= =?UTF-8?q?=20methods.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Rober?= =?UTF-8?q?t=20Kasumba,=20added=20the=20OverlayBrushTool.setWidth()=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20method.=20=20=20=20=20=20=20=E2=96=A1=20Th?= =?UTF-8?q?anks=20to=20Laurent=20Thomas,=20added=20the=20getColumn(String)?= =?UTF-8?q?,=20=20=20=20=20=20=20=20=20getColumnAsStrings(String)=20and=20?= =?UTF-8?q?getActiveTable()=20methods=20to=20the=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20ResultsTable=20class.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Dyuks,=20fixed=20a=20bug=20that=20caused=20the=20TIFF?= =?UTF-8?q?=20reader=20to=20=20=20=20=20=20=20=20=20sometimes=20throw=20an?= =?UTF-8?q?=20exception=20when=20opening=20LZW-compressed=2016-bit=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20TIFFs.=20=20=20=20=20=20=20=E2=96=A1=20Tha?= =?UTF-8?q?nks=20to=20Michael=20Schmid,=20fixed=20a=20bug=20that=20could?= =?UTF-8?q?=20cause=20the=20=20=20=20=20=20=20=20=20JpegWriter=20to=20thro?= =?UTF-8?q?w=20a=20NullPointerException=20if=20JAI=20ImageIO=20was=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20installed.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Michael=20Cammer,=20fixed=20a=20bug=20that=20c?= =?UTF-8?q?aused=20the=20=20=20=20=20=20=20=20=20selectWindow(title)=20mac?= =?UTF-8?q?ro=20function=20to=20not=20work=20with=20minimized=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20windows=20on=20Windows.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20all=20tools=20to?= =?UTF-8?q?=20stop=20working=20after=20=20=20=20=20=20=20=20=20attempting?= =?UTF-8?q?=20to=20use=20the=20polygon,=20segmented=20line=20or=20angle=20?= =?UTF-8?q?tool=20on=20=20=20=20=20=20=20=20=20ImageJ.JS.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Gabriel=20Landini,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20caused=20the=20B&C=20tool=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20to=20sometimes=20perform=20an=20Undo=20operation=20on=20R?= =?UTF-8?q?GB=20images.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Rani?= =?UTF-8?q?ere=20Silva=20and=20Jan=20Eglinger,=20fixed=20a=20bug=20that=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20caused=20an=20exception=20when=20saving?= =?UTF-8?q?=20the=20table=20created=20by=20Image>=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20Overlay>List=20Elements=20in=20.csv=20format.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Raniere=20Silva,=20fixed=20bugs?= =?UTF-8?q?=20that=20caused=20the=20open(path)=20=20=20=20=20=20=20=20=20a?= =?UTF-8?q?nd=20roiManager(=E2=80=9COpen=E2=80=9D,path)=20macro=20function?= =?UTF-8?q?s,=20in=20macros=20run=20from=20=20=20=20=20=20=20=20=20the=20c?= =?UTF-8?q?ommand=20line,=20to=20not=20work=20as=20expected=20when=20?= =?UTF-8?q?=E2=80=98path=E2=80=99=20was=20just=20=20=20=20=20=20=20=20=20a?= =?UTF-8?q?=20file=20name.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20M?= =?UTF-8?q?ichael=20Schmid,=20fixed=20bugs=20that=20caused=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20roi.getBounds()=20method=20and=20getSelection?= =?UTF-8?q?Bounds()=20macro=20function=20=20=20=20=20=20=20=20=20to=20not?= =?UTF-8?q?=20work=20as=20expected=20with=20polyline,=20point=20and=20stra?= =?UTF-8?q?ight=20line=20=20=20=20=20=20=20=20=20selections=20on=20images?= =?UTF-8?q?=20zoomed=20more=20than=20150%.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Christian=20Tischer,=20fixed=20a=20bug=20that?= =?UTF-8?q?=20caused=20the=20Image>=20=20=20=20=20=20=20=20=20Overlay>List?= =?UTF-8?q?=20Elements=20command=20to=20incorrectly=20report=20positions?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20of=20time=20series=20overlays.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,=20fi?= =?UTF-8?q?xed=20a=20bug=20that=20sometimes=20caused=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20GenericDialogs=20to=20not=20open=20URLs=20bound=20to=20"H?= =?UTF-8?q?elp"=20buttons.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20J?= =?UTF-8?q?an=20Eglinger,=20fixed=20a=20bug=20that=20caused=20the=20select?= =?UTF-8?q?ion=20=20=20=20=20=20=20=20=20brush=20tool=20to=20behave=20inco?= =?UTF-8?q?nsistantly=20when=20the=20brush=20width=20was=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20odd=20and=20the=20image=20was=20hightly=20magnified.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Christian=20Tisc?= =?UTF-8?q?her,=20fixed=20a=20bug=20that=20caused=20overlay=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20calibration=20bars=20to=20be=20displayed=20incorrec?= =?UTF-8?q?tly=20on=20images=20zoomed=20=20=20=20=20=20=20=20=20less=20tha?= =?UTF-8?q?n=20100%.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert?= =?UTF-8?q?=20Vischer,=20fixed=20a=20bug=20that=20caused=20the=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20selectWindow("Results")=20macro=20function=20to?= =?UTF-8?q?=20sometimes=20not=20work=20as=20=20=20=20=20=20=20=20=20expect?= =?UTF-8?q?ed.=20=20=20=20=20=20=20=E2=96=A1=20Fixed=20a=201.53h17=20regre?= =?UTF-8?q?ssion,=20caused=20by=20building=20ij.jar=20for=20Java=20=20=20?= =?UTF-8?q?=20=20=20=20=20=208,=20that=20prevented=20Fiji=20from=20launchi?= =?UTF-8?q?ng.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Dominik=20Sch?= =?UTF-8?q?ienstock,=20fixed=20a=201.52q=20regression=20that=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20caused=20some=20filters=20to=20throw=20exception?= =?UTF-8?q?s=20in=20headless=20mode.=20=20=20=E2=80=A2=201.53g=204=20Decem?= =?UTF-8?q?ber=202020=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome?= =?UTF-8?q?=20Mutterer,=20added=20a=20"Run"=20button=20to=20Editor=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20windows=20when=20the=20file=20name=20ends?= =?UTF-8?q?=20with=20".ijm",=20".js",=20".bsh"=20or=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20".py".=20=20=20=20=20=20=20=E2=96=A1=20The=20"Overlay=20M?= =?UTF-8?q?asks"=20option=20in=20the=20particle=20anayzer=20now=20displays?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20masks=20in=20colors=20taken=20from?= =?UTF-8?q?=20the=20Glasbey=20LUT.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20J=20Xiong,=20added=20"Overlay"=20and=20"Composite=20ROI?= =?UTF-8?q?s"=20=20=20=20=20=20=20=20=20checkboxes=20to=20the=20particle?= =?UTF-8?q?=20analyzer=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Michael=20Doube,=20added=20an=20IntProcessor=20class=20?= =?UTF-8?q?that=20=20=20=20=20=20=20=20=20provides=20support=20for=20signe?= =?UTF-8?q?d=2032-bit=20int=20images=20(example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Christian=20Tischer,=20the=20Recorder?= =?UTF-8?q?=20supports=20Python.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20'Eljonco',=20the=20"ExpandableArrays"=20macro=20option=20i?= =?UTF-8?q?s=20now=20=20=20=20=20=20=20=20=20enabled=20by=20default.=20Tha?= =?UTF-8?q?nks=20to=20Peter=20Haub,=20added=20the=20String.pad=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20(n,length)=20macro=20function.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Wilhelm=20Burger,=20added=20the=20?= =?UTF-8?q?addEnumChoice()=20and=20=20=20=20=20=20=20=20=20getNextEnumChoi?= =?UTF-8?q?ce()=20methods=20to=20the=20GenericDialog=20class=20(example=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20).=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20'davidC',=20added=20the=20ij.gui.HistogramPlot=20clas?= =?UTF-8?q?s.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik?= =?UTF-8?q?,=20added=20the=20ImageCanvas.setLongClickDelay=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20()=20and=20Toolbar.setLongClickDelay()=20methods.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'Dr.=20Njitram',?= =?UTF-8?q?=20added=20the=20recordable=20SubstackMaker.run=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20(imp,rangeOrList)=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Albert=20Cardona,=20modified=20the=20?= =?UTF-8?q?ImageJ.keyPressed()=20=20=20=20=20=20=20=20=20method=20so=20tha?= =?UTF-8?q?t,=20if=20the=20KeyEvent=20is=20consumed,=20it=20returns=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20immediately.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Wei=20Ouyang,=20replaced=20the=20"Duplicate...?= =?UTF-8?q?"=20command=20in=20=20=20=20=20=20=20=20=20the=20default=20imag?= =?UTF-8?q?e=20contextual=20menu=20with=20"Duplicate=20Image",=20which=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20ignores=20any=20selection=20and=20dupli?= =?UTF-8?q?cates=20the=20entire=20image.=20=20=20=20=20=20=20=E2=96=A1=20T?= =?UTF-8?q?hanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20sometim?= =?UTF-8?q?es=20caused=20=20=20=20=20=20=20=20=20images=20to=20be=20incorr?= =?UTF-8?q?ectly=20added=20to=20the=20Window=20menu.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20the=20File>Show=20=20=20=20=20=20=20=20=20Folder?= =?UTF-8?q?>Image=20command=20to=20not=20work=20with=20stacks=20opened=20u?= =?UTF-8?q?sing=20File>=20=20=20=20=20=20=20=20=20Import>Image=20Sequence.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'muniak'=20and?= =?UTF-8?q?=20'mountain=5Fman',=20fixed=20a=20bug=20that=20caused=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20the=20Scaler.resize()=20method=20to=20return?= =?UTF-8?q?=20an=20image=20with=20a=20=20=20=20=20=20=20=20=20calibration?= =?UTF-8?q?=20of=20Inf=20x=20Inf.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20caused=20a?= =?UTF-8?q?=20list=20of=2012=20=20=20=20=20=20=20=20=20'w'=20letters=20to?= =?UTF-8?q?=20appear=20after=20the=20Group=20entry=20in=20the=20ROI=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20Properties=20dialog=20when=20it=20was=20ca?= =?UTF-8?q?lled=20from=20a=20macro.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20'davidC',=20fixed=20a=20bug=20that=20caused=20batch=20m?= =?UTF-8?q?ode=20macros=20=20=20=20=20=20=20=20=20that=20created=20hundred?= =?UTF-8?q?s=20of=20histograms=20to=20fail.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20'chrk139',=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20the=20drawOval()=20and=20=20=20=20=20=20=20=20=20fillOval()?= =?UTF-8?q?=20macro=20functions=20to=20not=20work=20for=20images=20larger?= =?UTF-8?q?=20than=202=20=20=20=20=20=20=20=20=20^29=20pixels.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,=20fixed=20?= =?UTF-8?q?a=20bug=20where=20changing=20the=20group=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20attribute=20from=20a=20group>0=20to=200=20in=20the=20ROI?= =?UTF-8?q?=20Manager>Properties=20=20=20=20=20=20=20=20=20dialog=20did=20?= =?UTF-8?q?not=20work=20as=20expected.=20=20=20=20=20=20=20=E2=96=A1=20Tha?= =?UTF-8?q?nks=20to=20Gilles=20Vanwalleghem,=20fixed=20a=20bug=20that=20ca?= =?UTF-8?q?used=20the=20run=20=20=20=20=20=20=20=20=20(=E2=80=9CReduce=20D?= =?UTF-8?q?imensionality=E2=80=A6=E2=80=9D)=20macro=20function=20to=20thro?= =?UTF-8?q?w=20a=20null=20=20=20=20=20=20=20=20=20pointer=20exception=20in?= =?UTF-8?q?=20Fiji=20headless=20mode.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Laurent=20Thomas=20and=20Hollandi=20Reka,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20=20=20=20=20=20=20=20=20caused=20the=20ROI=20gr?= =?UTF-8?q?oup=20of=20saved=20composite=20selections=20to=20not=20be=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20restored.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Martin=20Hohne,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20the=20getValue=20=20=20=20=20=20=20=20=20("X")=20and=20getVa?= =?UTF-8?q?lue("Y")=20macro=20functions=20to=20not=20work=20as=20expected?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20with=20line=20selections.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20J=20Xiong,=20fixed=20a=20?= =?UTF-8?q?v1.50=20regression=20that=20caused=20the=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20particle=20analyzer=20to=20not=20work=20as=20expected=20w?= =?UTF-8?q?hen=20when=20using=20the=20=20=20=20=20=20=20=20=20=E2=80=9CExc?= =?UTF-8?q?lude=20on=20edges=E2=80=9D=20option=20and=20a=20composite=20sel?= =?UTF-8?q?ection.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fred=20Da?= =?UTF-8?q?men,=20fixed=20a=201.53c=20regression=20that=20caused=20the=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20GenericDialog.getFont()=20method=20to?= =?UTF-8?q?=20sometimes=20return=20null.=20=20=20=20=20=20=20=E2=96=A1=20F?= =?UTF-8?q?ixed=20a=20regression=20that=20caused=20the=20particle=20analyz?= =?UTF-8?q?er=20to=20=20=20=20=20=20=20=20=20sometimes=20fail=20on=20MacOS?= =?UTF-8?q?.=20=20=20=E2=80=A2=201.53f=2025=20October=202020=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Wei=20Ouyang,=20tool=20bar?= =?UTF-8?q?=20and=20image=20popup=20menus=20are=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?triggered=20by=20long=20presses=20in=20addition=20to=20right=20?= =?UTF-8?q?clicks,=20needed=20=20=20=20=20=20=20=20=20because=20right=20cl?= =?UTF-8?q?icks=20are=20not=20normally=20possible=20when=20ImageJ.JS=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20is=20running=20on=20Android=20and=20iOS=20?= =?UTF-8?q?devices.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Wei=20Ou?= =?UTF-8?q?yang,=20added=20a=20popup=20menu=20to=20the=20magnifying=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20glass=20tool=20icon.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20a=20popup=20menu=20triggered=20on=20a=20rig?= =?UTF-8?q?ht=20click=20or=20long=20press=20=20=20=20=20=20=20=20=20inside?= =?UTF-8?q?=20a=20selection.=20=20=20=20=20=20=20=E2=96=A1=20Updated=20the?= =?UTF-8?q?=20built=20in=20toolbar=20"Dev"=20menu.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20the=20text=20in?= =?UTF-8?q?=20a=20text=20selection=20can=20be=20=20=20=20=20=20=20=20=20ed?= =?UTF-8?q?ited=20in=20the=20Edit>Selection>Properties=20dialog.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20the=20F?= =?UTF-8?q?ile>Import>Image=20Sequence=20dialog=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?is=20used=20when=20drag=20and=20dropping=20a=20folder=20on=20th?= =?UTF-8?q?e=20"ImageJ"=20window.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Michael=20Schmid=20and=20Thomas=20Fischer,=20Undo=20wor?= =?UTF-8?q?ks=20with=20=20=20=20=20=20=20=20=20overlays=20when=20translati?= =?UTF-8?q?ng=20and=20rotating=20images,=20and=20the=20"Overlay=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20only"=20checkbox=20is=20only=20shown=20in=20t?= =?UTF-8?q?he=20Translate=20dialog=20when=20there=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20is=20an=20overlay.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20Robert=20Haase,=20added=20the=20Edit>Options>Fresh=20Start?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20command,=20which=20closes=20all=20im?= =?UTF-8?q?ages,=20empties=20the=20ROI=20Manager,=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20clears=20the=20Results=20table=20and=20enables=20the=20"Blac?= =?UTF-8?q?k=20background"=20=20=20=20=20=20=20=20=20option.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Conner=20Phillips=20and=20St?= =?UTF-8?q?ein=20Rorvik,=20the=20Reslice=20command=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20is=20faster=20on=20Windows=20when=20re-slicing=20from=20"Lef?= =?UTF-8?q?t"=20or=20"Right"=20and=20=20=20=20=20=20=20=20=20it=20uses=20a?= =?UTF-8?q?n=20ordinary=20progress=20bar=20when=20run=20from=20a=20macro.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,?= =?UTF-8?q?=20added=20an=20"Open=20as=20separate=20images"=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20checkbox=20to=20the=20File>Import>Image=20Sequence?= =?UTF-8?q?=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein?= =?UTF-8?q?=20Rorvik,=20added=20"Foreground..."=20and=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20"Background..."=20entries=20to=20the=20color=20picker=20t?= =?UTF-8?q?ool=20popup=20menu.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20'MIKEIII'=20and=20Dmitry=20Fedorov,=20added=20the=20Image.wi?= =?UTF-8?q?dth,=20=20=20=20=20=20=20=20=20Image.height,=20Image.copy=20and?= =?UTF-8?q?=20Image.paste(x,y)=20macro=20functions=20(=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Stein=20Rorvik,=20added=20the=20Array.filter(arr,str),=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20Math.toRadians(degrees)=20and=20Math.toDeg?= =?UTF-8?q?rees(radians)=20functions.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Nima=20Hojat,=20added=20the=20ResultsTable.addRow()?= =?UTF-8?q?=20method.=20=20=20=20=20=20=20=20=20For=20an=20example,=20run?= =?UTF-8?q?=20Help>Examples>JavaScript>Sine/Cosine=20Table.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Philippe=20Carl,=20fixed=20a=20?= =?UTF-8?q?bug=20that=20caused=20the=20=20=20=20=20=20=20=20=20RoiManager.?= =?UTF-8?q?getSelectedIndexes()=20method=20to=20sometimes=20not=20work=20a?= =?UTF-8?q?s=20=20=20=20=20=20=20=20=20expected.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Christian=20Tischer,=20fixed=20a=20bu?= =?UTF-8?q?g=20that=20slowed=20saving=20of=20=20=20=20=20=20=20=20=20virtu?= =?UTF-8?q?al=20stacks=20in=20TIFF=20format.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Thomas=20Fischer,=20fixed=20a=20bug=20that=20c?= =?UTF-8?q?aused=20the=20dynamic=20=20=20=20=20=20=20=20=20"Value"=20and?= =?UTF-8?q?=20"Count"=20values=20in=20HIstogram=20windows=20to=20sometimes?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20not=20be=20displayed=20correctly.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Gaurav=20Joshi,=20f?= =?UTF-8?q?ixed=20a=20bug=20that=20caused=20the=20Ctrl+F=20(=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Edit>Fill)=20keyboard=20shortcut=20on=20Windows,?= =?UTF-8?q?=20when=20used=20on=20a=20stack,=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20not=20display=20the=20"Proces=20Stack=3F"=20dialog.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20'Quiroz-1',=20fixed=20a?= =?UTF-8?q?=201.53e=20regression=20that=20caused=20the=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20imageCaculator()=20macro=20function=20do=20somethimes?= =?UTF-8?q?=20not=20work=20as=20=20=20=20=20=20=20=20=20expected.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Pradeep=20Rajasekhar=20an?= =?UTF-8?q?d=20Jan=20Eglinger,=20fixed=20a=201.52=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20regression=20that=20caused=20the=20Analyze=20Skeleton=20plug?= =?UTF-8?q?in=20to=20output=20=20=20=20=20=20=20=20=20incorrect=20Results?= =?UTF-8?q?=20tables.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'tongt?= =?UTF-8?q?ao',=20fixed=20a=20regression=20that=20caused=20the=20Edit>=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Copy=20to=20Image=20Info=20command=20in?= =?UTF-8?q?=20the=20text=20editor=20to=20fail.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=201.53c?= =?UTF-8?q?=20regression=20in=20the=20AVI=20=20=20=20=20=20=20=20=20Reader?= =?UTF-8?q?=20that=20caused=20it=20to=20throw=20a=20null=20pointer=20excep?= =?UTF-8?q?tion.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Eric=20Perl?= =?UTF-8?q?man,=20fixed=20a=201.52=20regresion=20that=20caused=20the=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20IJ.getImage()=20method=20to=20sometimes=20?= =?UTF-8?q?display=20model=20error=20dialogs.=20=20=20=E2=80=A2=201.53e=20?= =?UTF-8?q?16=20September=202020=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20Michael=20Schmid,=20the=20color=20picker=20tool=20has=20a?= =?UTF-8?q?=20new=20icon=20=20=20=20=20=20=20=20=20and=20a=20right=20click?= =?UTF-8?q?=20drop=20down=20menu.=20=20=20=20=20=20=20=E2=96=A1=20The=20"B?= =?UTF-8?q?lack=20background"=20option=20is=20no=20longer=20saved=20in=20t?= =?UTF-8?q?he=20=20=20=20=20=20=20=20=20preferences=20file.=20Add=20setOpt?= =?UTF-8?q?ion("BlackBackground",true)=20to=20=20=20=20=20=20=20=20=20Edit?= =?UTF-8?q?>Options>Startup=20to=20have=20it=20set=20'true'=20on=20startup?= =?UTF-8?q?.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Kees=20Straatma?= =?UTF-8?q?n,=20improved=20recording=20of=20the=20Edit>=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Selection>Add=20to=20Manager=20command.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Michael=20Ellis,=20added=20a=20?= =?UTF-8?q?module-info.java=20file,=20used=20by=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?the=20Java=20Module=20System,=20to=20the=20ImageJ=20source.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'mkhapp',=20added?= =?UTF-8?q?=20the=20RoiManager.selected=20macro=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?function,=20which=20returns=20the=20number=20of=20selected=20RO?= =?UTF-8?q?Is=20in=20the=20ROI=20=20=20=20=20=20=20=20=20Manager=20(exampl?= =?UTF-8?q?e).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fred=20Damen,?= =?UTF-8?q?=20added=20the=20ImagePlus.copyToSystem()=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20method.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Phi?= =?UTF-8?q?lippe=20Carl,=20fixed=20a=20bug=20that=20allowed=20multiple=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20copies=20of=20the=20Color=20Picker=20to?= =?UTF-8?q?=20be=20opened.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'?= =?UTF-8?q?Ben',=20fixed=20a=20bug=20that=20caused=20the=20Table.get()=20m?= =?UTF-8?q?acro=20=20=20=20=20=20=20=20=20function=20to=20return=20strings?= =?UTF-8?q?=20instead=20of=20numbers.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Fred=20Damen=20and=20Michael=20Schmid,=20fixed=20a=20?= =?UTF-8?q?bug=20that=20=20=20=20=20=20=20=20=20caused=20the=20run("Copy?= =?UTF-8?q?=20to=20System")=20macro=20function=20to=20sometimes=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20copy=20the=20wrong=20image=20to=20the=20syste?= =?UTF-8?q?m=20clipboard.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fr?= =?UTF-8?q?ed=20Damen,=20fixed=20a=20bug=20that=20caused=20unreliable=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20zooming=20of=20images=20with=20selectio?= =?UTF-8?q?ns=20when=20using=20the=20arrow=20keys=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20while=20holding=20the=20shift=20or=20control=20key=20down.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fred=20Damen,=20?= =?UTF-8?q?fixed=20a=20bug=20that=20caused=20the=20img3=3D=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20ImageCalculator.run(img1,img2,operation)=20method?= =?UTF-8?q?=20to=20return=20null=20=20=20=20=20=20=20=20=20if=20the=20'ope?= =?UTF-8?q?ration'=20string=20did=20not=20contain=20'create'=20or=20'32-bi?= =?UTF-8?q?t'.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Martin=20Hohn?= =?UTF-8?q?e,=20fixed=20a=201.53c=20regression=20that=20caused=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20the=20Counter=20popup=20menu=20in=20the=20Point?= =?UTF-8?q?=20Tool=20options=20Dialog=20to=20not=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20work=20as=20expected=20after=20switching=20to=20a=20differen?= =?UTF-8?q?t=20image.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Robert?= =?UTF-8?q?=20Svoboda,=20fixed=20a=201.53d=20regression=20on=20Windows=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20that=20could=20cause=20the=20getDirecto?= =?UTF-8?q?ry()=20macro=20function=20to=20throw=20an=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20exception=20or=20crash=20ImageJ.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=201.53d?= =?UTF-8?q?=20regression=20that=20could=20=20=20=20=20=20=20=20=20cause=20?= =?UTF-8?q?the=20run("Image=20Sequence...",options)=20macro=20function=20t?= =?UTF-8?q?o=20=20=20=20=20=20=20=20=20fail.=20=20=20=E2=80=A2=201.53d=202?= =?UTF-8?q?0=20August=202020=20=20=20=20=20=20=20=E2=96=A1=20Added=20drag?= =?UTF-8?q?=20and=20drop=20support=20to=20GenericDialog=20directory=20and?= =?UTF-8?q?=20file=20=20=20=20=20=20=20=20=20fields,=20based=20on=20code?= =?UTF-8?q?=20from=20Fiji's=20GenericDialogPlus.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20The=20File>Import>Image=20Sequence=20and=20File>Sav?= =?UTF-8?q?e=20As>Image=20Sequence=20=20=20=20=20=20=20=20=20comnands=20ge?= =?UTF-8?q?t=20the=20directory=20using=20the=20new=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20GenericDialog.addDirectoryField()=20method,=20which=20is=20b?= =?UTF-8?q?ased=20on=20the=20=20=20=20=20=20=20=20=20very=20useful=20metho?= =?UTF-8?q?d=20with=20the=20same=20name=20in=20Fiji's=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20GenericDialogPlus=20class.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20The=20File>Import>AVI=20comnand=20gets=20the=20path=20to=20t?= =?UTF-8?q?he=20AVI=20file=20using=20=20=20=20=20=20=20=20=20the=20new=20G?= =?UTF-8?q?enericDialog.addFileField()=20method,=20which=20is=20also=20fro?= =?UTF-8?q?m=20=20=20=20=20=20=20=20=20Fiji's=20GenericDialogPlus=20class.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20Michael=20Schmid,=20a?= =?UTF-8?q?dded=20the=20Process>Filters>Top=20Hat=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20filter.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Willia?= =?UTF-8?q?m=20Berndt,=20added=20the=20Image>Type>HSB=20(32-bit)=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20command.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Laurent=20Thomas,=20added=20the=20More>>Multi=20Crop?= =?UTF-8?q?=20command=20to=20=20=20=20=20=20=20=20=20the=20ROI=20Manager.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Zeynab=20Mousavi?= =?UTF-8?q?,=20the=20Edit>Selection>Scale=20command=20uses=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20the=20centroid=20instead=20of=20the=20center=20of?= =?UTF-8?q?=20the=20bounding=20rectangle=20=20=20=20=20=20=20=20=20when=20?= =?UTF-8?q?"Centered"=20is=20checked=20in=20the=20dialog.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20The=20Help>About=20ImageJ=20window=20is=20lar?= =?UTF-8?q?ger=20and=20the=20text=20is=20drawn=20in=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20an=20overlay.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Peter=20Bankhead,=20the=20MacAdapter=20class=20is=20now=20in?= =?UTF-8?q?=20the=20=20=20=20=20=20=20=20=20ij.plugin=20package.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20lege?= =?UTF-8?q?nd=20labels=20can=20be=20indexed=20or=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20hidden=20in=20the=20plot=20window=20More>>Legend...=20dialog?= =?UTF-8?q?.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Curtis=20Rueden?= =?UTF-8?q?,=20the=20sample=20images=20are=20now=20loaded=20from=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20https://imagej.net/images/.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20the=20Color?= =?UTF-8?q?=20Picker=20now=20has=20a=20=20=20=20=20=20=20=20=20clipboard-c?= =?UTF-8?q?opyable=20TextArea=20containing=20the=20selected=20color=20in?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20hex=20format.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Jeff=20Hardin,=20the=20Image>Hypersta?= =?UTF-8?q?cks>Stack=20to=20=20=20=20=20=20=20=20=20Hyperstack=20command?= =?UTF-8?q?=20now=20works=20with=20virtual=20stacks=20not=20in=20CZT=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20order.=20=20=20=20=20=20=20=E2=96=A1=20The?= =?UTF-8?q?=20Threshold=20tool's=20"Set"=20function=20disables=20"Don't=20?= =?UTF-8?q?reset=20=20=20=20=20=20=20=20=20range"=20if=20the=20values=20se?= =?UTF-8?q?t=20are=20outslide=20of=20the=20current=20display=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20range.=20=20=20=20=20=20=20=E2=96=A1=20The=20Ima?= =?UTF-8?q?geStack=20class=20now=20accepts=20images=20of=20different=20typ?= =?UTF-8?q?es.=20=20=20=20=20=20=20=20=20Images=20are=20converted=20to=20t?= =?UTF-8?q?he=20type=20specified=20by=20the=20setBitDepth()=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20method=20or=20to=20the=20type=20of=20the=20first=20?= =?UTF-8?q?image=20added.=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20Di?= =?UTF-8?q?alog.addDirectory()=20macro=20function=20and=20the=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20GenericDialog.addDirectoryField()=20method=20(ex?= =?UTF-8?q?ample).=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20Dialog.ad?= =?UTF-8?q?dFile()=20macro=20function=20and=20the=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20GenericDialog.addFileField()=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20Dialog.addImageChoice()=20macro=20fun?= =?UTF-8?q?ction=20and=20the=20=20=20=20=20=20=20=20=20GenericDialog.addIm?= =?UTF-8?q?ageChoice()=20method.=20=20=20=20=20=20=20=E2=96=A1=20Added=20t?= =?UTF-8?q?he=20Overlay.cropAndSave()=20macro=20function=20and=20the=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20ImagePlus.cropAndSave()=20method=20(exampl?= =?UTF-8?q?e).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Tho?= =?UTF-8?q?mas,=20added=20the=20RoiManager.multiCrop()=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20macro=20function=20and=20RoiManager.multiCrop()=20meth?= =?UTF-8?q?od.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Philippe=20Ca?= =?UTF-8?q?rl=20and=20Michael=20Schmid,=20added=20the=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20LutLoader.getLut()=20method.=20For=20an=20example,=20run?= =?UTF-8?q?=20Help>Examples>=20=20=20=20=20=20=20=20=20JavaScript>Show=20a?= =?UTF-8?q?ll=20LUTs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Philip?= =?UTF-8?q?pe=20Carl,=20added=20the=20String.format()=20macro=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20function.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Laurent=20Thomas,=20added=20the=20ImagePlus.crop(Roi[])?= =?UTF-8?q?,=20=20=20=20=20=20=20=20=20Overlay.createStackOverlay(Roi[])?= =?UTF-8?q?=20and=20ImageStack.create=20=20=20=20=20=20=20=20=20(ImagePlus?= =?UTF-8?q?[])=20methods.=20For=20an=20example,=20run=20Help>Examples>=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20JavaScript>Crop=20Multiple=20Rois.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Added=20the=20FolderOpener.open(p?= =?UTF-8?q?ath,=20width,=20height,=20options)=20=20=20=20=20=20=20=20=20me?= =?UTF-8?q?thod,=20which=20opens=20a=20stack,=20or=20virtual=20stack,=20fr?= =?UTF-8?q?om=20a=20folder=20of=20=20=20=20=20=20=20=20=20images=20that=20?= =?UTF-8?q?may=20differ=20in=20size.=20=20=20=20=20=20=20=E2=96=A1=20Added?= =?UTF-8?q?=20the=20ImageStack.setBitDepth()=20method.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Aryeh=20Weiss,=20added=20the=20Hyp?= =?UTF-8?q?erStackConverter.toStack()=20=20=20=20=20=20=20=20=20method=20(?= =?UTF-8?q?example).=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20StackWr?= =?UTF-8?q?iter.save()=20method.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20'bio7'=20and=20David=20Gault,=20fixed=20bugs=20that=20caus?= =?UTF-8?q?ed=20=20=20=20=20=20=20=20=20IJ.isJava18()=20to=20return=20fals?= =?UTF-8?q?e=20and=20JavaScript=20to=20not=20work=20when=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20running=20Java=2014=20or=20later.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Vivek=20Gupta,=20fixed=20a=20bug=20th?= =?UTF-8?q?at=20caused=20the=20run("Add=20=20=20=20=20=20=20=20=20Selectio?= =?UTF-8?q?n...")=20macro=20function=20to=20ignore=20the=20current=20selec?= =?UTF-8?q?tion's=20=20=20=20=20=20=20=20=20position.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Cammer,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20contrast=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20constantly=20change=20when=20scrolling=20through=20a=20stack?= =?UTF-8?q?=20and=20the=20=20=20=20=20=20=20=20=20Threshold=20window=20is?= =?UTF-8?q?=20open.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Gilles?= =?UTF-8?q?=20Carpentier,=20fixed=20a=20bug=20that=20caused=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Duplicate=20command=20to=20propose=20an=20inc?= =?UTF-8?q?orrect=20name=20when=20duplicating=20=20=20=20=20=20=20=20=20an?= =?UTF-8?q?=20image=20whose=20name=20ends=20in=20"-n",=20where=20'n'=20is?= =?UTF-8?q?=20a=20digit.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Gab?= =?UTF-8?q?riel=20Landini=20and=20Michael=20Schmid,=20fixed=20a=20bug=20th?= =?UTF-8?q?at=20=20=20=20=20=20=20=20=20caused=20the=20File>Show=20Folder>?= =?UTF-8?q?=20commands=20to=20not=20work=20on=20some=20Linux=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20systems.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20'Nhaz',=20fixed=20a=20bug=20that=20caused=20the=20Fit.d?= =?UTF-8?q?oFit()=20macro=20=20=20=20=20=20=20=20=20function=20to=20fail?= =?UTF-8?q?=20with=20equations=20containing=20"Math.erf()".=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed=20pre?= =?UTF-8?q?view=20and=20parallelization=20=20=20=20=20=20=20=20=20bugs=20i?= =?UTF-8?q?n=20the=20RankFilters=20(Median,=20Mean,=20Minimum,=20etc.).=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Herbie=20Gluender,?= =?UTF-8?q?=20fixed=20a=20bug=20that=20caused=20Table.*=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20macro=20functions=20to=20ignore=20custom=20tables=20no?= =?UTF-8?q?t=20displayed=20in=20the=20=20=20=20=20=20=20=20=20active=20win?= =?UTF-8?q?dow.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Philippe=20C?= =?UTF-8?q?arl=20and=20Michael=20Schmid,=20fixed=20a=20bug=20that=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20caused=20the=20High=20Resolution=20Plot=20com?= =?UTF-8?q?mand=20to=20not=20be=20correctly=20=20=20=20=20=20=20=20=20reco?= =?UTF-8?q?rded=20in=20Java(script)=20mode.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Gabriel=20Landini,=20fixed=20the=20Process>Sha?= =?UTF-8?q?dows>Shadows=20=20=20=20=20=20=20=20=20Demo=20command,=20which?= =?UTF-8?q?=20was=20too=20fast=20on=20modern=20computers.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20sometimes=20caused=20=20=20=20=20=20=20=20=20po?= =?UTF-8?q?int=20measurements=20to=20not=20work=20as=20expected=20(example?= =?UTF-8?q?).=20=20=20=20=20=20=20=E2=96=A1=20Fixed=20issues=20with=20scri?= =?UTF-8?q?pt-mode=20recording=20of=20file=20paths=20on=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Windows.=20=20=20=20=20=20=20=E2=96=A1=20On=20Macs,=20?= =?UTF-8?q?fixed=20a=20bug=20that=20caused=20the=20ImageJ>About=20ImageJ?= =?UTF-8?q?=20window=20=20=20=20=20=20=20=20=20to=20open=20slowly.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Cammer,=20fi?= =?UTF-8?q?xed=20a=20bug=20that=20caused=20the=20s2=3D=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20replace(s,s1,s2)=20and=20s2=3Ds.replace(s1,s2)=20macro?= =?UTF-8?q?=20functions=20to=20=20=20=20=20=20=20=20=20fail=20when=20's1'?= =?UTF-8?q?=20was=20a=20single=20regular=20expression=20special=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20character=20and=20's2'=20did=20not=20have=20a?= =?UTF-8?q?=20length=20of=20one.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20Philippe=20Carl,=20fixed=20a=20bug=20that=20caused=20the?= =?UTF-8?q?=20Image>=20=20=20=20=20=20=20=20=20Stacks>Tools>Concatenate=20?= =?UTF-8?q?command=20to=20not=20preserve=20the=20"Info"=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20properties.=20=20=20=20=20=20=20=E2=96=A1=20Fixed=20a?= =?UTF-8?q?=201.52r=20regression=20that=20caused=20ImageJ=20to=20hang=20wh?= =?UTF-8?q?en=20saving=20=20=20=20=20=20=20=20=20images=20with=20fewer=20t?= =?UTF-8?q?han=204=20pixel=20in=20TIFF=20format.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Jan=20Brocher,=20fixed=20a=201.52u=20?= =?UTF-8?q?regression=20that=20caused=20the=20=20=20=20=20=20=20=20=20Edit?= =?UTF-8?q?>Selection>Enlarge=20command=20to=20not=20work=20as=20well=20as?= =?UTF-8?q?=20before.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'jerr'?= =?UTF-8?q?,=20fixed=20a=201.52=20regression=20that=20made=20it=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20impossible=20to=20set=20the=20threshold=20by?= =?UTF-8?q?=20changing=20the=20textfield=20=20=20=20=20=20=20=20=20values.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'Emil'=20and=20P?= =?UTF-8?q?ete=20Bankhead,=20fixed=20a=201.53c=20regression=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20that=20caused=20the=20Analyze>Plot=20Profile=20comm?= =?UTF-8?q?and=20not=20work=20as=20=20=20=20=20=20=20=20=20expected=20with?= =?UTF-8?q?=20segmented=20and=20freehand=20line=20selections=20on=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20spatially=20calibrated=20images.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Zeynab=20Mousavi,=20fixed=20?= =?UTF-8?q?a=201.52=20regression=20that=20caused=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20the=20getResults()=20macro=20function=20to=20unexpectadly=20?= =?UTF-8?q?cause=20a=20"No=20=20=20=20=20=20=20=20=20results=20found"=20er?= =?UTF-8?q?ror=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?Sumin=20Kim,=20fixed=20a=201.52t=20regression=20that=20caused?= =?UTF-8?q?=20Stack=20=20=20=20=20=20=20=20=20to=20Images=20image=20titles?= =?UTF-8?q?=20to=20not=20be=20the=20same=20as=20before=20for=20stacks=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20with=20names=20containing=20spaces.=20?= =?UTF-8?q?=20=20=E2=80=A2=201.53c=2026=20June=202020=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20Help>Examples>Tools>=20submenu=20with?= =?UTF-8?q?=20five=20tools:=20Circle=20=20=20=20=20=20=20=20=20Tool,=20Sta?= =?UTF-8?q?r=20Tool,=20Point=20Picker,=20Big=20Cursor=20and=20Annular=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Selection.=20These=20tools=20use=20the?= =?UTF-8?q?=20new=20"//@AutoInstall"=20directive=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20that=20automatically=20adds=20them=20to=20the=20toolbar.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Added=20the=20"//@AutoInstall"=20?= =?UTF-8?q?and=20"//@AutoInstallAndHide"=20=20=20=20=20=20=20=20=20directi?= =?UTF-8?q?ves=20for=20automatically=20installing=20macros=20and=20tools?= =?UTF-8?q?=20in=20=20=20=20=20=20=20=20=20newly=20opened=20.ijm=20and=20.?= =?UTF-8?q?txt=20files.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Loui?= =?UTF-8?q?se=20Bishop,=20delete=20multiple=20points=20from=20a=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20multi-point=20selection=20by=20creating=20a?= =?UTF-8?q?=20new=20area=20selection=20while=20=20=20=20=20=20=20=20=20hol?= =?UTF-8?q?ding=20down=20the=20alt=20key.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Gabriel=20Landini,=20the=20LUT=20name=20is=20save?= =?UTF-8?q?d=20as=20an=20image=20=20=20=20=20=20=20=20=20property=20and=20?= =?UTF-8?q?displayed=20when=20you=20type=20"i"=20(Image>Show=20Info).=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Added=20support=20for=2024x24=20m?= =?UTF-8?q?acro=20tool=20icons.=20The=20Big=20Cursor=20and=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20Annular=20Selection=20tools=20are=20examples.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Double=20click=20on=20an=20overlay?= =?UTF-8?q?=20selection=20to=20activate=20it.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Christophe=20Leterrier=20and=20Christ?= =?UTF-8?q?ian=20Goosmann,=20the=20=20=20=20=20=20=20=20=20Image>Scale,=20?= =?UTF-8?q?Image>Adjust>Size,=20Image>Transform>Rotate,=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Translate,=20Rotate=2090=20Degrees=20Right=20and=20Rot?= =?UTF-8?q?ate=2090=20Degrees=20Left=20=20=20=20=20=20=20=20=20commands=20?= =?UTF-8?q?now=20work=20with=20overlays.=20=20=20=20=20=20=20=E2=96=A1=20T?= =?UTF-8?q?hanks=20to=20'Emma',=20added=20sliders=20and=20an=20"Overlay=20?= =?UTF-8?q?only"=20option=20to=20=20=20=20=20=20=20=20=20the=20Image>Trans?= =?UTF-8?q?form>Translate=20command.=20=20=20=20=20=20=20=E2=96=A1=20The?= =?UTF-8?q?=20Color=20Picker=20is=20improved,=20including=20a=20new=20tool?= =?UTF-8?q?=20icon.=20=20=20=20=20=20=20=E2=96=A1=20Toolbar=20buttons=20ar?= =?UTF-8?q?e=20one=20pixel=20larger,=20making=20the=20"ImageJ"=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20window=2020=20pixels=20wider.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Tool=20icons=20are=20bolder=20when=20the=20GUI?= =?UTF-8?q?=20scale=20is=20greater=20than=201.0=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?and=20less=20the=201.5.=20=20=20=20=20=20=20=E2=96=A1=20Added?= =?UTF-8?q?=20a=20"Reset"=20button=20to=20the=20Edit=20dialog=20of=20the?= =?UTF-8?q?=20Plugins>=20=20=20=20=20=20=20=20=20Utilities>Commands=20wind?= =?UTF-8?q?ow.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20Jerome=20Mutterer,?= =?UTF-8?q?=20added=20the=20rainbow=20progress=20bar=20easter=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20egg,=20activated=20by=20switching=20to=20the=20a?= =?UTF-8?q?ngle=20tool=20and=20running=20a=20=20=20=20=20=20=20=20=20comma?= =?UTF-8?q?nd=20that=20uses=20a=20progress=20bar=20(e.g.,=20a=20radius=205?= =?UTF-8?q?0=20median=20=20=20=20=20=20=20=20=20filter=20on=20a=201000x100?= =?UTF-8?q?0=20image).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fred?= =?UTF-8?q?=20Damen,=20the=20Compile=20and=20Run=20command=20now=20looks?= =?UTF-8?q?=20for=20=20=20=20=20=20=20=20=20library=20JAR=20files=20in=20b?= =?UTF-8?q?oth=20plugins/jars=20and=20plugins/lib.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20getDir("file")=20macro=20function,=20?= =?UTF-8?q?which=20returns=20the=20=20=20=20=20=20=20=20=20directory=20of?= =?UTF-8?q?=20the=20most=20recently=20opened=20or=20saved=20file.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20Jerome=20Mutterer,=20added=20t?= =?UTF-8?q?he=20=20=20=20=20=20=20=20=20Overlay.activateSelectionAndWait()?= =?UTF-8?q?=20macro=20function.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20t?= =?UTF-8?q?o=20'Eljonco',=20added=20the=20RoiManager.getName()=20macro=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20function.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Laurent=20Thomas,=20added=20the=20RoiManager.s?= =?UTF-8?q?etPosition()=20=20=20=20=20=20=20=20=20macro=20function=20and?= =?UTF-8?q?=20method.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'quatr?= =?UTF-8?q?eulls',=20added=20the=20Table.saveColumnHeaders=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20(boolean)=20macro=20function=20and=20ResultsTable.s?= =?UTF-8?q?aveColumnHeaders=20=20=20=20=20=20=20=20=20(boolean)=20method.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas?= =?UTF-8?q?,=20added=20the=20ImagePlus.crop(Roi[])=20and=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20ImagePlus.crop(Roi[],options)=20methods=20(JavaScript?= =?UTF-8?q?=20example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Bill?= =?UTF-8?q?=20Christens-Barry,=20added=20the=20TextWindow.setFont=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20(name,style,size)=20method=20for=20setting=20?= =?UTF-8?q?the=20font=20used=20in=20the=20Log=20=20=20=20=20=20=20=20=20wi?= =?UTF-8?q?ndow.=20For=20monospaced=20text,=20set=20'name'=20to=20"Monospa?= =?UTF-8?q?ced"=20(=20=20=20=20=20=20=20=20=20example).=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Gilles=20Carpentier,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20caused=20NaN=20=20=20=20=20=20=20=20=20results?= =?UTF-8?q?=20when=20measuring=20line=20selections=20created=20by=20Edit>?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Selection>Area=20to=20Line=20from=20?= =?UTF-8?q?particle=20analyzer=20selections=20=20=20=20=20=20=20=20=20touc?= =?UTF-8?q?hing=20the=20right=20or=20bottom=20edge=20of=20the=20image.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,?= =?UTF-8?q?=20fixed=20bugs=20that=20caused=20hyperstacks=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20with=20a=20"select=20all"=20selection=20to=20not=20be?= =?UTF-8?q?=20correcty=20copied=20to=20the=20=20=20=20=20=20=20=20=20syste?= =?UTF-8?q?m=20clipboard.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jo?= =?UTF-8?q?e=20Want,=20fixed=20a=20bug=20that=20caused=20the=20macro=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20interpreter=20to=20sometimes=20generate=20?= =?UTF-8?q?an=20invalid=20"Numeric=20return=20=20=20=20=20=20=20=20=20valu?= =?UTF-8?q?e=20expected"=20message.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20Jerome=20Mutterer,=20fixed=20a=20bug=20that=20caused=20the?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Roi.activateSelection(index)=20macro?= =?UTF-8?q?=20function=20to=20not=20work=20as=20=20=20=20=20=20=20=20=20ex?= =?UTF-8?q?pected=20when=20called=20twice=20with=20the=20same=20index.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Worked=20around=20a=20Java=208/Wi?= =?UTF-8?q?ndows=2010=20bug=20that=20caused=20the=20"ImageJ"=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20window=20menu=20bar=20font=20size=20to=20become?= =?UTF-8?q?=20very=20small=20after=20increasing=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?the=20GUI=20scale.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Romain=20Guiet=20and=20Jan=20Eglinger,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20=20=20=20=20=20=20=20=20caused=20the=20multi-point=20tool?= =?UTF-8?q?=20to=20always=20reset=20the=20counter=20to=200.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20the=20Edit>?= =?UTF-8?q?Selection>Fit=20Spline=20command=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20leave=20an=20incomplete=20progress=20bar.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20the=20Editor's?= =?UTF-8?q?=20Compile=20and=20Run=20"Save=20as"=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?dialog=20to=20sometimes=20not=20default=20to=20a=20folder=20ins?= =?UTF-8?q?ide=20the=20plugins=20=20=20=20=20=20=20=20=20folder.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,=20fixed?= =?UTF-8?q?=20a=20bug=20in=20ROI=20Manager>Properties=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20that=20caused=20it=20to=20not=20change=20the=20position?= =?UTF-8?q?=20of=20multiple=20ROIs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Michael=20Schmid,=20fixed=20a=20bug=20that=20could=20ca?= =?UTF-8?q?use=20an=20=20=20=20=20=20=20=20=20exception=20with=20plugins?= =?UTF-8?q?=20using=20a=20DialogListener.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bug=20that=20coul?= =?UTF-8?q?d=20cause=20the=20=20=20=20=20=20=20=20=20"Label=20Points"=20ch?= =?UTF-8?q?eckbox=20in=20Point=20Tool=20Options=20dialogs=20to=20be=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20ignored.=20=20=20=20=20=20=20=E2=96=A1=20T?= =?UTF-8?q?hanks=20to=20Christian=20Tischer,=20fixed=20a=20bug=20that=20ca?= =?UTF-8?q?used=20the=20macro=20=20=20=20=20=20=20=20=20interpreter=20to?= =?UTF-8?q?=20not=20generate=20an=20"Undefined=20variable"=20error=20with?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20statements=20like=20"v=3Dv+1".=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Garbriel=20Landini,=20?= =?UTF-8?q?fixed=20a=201.52m=20regression=20that=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20caused=20histogram=20peaks=20to=20extend=20above=20the=20fra?= =?UTF-8?q?me.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvi?= =?UTF-8?q?k,=20fixed=20a=201.52u=20regression=20that=20caused=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20File>Import>Image=20Sequence=20to=20display=20un?= =?UTF-8?q?expected=20error=20messages=20=20=20=20=20=20=20=20=20in=20the?= =?UTF-8?q?=20Log=20window.=20=20=20=E2=80=A2=201.53b=2031=20May=202020=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,?= =?UTF-8?q?=20added=20the=20"Overlay=20Editing=20Tools"=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20toolset=20and=20the=20"Label=20Maker"=20tool=20to=20th?= =?UTF-8?q?e=20toolbar's=20">>"=20menu.=20=20=20=20=20=20=20=20=20Shift=20?= =?UTF-8?q?click=20on=20a=20toolset=20or=20tool=20in=20the=20">>"=20menu?= =?UTF-8?q?=20to=20view=20the=20=20=20=20=20=20=20=20=20macro=20source=20c?= =?UTF-8?q?ode.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Th?= =?UTF-8?q?omas,=20added=20the=20Edit>Options>Roi=20Defaults=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20command,=20which=20adds=20support=20for=20ROI=20?= =?UTF-8?q?group=20names.=20Double=20click=20=20=20=20=20=20=20=20=20on=20?= =?UTF-8?q?the=20rectangle=20tool=20to=20run=20this=20command.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20The=20group=20name,=20"Stroke=20Color:"=20?= =?UTF-8?q?field=20and=20the=20selection=20color=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20are=20dynamically=20updated=20as=20the=20group=20number=20is?= =?UTF-8?q?=20changed=20in=20the=20=20=20=20=20=20=20=20=20Edit>Selection>?= =?UTF-8?q?Properties=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20t?= =?UTF-8?q?o=20Jerome=20Mutterer,=20added=20support=20for=20tool=20icons?= =?UTF-8?q?=20read=20=20=20=20=20=20=20=20=20from=20image=20files=20locate?= =?UTF-8?q?d=20in=20the=20macros/toolsets/icons/=20folder.=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20The=20syntax=20looks=20like=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20macro=20"Test=20Tool=20-=20icon:833.png"=20{=20}.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Erod=20Baybay,=20added=20?= =?UTF-8?q?the=20Roi.setPosition(slice)=20macro=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?function.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome?= =?UTF-8?q?=20Mutterer,=20added=20the=20Overlay.indexAt(x,y),=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Overlay.removeRois(name)=20and=20Overlay.getBoun?= =?UTF-8?q?ds=20=20=20=20=20=20=20=20=20(index,x,y,width,height)=20macro?= =?UTF-8?q?=20functions.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ste?= =?UTF-8?q?in=20Rorvik,=20added=20the=20Roi.setJustification(str),=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20Roi.setFontSize(size),=20Property.setList(?= =?UTF-8?q?str)=20and=20=20=20=20=20=20=20=20=20Property.getList=20macro?= =?UTF-8?q?=20functions.=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20set?= =?UTF-8?q?Option("InterpolateLines",boolean)=20macro=20function.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Adrian=20Martin,=20added?= =?UTF-8?q?=20the=20setOption=20=20=20=20=20=20=20=20=20("FlipFitsImages",?= =?UTF-8?q?true)=20macro=20function.=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20Laurent=20Thomas,=20added=20the=20Roi.getGroupNames=20?= =?UTF-8?q?and=20=20=20=20=20=20=20=20=20Roi.setGroupNames()=20macro=20fun?= =?UTF-8?q?ctions.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jan=20Egl?= =?UTF-8?q?inger,=20moved=20initialization=20of=20the=20okay=20and=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20cancel=20buttons=20in=20GenericDialog=20in?= =?UTF-8?q?to=20the=20constructors.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Hidenao=20Yamada,=20fixed=20a=20bug=20that=20caused=20t?= =?UTF-8?q?he=20=20=20=20=20=20=20=20=20FileInfoVirtualStack.deleteLastSli?= =?UTF-8?q?ce()=20method=20to=20not=20work.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Tom=20Kazimiers,=20fixed=20spelling=20of=20the?= =?UTF-8?q?=20ARTIST=20tag=20in=20=20=20=20=20=20=20=20=20the=20TiffDecode?= =?UTF-8?q?r.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutte?= =?UTF-8?q?rer=20and=20Michael=20Schmid,=20fixed=20a=20rounding=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20error=20that=20caused=20the=20Measure=20comma?= =?UTF-8?q?nd=20to=20not=20correctly=20measure=20=20=20=20=20=20=20=20=20p?= =?UTF-8?q?oint=20selectons=20with=20non-integer=20coordinates.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Herbie=20Gluender,=20fixe?= =?UTF-8?q?d=20bugs=20that=20caused=20the=20Rename,=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Duplicate,=20Sort=20and=20Plot=20Results=20table=20comman?= =?UTF-8?q?ds=20to=20not=20work=20if=20=20=20=20=20=20=20=20=20the=20table?= =?UTF-8?q?=20did=20not=20contain=20a=20ResultsTable=20object.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20the=20Stack=20to=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Hyperstack=20command=20to=20throw=20an=20exception.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'Hayato',=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20the=20roiManager=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20("measure")=20macro=20function=20to=20be=20slow=20on?= =?UTF-8?q?=20Windows=20when=20measuring=20=20=20=20=20=20=20=20=20thousan?= =?UTF-8?q?ds=20of=20ROIs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20G?= =?UTF-8?q?illes=20Carpentier,=20fixed=20a=20bug=20that=20caused=20the=20S?= =?UTF-8?q?tack=20=20=20=20=20=20=20=20=20to=20Hyperstack=20command=20to?= =?UTF-8?q?=20unexpectedly=20display=20the=20output=20image=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20in=20batch=20mode.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Madison=20Williams,=20fixed=20a=201.52o=20regress?= =?UTF-8?q?ion=20that=20=20=20=20=20=20=20=20=20caused=20tables=20created?= =?UTF-8?q?=20by=20the=20Cell=20Counter=20plugin=20to=20be=20empty.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ron=20DeSpain,=20fixed?= =?UTF-8?q?=20a=201.52u=20regression=20that=20caused=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20incorrect=20positions=20to=20be=20shown=20in=20the=20stat?= =?UTF-8?q?us=20bar=20after=20using=20=20=20=20=20=20=20=20=20the=20arrow?= =?UTF-8?q?=20keys=20to=20move=20line=20selections.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=201.52t?= =?UTF-8?q?=20regression=20that=20caused=20=20=20=20=20=20=20=20=20the=20T?= =?UTF-8?q?extRoi.setJustification()=20method=20to=20sometimes=20not=20wor?= =?UTF-8?q?k=20as=20=20=20=20=20=20=20=20=20expected.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'hwada',=20fixed=20a=201.52t=20regres?= =?UTF-8?q?sion=20that=20changed=20the=20=20=20=20=20=20=20=20=20order=20o?= =?UTF-8?q?f=20the=20points=20returned=20by=20Line.getFloatPolygon().=20?= =?UTF-8?q?=20=20=E2=80=A2=201.53a=204=20May=202020=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Ellis,=20added=20support=20?= =?UTF-8?q?for=20saving=20and=20restoring=20=20=20=20=20=20=20=20=20persis?= =?UTF-8?q?tent=20image=20properties=20via=20the=20Property.set(key,value)?= =?UTF-8?q?=20and=20=20=20=20=20=20=20=20=20Property.get(key)=20macro=20fu?= =?UTF-8?q?nctions=20and=20the=20setProp(key,string),=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20getProp(key),=20setProp(key,double)=20and=20getNumericPro?= =?UTF-8?q?p(key)=20=20=20=20=20=20=20=20=20methods=20(JavaScript=20exampl?= =?UTF-8?q?e).=20=20=20=20=20=20=20=E2=96=A1=20Removed=20file=20sizes=20fr?= =?UTF-8?q?om=20entries=20in=20the=20File>Open=20Samples>=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20submenu.=20Macros=20that=20use=20the=20old=20entrie?= =?UTF-8?q?s=20(e.g.=20"Blobs=20(25K)")=20=20=20=20=20=20=20=20=20continue?= =?UTF-8?q?=20to=20work.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Lau?= =?UTF-8?q?rent=20Thomas,=20the=20Overlay=20and=20RoiManager=20classes=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20are=20now=20iterable.=20Plugins=20can?= =?UTF-8?q?=20use=20"for=20(Roi=20roi=20:=20rm)"=20instead=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20of=20"for=20(int=20i=20=3D=200;=20i=20!=3D=20rm.get?= =?UTF-8?q?Count();=20i++)".=20In=20JavaScript,=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?use=20"for=20each=20(roi=20in=20rm)"=20(example).=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added?= =?UTF-8?q?=20the=20[&n]=20macro=20shortcut=20=20=20=20=20=20=20=20=20nota?= =?UTF-8?q?tion=20that=20allows=20shortcuts=20to=20be=20used=20on=20both?= =?UTF-8?q?=20numerical=20=20=20=20=20=20=20=20=20keypads=20and=20normal?= =?UTF-8?q?=20(laptop)=20keyboards.=20(example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Richard=20Boardman,=20increased=20the?= =?UTF-8?q?=20BufferedOutputStream=20=20=20=20=20=20=20=20=20buffer=20size?= =?UTF-8?q?=20in=20the=20FileSaver=20class=20to=2032K=20and=20added=20the?= =?UTF-8?q?=20static=20=20=20=20=20=20=20=20=20FileSaver.setBufferSize(int?= =?UTF-8?q?)=20method.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Micha?= =?UTF-8?q?el=20Schmid,=20added=20the=20Plot.setOptions()=20macro=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20function.=20See=20Help>Examples>Plots>Plot=20?= =?UTF-8?q?Results=20for=20an=20example.=20=20=20=20=20=20=20=E2=96=A1=20A?= =?UTF-8?q?dded=20the=20Property.get(key),=20Property.set(key,value),=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Property.getInfo,=20Property.getSliceLa?= =?UTF-8?q?bel,=20=20=20=20=20=20=20=20=20Property.setSliceLabel(string)?= =?UTF-8?q?=20and=20Property.getDicomTag(string)=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20macro=20functions.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20Michael=20Schmid,=20added=20the=20Plot.getCurrentFont(),?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Plot.getDefaultFont()=20and=20Tools.?= =?UTF-8?q?getNumberFromList()=20methods.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Herbie=20Gluender,=20added=20the=20GenericDialog.?= =?UTF-8?q?getLabel()=20=20=20=20=20=20=20=20=20and=20FHT.getRawPowerSpect?= =?UTF-8?q?rum()=20methods.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?Kenneth=20Sloan,=20added=20the=20=20=20=20=20=20=20=20=20ImageP?= =?UTF-8?q?rocessor.getForegroundValue()=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Curtis=20Rueden,=20added=20the=20GUI.?= =?UTF-8?q?getParentFrame()=20method=20=20=20=20=20=20=20=20=20and=20made?= =?UTF-8?q?=20GenericDialog.getParentFrame()=20private=20again.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Hidenao=20Yamada,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20the=20=20=20=20=20=20=20=20=20getD?= =?UTF-8?q?irectory()=20and=20getFileName()=20methods=20of=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20FileInfoVirtualStack=20class=20to=20always=20?= =?UTF-8?q?return=20null.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20No?= =?UTF-8?q?rbert=20Vischer,=20fixed=20a=20bug=20that=20caused=20the=20File?= =?UTF-8?q?>=20=20=20=20=20=20=20=20=20Import>Image=20Sequence=20command?= =?UTF-8?q?=20to=20not=20ignore=20subdirectories.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Cammer,=20fixed=20a=201.52v?= =?UTF-8?q?=20regression=20that=20caused=20=20=20=20=20=20=20=20=20recordi?= =?UTF-8?q?ng=20to=20not=20work=20correctly=20when=20Preview=20was=20check?= =?UTF-8?q?ed=20in=20a=20=20=20=20=20=20=20=20=20filter=20dialog.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Fixed=20a=201.52o=20regression=20that?= =?UTF-8?q?=20caused=20the=20Help>Examples>=20=20=20=20=20=20=20=20=20Java?= =?UTF-8?q?Script>FFT=20Filter=20script=20to=20display=20an=20error=20mess?= =?UTF-8?q?age.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'Eljonco',?= =?UTF-8?q?=20fixed=20a=201.52v=20regression=20that=20caused=20the=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20Threshold=20tool=20to=20sometimes=20freeze?= =?UTF-8?q?=20ImageJ.=20=20=20=E2=80=A2=201.52v=2011=20April=202020=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20m?= =?UTF-8?q?acro=20error=20messages=20include=20the=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20call=20stack.=20(example).=20=20=20=20=20=20=20=E2=96=A1=20A?= =?UTF-8?q?dded=20a=20"Set=20default=20directory"=20code=20choice=20to=20t?= =?UTF-8?q?he=20Edit>=20=20=20=20=20=20=20=20=20Options>Startup=20dialog.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas?= =?UTF-8?q?,=20the=20RoiManager=20class=20is=20now=20iterable.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20The=20run("Viridis")=20macro=20function=20?= =?UTF-8?q?now=20works=20on=20Fiji=20(example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Fred=20Damen,=20Java=20compiler=20err?= =?UTF-8?q?or=20messages=20use=20the=20=20=20=20=20=20=20=20=20default=20e?= =?UTF-8?q?ditor=20font.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fre?= =?UTF-8?q?d=20Damen=20and=20Michael=20Schmid,=20added=20the=20Math.erf(x)?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20macro=20function.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Added=20the=20Overlay.useNamesAsLabels(boolean)?= =?UTF-8?q?=20macro=20function=20(=20=20=20=20=20=20=20=20=20example).=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,?= =?UTF-8?q?=20added=20the=20Fit.getEquation=20=20=20=20=20=20=20=20=20(ind?= =?UTF-8?q?ex,name,formula,macroCode)=20macro=20function=20(example).=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'Odinsbane',=20adde?= =?UTF-8?q?d=20the=20ByteProcessor.skeletonize=20=20=20=20=20=20=20=20=20(?= =?UTF-8?q?foreground)=20method,=20where=20'foreground'=20is=20either=200?= =?UTF-8?q?=20or=20255.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laur?= =?UTF-8?q?ent=20Thomas,=20added=20the=20=20=20=20=20=20=20=20=20ResultsTa?= =?UTF-8?q?ble.getResultsTable(title)=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'Max1',=20fixed=20a=20bug=20that=20ca?= =?UTF-8?q?used=20the=20Edit>Selection>=20=20=20=20=20=20=20=20=20Scale=20?= =?UTF-8?q?command=20to=20not=20maintain=20the=20selection=20name,=20group?= =?UTF-8?q?,=20fill=20=20=20=20=20=20=20=20=20color,=20point=20type=20and?= =?UTF-8?q?=20point=20size.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?'Odinsbane',=20fixed=20a=20bug=20that=20caused=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20ByteProcessor.skeletonize()=20method=20to=20n?= =?UTF-8?q?ot=20work=20correctly=20with=20=20=20=20=20=20=20=20=20objects?= =?UTF-8?q?=20touching=20the=20image=20edge.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Stefan=20Helfrich=20and=20Olivier=20Burri,=20f?= =?UTF-8?q?ixed=20a=20bug=20that=20=20=20=20=20=20=20=20=20caused=20the=20?= =?UTF-8?q?position=20of=20ROIs=20added=20to=20the=20ROI=20Manager=20using?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20RoiManager.setRoi()=20to=20sometimes?= =?UTF-8?q?=20change.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michae?= =?UTF-8?q?l=20Schmid,=20fixed=20a=20bug=20that=20sometimes=20caused=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20GenericDialogs=20to=20throw=20an=20excepti?= =?UTF-8?q?on.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jeremy=20Adle?= =?UTF-8?q?r,=20fixed=20a=20bug=20where=20changing=20the=20LUT=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20resets=20the=20display=20range.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20'Sh=5FTy',=20fixed=20a=20bug=20?= =?UTF-8?q?the=20caused=20the=20Analyze>Tools>=20=20=20=20=20=20=20=20=20C?= =?UTF-8?q?alibration=20Bar=20command=20to=20throw=20an=20exception=20in?= =?UTF-8?q?=20headless=20mode.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Michael=20Schmid,=20fixed=20a=20bug=20that=20caused=20plots?= =?UTF-8?q?=20with=20=20=20=20=20=20=20=20=20custom=20symbols=20to=20use?= =?UTF-8?q?=20the=20wrong=20color=20or=20generate=20an=20error.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Nicolas=20De=20Francesco,?= =?UTF-8?q?=20fixed=20a=201.52u=20regression=20that=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20caused=20incorrect=20straight=20line=20length=20measureme?= =?UTF-8?q?nts=20with=20=20=20=20=20=20=20=20=20spatially=20calibrated=20i?= =?UTF-8?q?mages.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Peter=20Ha?= =?UTF-8?q?ub,=20fixed=20a=201.52u=20regression=20that=20caused=20the=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20cursor=20position=20to=20not=20be=20ali?= =?UTF-8?q?gned=20with=20the=20drawing=20position=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20when=20creating=20a=20polygon=20ROI.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'Professor=5FOAT',=20fixed=20a=201.52?= =?UTF-8?q?s=20regresson=20that=20caused=20=20=20=20=20=20=20=20=20the=20d?= =?UTF-8?q?eleteRows()=20macro=20function=20to=20throw=20an=20exception=20?= =?UTF-8?q?when=20=20=20=20=20=20=20=20=20deleting=20rows=20in=20a=20non-n?= =?UTF-8?q?umeric=20table.=20=20=20=E2=80=A2=201.52u=2017=20March=202020?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20ROI=20enhancements,=20thanks?= =?UTF-8?q?=20to=20Michael=20Schmid:=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=98=86=20Line=20and=20point=20selections=20have=20integer=20?= =?UTF-8?q?coordinates=20at=20pixel=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?centers=20when=20displayed=20at=20high=20magnification.=20Area?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20selections=20have=20inte?= =?UTF-8?q?ger=20coordinates=20at=20the=20top-left=20corner=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20of=20pixels.=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=98=86=20All=20interactively=20created=20ROIs,=20excep?= =?UTF-8?q?t=20rectangles=20and=20=20=20=20=20=20=20=20=20=20=20=20=20oval?= =?UTF-8?q?s,=20are=20created=20with=20subpixel=20resolution=20when=20the?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20magnification=20is=20abo?= =?UTF-8?q?ve=20150%.=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Removed?= =?UTF-8?q?=20the=20"Sub-pixel=20resolution"=20option=20from=20the=20Edit>?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20Options>Plots=20dialog.?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20The=20Line=20to=20?= =?UTF-8?q?Area=20command=20is=20faster=20and=20more=20accurate=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=E2=98=86=20The=20Straighten=20command?= =?UTF-8?q?=20is=20more=20accurate.=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=98=86=20The=20Image>Info=20command=20displays=20more=20info?= =?UTF-8?q?rmation=20about=20=20=20=20=20=20=20=20=20=20=20=20=20ROIs.=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Long-click=20to=20sel?= =?UTF-8?q?ect=20ROIs=20from=20overlays=20now=20also=20works=20with=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20lines.=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=98=86=20The=20Measure=20command=20uses=20Line=20to?= =?UTF-8?q?=20Area=20instead=20of=20Straighten=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20to=20get=20statistics=20from=20segmented=20and=20fr?= =?UTF-8?q?eehand=20lines=20with=20a=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20width=20geater=20than=20one.=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=98=86=20Fixed=20a=20bug=20that=20could=20(rarely)=20caus?= =?UTF-8?q?e=20an=20exception=20during=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20"wipe=20back"=20when=20drawing=20a=20polygon=20or=20polyline?= =?UTF-8?q?.=20In=20"wipe=20=20=20=20=20=20=20=20=20=20=20=20=20back"=20mo?= =?UTF-8?q?de,=20the=20mouse=20behaves=20like=20an=20eraser=20when=20moved?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20backwards=20with=20alt?= =?UTF-8?q?=20key=20down.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ni?= =?UTF-8?q?colas=20De=20Francesco,=20added=20the=20Edit>Selection>Fit=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Rectangle=20command.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20'Dcolam'=20and=20Jan=20Eglinger,?= =?UTF-8?q?=20the=20Edit>Selection>Enlarge=20=20=20=20=20=20=20=20=20comma?= =?UTF-8?q?nd=20no=20longer=20has=20a=20255=20pixel=20limit.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Peter=20Bankhead,=20the=20de?= =?UTF-8?q?fault=20TIFF=20reader=20uses=20the=20=20=20=20=20=20=20=20=20Ha?= =?UTF-8?q?ndleExtraFileTypes=20plugin=20when=20it=20is=20unable=20to=20op?= =?UTF-8?q?en=20a=20file.=20=20=20=20=20=20=20=20=20As=20an=20example,=20.?= =?UTF-8?q?svs=20files=20dragged=20and=20dropped=20on=20the=20"ImageJ"=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20window=20are=20now=20opened=20by=20the?= =?UTF-8?q?=20Bio-Formats=20plugin.=20=20=20=20=20=20=20=E2=96=A1=20Added?= =?UTF-8?q?=20the=20Help>Examples>JavaScript>Overlay=20Text=20example.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,?= =?UTF-8?q?=20added=20a=20"Install=20Keypad=20Shortcuts"=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20command=20to=20the=20ROI=20Menu=20tool.=20Add=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20call("ij.plugin.MacroInstaller.installFromJar?= =?UTF-8?q?",=20"/macros/=20=20=20=20=20=20=20=20=20RoiMenuTool.txt+");=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20to=20the=20Edit>Options>Startup=20dialo?= =?UTF-8?q?g=20to=20have=20the=20shortcuts=20=20=20=20=20=20=20=20=20autom?= =?UTF-8?q?atically=20installed=20on=20startup.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,=20the=20commands=20?= =?UTF-8?q?in=20the=20ROI=20Menu=20tool=20and=20=20=20=20=20=20=20=20=20th?= =?UTF-8?q?e=20"Group"=20setting=20in=20the=20ROI=20Manager's=20Properties?= =?UTF-8?q?=20dialog=20are=20=20=20=20=20=20=20=20=20recordable.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Added=20the=20Math.abs(n),=20Math.acos(?= =?UTF-8?q?n),=20Math.asin(n),=20Math.atan=20=20=20=20=20=20=20=20=20(n),?= =?UTF-8?q?=20Math.atan2(n1,n2),=20Math.ceil(n),=20Math.cos(n),=20Math.exp?= =?UTF-8?q?(n),=20=20=20=20=20=20=20=20=20Math.floor(n),=20Math.log(n),=20?= =?UTF-8?q?Math.log10(n),=20Math.min(n1,n2),=20=20=20=20=20=20=20=20=20Mat?= =?UTF-8?q?h.max(n1,n2),=20Math.pow(n1,n2),=20Math.round(n),=20Math.sin(n)?= =?UTF-8?q?,=20=20=20=20=20=20=20=20=20Math.sqr(n),=20Math.sqrt(n)=20and?= =?UTF-8?q?=20Math.tan(n)=20macro=20functions.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20RoiManager.setGroup(group)=20and=20Ro?= =?UTF-8?q?iManager.selectGroup=20=20=20=20=20=20=20=20=20(group)=20macro?= =?UTF-8?q?=20functions.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ken?= =?UTF-8?q?=20Gilbert,=20added=20the=20getValue("image.size")=20macro=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20function.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Laurent=20Thomas,=20added=20the=20setOption=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20("WaitForCompletion",false)=20macro=20f?= =?UTF-8?q?unction,=20which=20causes=20the=20=20=20=20=20=20=20=20=20next?= =?UTF-8?q?=20exec()=20call=20to=20return=20an=20empty=20string=20and=20no?= =?UTF-8?q?t=20wait=20for=20the=20=20=20=20=20=20=20=20=20command=20being?= =?UTF-8?q?=20executed=20to=20finish.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Nortbert=20Vischer,=20added=20the=20Array.sort=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20(array1,array2,array3...)=20macro=20functi?= =?UTF-8?q?on=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20V?= =?UTF-8?q?olker=20Backer,=20added=20the=20ImagePlus.resize()=20method,=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20which=20is=20recorded=20by=20the=20Imag?= =?UTF-8?q?e>Scale=20and=20Image>Adjust>Size=20=20=20=20=20=20=20=20=20com?= =?UTF-8?q?mands.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fred=20Dam?= =?UTF-8?q?en,=20added=20the=20Plot.setWindowSize()=20method.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Lewis=20Muir,=20fixed=20a=20?= =?UTF-8?q?bug=20the=20caused=20the=20Pixel=20=20=20=20=20=20=20=20=20Insp?= =?UTF-8?q?ection=20Tool's=20red=20selection=20box=20to=20be=20included=20?= =?UTF-8?q?with=20the=20=20=20=20=20=20=20=20=20image=20when=20saving=20in?= =?UTF-8?q?=20GIF,=20JPEG=20or=20PNG=20format.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'cooketho',=20fixed=20a=20bug=20that?= =?UTF-8?q?=20caused=20the=20Edit>Copy=20to=20=20=20=20=20=20=20=20=20Syst?= =?UTF-8?q?em=20command=20to=20sometimes=20not=20work=20as=20expected=20wi?= =?UTF-8?q?th=20composite=20=20=20=20=20=20=20=20=20images.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Fred=20Damen,=20fixed=20bugs=20?= =?UTF-8?q?that=20caused=20the=20=20=20=20=20=20=20=20=20TextRoi.setJustif?= =?UTF-8?q?ication()=20and=20TextRoi.drawPixels()=20methods=20to=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20not=20work=20as=20expected.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Nicolas=20De=20Francesco,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20empty=20=20=20=20=20=20=20=20=20ta?= =?UTF-8?q?bles=20to=20not=20be=20opened=20correctly.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20the=20Color=20Pic?= =?UTF-8?q?ker=20to=20not=20work=20correctly=20=20=20=20=20=20=20=20=20if?= =?UTF-8?q?=20the=20GUI=20scale=20was=20greater=20than=20one.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed=20?= =?UTF-8?q?a=20bug=20that=20could=20cause=20a=20thread=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20deadlock=20in=20plugins=20using=20the=20ImageListener?= =?UTF-8?q?=20interface.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Mic?= =?UTF-8?q?hael=20Schmid,=20fixed=20a=20bug=20that=20caused=20the=20"List?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20coordinates"=20option=20in=20the=20E?= =?UTF-8?q?dit>Selection>Properties=20dialog=20to=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20ignore=20the=20"Origin"=20setting=20in=20the=20Image>Propert?= =?UTF-8?q?ies=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'se?= =?UTF-8?q?bi06',=20fixed=20a=201.52p=20regression=20that=20caused=20the?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20particle=20analyzer=20to=20thow=20an?= =?UTF-8?q?=20exception=20in=20headless=20mode.=20=20=20=E2=80=A2=201.52t?= =?UTF-8?q?=2030=20January=202020=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Laurent=20Thomas,=20added=20a=20"Group"=20field=20to=20?= =?UTF-8?q?the=20Edit>=20=20=20=20=20=20=20=20=20Selection>Properties=20di?= =?UTF-8?q?alog=20and=20an=20"ROI=20Menu"=20tool=20to=20the=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20toolbar's=20>>=20menu.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added=20support?= =?UTF-8?q?=20for=20superscripts=20and=20=20=20=20=20=20=20=20=20subscript?= =?UTF-8?q?s=20in=20plot=20axis=20labels=20(example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added=20a=20"Sep?= =?UTF-8?q?arate=20Image"=20option=20to=20=20=20=20=20=20=20=20=20the=20"L?= =?UTF-8?q?ocation:"=20menu=20of=20the=20Analyze>Tools>Calibration=20Bar?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20dialog.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Selection=20handles=20are=20larger.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Added=20a=20"Bolder=20selections"=20("Roi.set?= =?UTF-8?q?DefaultStrokeWidth(2);")=20=20=20=20=20=20=20=20=20code=20choic?= =?UTF-8?q?e=20to=20the=20Edit>Options>Startup=20dialog.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Mark=20Rivers,=20the=20Help>Exampl?= =?UTF-8?q?es>JavaScript>TeraByte=20=20=20=20=20=20=20=20=20VirtualStack?= =?UTF-8?q?=20example=20now=20generates=20test=20patterns=20and=20supports?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20multiple=20image=20types.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,=20added?= =?UTF-8?q?=20the=20Roi.getDefaultGroup,=20=20=20=20=20=20=20=20=20Roi.set?= =?UTF-8?q?DefaultGroup(group),=20Roi.getGroup,=20Roi.setGroup(group),=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Roi.getDefaultStrokeWidth=20and=20Roi.s?= =?UTF-8?q?etDefaultStrokeWidth()=20macro=20=20=20=20=20=20=20=20=20functi?= =?UTF-8?q?ons,=20and=20the=20corresponding=20Roi=20class=20methods.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Added=20the=20following=20macro=20la?= =?UTF-8?q?nguage=20string=20functions,=20where=20's'=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20is=20a=20string=20variable:=20=20=20=20=20=20=20=20=20s.c?= =?UTF-8?q?harAt(i),=20s.contains(s2),=20s.endsWith(s2),=20s.indexOf(s2),?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20s.lastIndexOf(s2),=20s.length,=20s.m?= =?UTF-8?q?atches(s2),=20s.replace(s1,s2),=20=20=20=20=20=20=20=20=20s.sta?= =?UTF-8?q?rtsWith(s2),=20s.substring(i1,i2),=20s.substring(i),=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20s.toLowerCase,=20s.toUpperCase=20and=20s.trim?= =?UTF-8?q?.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stephen=20Royle?= =?UTF-8?q?,=20fixed=20a=20bug=20on=20macOS=20that=20caused=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20command-h=20keyboard=20shortcut=20(ImageJ>Hid?= =?UTF-8?q?e=20ImageJ)=20to=20not=20work.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Mark=20Rivers,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20the=20cursor=20=20=20=20=20=20=20=20=20location=20and=20pixe?= =?UTF-8?q?l=20value=20to=20not=20be=20displayed=20in=20the=20status=20bar?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20for=20animating=20stacks.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Jeff=20Spector=20and=20Mi?= =?UTF-8?q?chael=20Schmid,=20fixed=20a=20bug=20that=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20caused=20the=20Edit>Selection>Line=20to=20Area=20command?= =?UTF-8?q?=20to=20not=20work=20as=20=20=20=20=20=20=20=20=20expected.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,?= =?UTF-8?q?=20fixed=20a=20bug=20that=20caused=20a=20misleading=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20error=20message=20to=20be=20displayed=20when=20u?= =?UTF-8?q?sing=20the=20saveAs=20=20=20=20=20=20=20=20=20(format,path)=20m?= =?UTF-8?q?acro=20function=20to=20save=20in=20"jpg",=20"png"=20or=20"gif"?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20format=20and=20the=20file=20path=20w?= =?UTF-8?q?as=20incorrect.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20M?= =?UTF-8?q?ichael=20Schmid,=20fixed=20a=20bug=20that=20caused=20macro=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20recording=20to=20not=20work=20correctly?= =?UTF-8?q?=20if=20"Non-blocking=20filter=20=20=20=20=20=20=20=20=20dialog?= =?UTF-8?q?s"=20was=20enabled=20in=20the=20Edit>Options>Misc=20dialog.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Kaul,=20f?= =?UTF-8?q?ixed=20a=20bug=20that=20caused=20the=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?GenericDialog.addSlider()=20method=20to=20not=20use=20enough=20?= =?UTF-8?q?digits=20to=20=20=20=20=20=20=20=20=20the=20right=20of=20the=20?= =?UTF-8?q?decimal=20point=20if=20the=20value=20of=20the=20'stepSize'=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20argument=20was=20very=20small.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed?= =?UTF-8?q?=20several=20live=20profile=20plot=20and=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20LineWidthAdjuster=20bugs.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Norbert=20Vischer,=20fixed=20a=20bug=20that=20?= =?UTF-8?q?caused=20the=20Image>=20=20=20=20=20=20=20=20=20Overay>Flatten?= =?UTF-8?q?=20command=20to=20throw=20an=20exception=20when=20flattening=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20hyperstacks.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20dialogs=20with=20=20=20=20=20=20=20=20=20onl?= =?UTF-8?q?y=20buttons=20to=20put=20the=20focus=20on=20the=20first=20butto?= =?UTF-8?q?n,=20which=20is=20not=20=20=20=20=20=20=20=20=20the=20"OK"=20bu?= =?UTF-8?q?tton=20on=20MacOS=20and=20Linux.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20John=20Fozard=20and=20'mountain=5Fman',=20fixe?= =?UTF-8?q?d=20a=20bug=20that=20=20=20=20=20=20=20=20=20caused=20angle=20m?= =?UTF-8?q?easurements=20of=20lines=20a=20few=20pixels=20in=20length=20to?= =?UTF-8?q?=20be=20=20=20=20=20=20=20=20=20incorrect.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'SarenT',=20fixed=20a=20bug=20that=20?= =?UTF-8?q?caused=20the=20=20=20=20=20=20=20=20=20ImagePlus.getShortTitle(?= =?UTF-8?q?)=20method=20to=20truncate=20file=20names=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20containing=20spaces.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Norbert=20Vischer,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20a=20"Has=20=20=20=20=20=20=20=20=20Calibration=20Bar"=20erro?= =?UTF-8?q?r=20when=20attempting=20to=20adjust=20brightness=20and=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20contrast=20after=20clicking=20on=20"Cancel"?= =?UTF-8?q?=20in=20the=20Analyze>Tools>=20=20=20=20=20=20=20=20=20Calibrat?= =?UTF-8?q?ion=20Bar=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Fernando=20Garcia-Polite,=20fixed=20a=201.52q=20regression?= =?UTF-8?q?=20that=20=20=20=20=20=20=20=20=20caused=20the=20run("Point=20T?= =?UTF-8?q?ool...",options)=20macro=20function=20to=20no=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20longer=20work.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Michael=20Schmid,=20fixed=20a=201.52q=20regression=20th?= =?UTF-8?q?at=20caused=20=20=20=20=20=20=20=20=20duplicate=20recordinging?= =?UTF-8?q?=20of=20non-blocking=20dialogs.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Dorai=20Iyer,=20fixed=20a=201.52s=20regression?= =?UTF-8?q?=20that=20caused=20=20=20=20=20=20=20=20=20characters=20entered?= =?UTF-8?q?=20using=20the=20text=20tool=20to=20sometimes=20be=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20repeated.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Rodrigo=20Goncalves=20and=20Curtis=20Rueden,=20fixed=20?= =?UTF-8?q?a=201.52q=20=20=20=20=20=20=20=20=20regression=20that=20caused?= =?UTF-8?q?=20the=20"Movie=20(FFMPEG)"=20plugin=20to=20throw=20a=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20NullPointerException.=20=20=20=E2=80=A2=201.5?= =?UTF-8?q?2s=2010=20December=202019=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20'LPUoO',=20added=20the=20Plugins>Utilities>Commands=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20command,=20which=20opens=20a=20list=20o?= =?UTF-8?q?f=20commonly=20and=20recently=20used=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?commands.=20=20=20=20=20=20=20=E2=96=A1=20By=20default,=20image?= =?UTF-8?q?=20windows=20now=20open=20just=20below=20the=20"ImageJ"=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20window.=20=20=20=20=20=20=20=E2=96=A1=20Th?= =?UTF-8?q?anks=20to=20Norbert=20Vischer,=20adding=20an=20exclamation=20ma?= =?UTF-8?q?rk=20to=20=20=20=20=20=20=20=20=20showStatus()=20messages=20avo?= =?UTF-8?q?ids=20status=20bar=20flicker=20(example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20the=20Process>Fil?= =?UTF-8?q?ters>Convolve=20dialog=20=20=20=20=20=20=20=20=20displays=20fee?= =?UTF-8?q?dback=20on=20the=20kernel=20as=20it=20is=20modified.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Added=20the=20Macros>Set=20as=20Repeat?= =?UTF-8?q?=20Command=20command=20to=20the=20macro=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20editor.=20After=20running=20this=20command,=20the=20selected?= =?UTF-8?q?=20macro=20code=20=20=20=20=20=20=20=20=20will=20run=20each=20t?= =?UTF-8?q?ime=20you=20press=20'r',=20the=20shortcut=20for=20the=20Process?= =?UTF-8?q?>=20=20=20=20=20=20=20=20=20Repeat=20Command=20command.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20a?= =?UTF-8?q?dded=20a=20"Splash=20Screen"=20code=20choice=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20to=20the=20Edit>Options>Startup=20dialog.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Changed=20the=20shortcut=20for=20Process>R?= =?UTF-8?q?epeat=20Command=20to=20'r'=20and=20the=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20shortcut=20for=20File>Revert=20to=20shift-r.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Added=20a=20"Reuse=20'FFT=20of...'=20window"?= =?UTF-8?q?=20option=20to=20the=20Process>FFT>=20=20=20=20=20=20=20=20=20F?= =?UTF-8?q?FT=20Options=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Peter=20Haub,=20chroma=20subsampling=20is=20disabled=20?= =?UTF-8?q?when=20=20=20=20=20=20=20=20=20saving=20in=20JPEG=20format=20if?= =?UTF-8?q?=20the=20Quality=20setting=20(Edit>Options>=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Input/Output)=20is=2090=20or=20higher,=20resulting=20i?= =?UTF-8?q?n=20higher=20quality=20=20=20=20=20=20=20=20=20images=20but=20l?= =?UTF-8?q?arger=20file=20sizes.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20Karen=20Collins,=20improved=20the=20FITS=20Writer.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Added=20the=20Help>Examples>JavaScri?= =?UTF-8?q?pt>JPEG=20Quality=20Plot=20example.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Removed=20the=20obsolete=20"Draw=20grid=20lines"=20?= =?UTF-8?q?option=20from=20the=20Edit>=20=20=20=20=20=20=20=20=20Options>P?= =?UTF-8?q?lot=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Mic?= =?UTF-8?q?hael=20Schmid,=20the=20ImagePlus.updateAndDraw()=20method=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20adds=20a=20scroll=20bar=20to=20the=20image?= =?UTF-8?q?=20window=20if=20the=20stack=20size=20has=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20changed=20to=20greater=20than=20one.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20added=20the=20File.?= =?UTF-8?q?getDefaultDir,=20=20=20=20=20=20=20=20=20File.setDefaultDir(pat?= =?UTF-8?q?h),=20String.trim(string)=20and=20String.join=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20(array)=20macro=20functions.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Peter=20Haub,=20added=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20JpegWriter.disableChromaSubsampling()=20metho?= =?UTF-8?q?d=20(example=20script).=20=20=20=20=20=20=20=E2=96=A1=20Added?= =?UTF-8?q?=20the=20ImageProcessor.setFontSize()=20and=20Plot.setFontSize(?= =?UTF-8?q?)=20=20=20=20=20=20=20=20=20methods.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'kefe'=20and=20Herbie,=20fixed=20a=20?= =?UTF-8?q?bug=20that=20caused=20the=20Stack=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20Images=20command=20to=20use=20slice=20labels=20as=20image=20?= =?UTF-8?q?titles=20even=20when=20=20=20=20=20=20=20=20=20they=20contained?= =?UTF-8?q?=20"/",=20"\"=20or=20":"=20characters.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'sudgy'=20and=20Jan=20Eglinger,=20fix?= =?UTF-8?q?ed=20a=20bug=20the=20caused=20=20=20=20=20=20=20=20=20iteration?= =?UTF-8?q?=20over=20the=20points=20contained=20in=20an=20ROI=20to=20throw?= =?UTF-8?q?=20an=20=20=20=20=20=20=20=20=20exception=20for=20rectangular?= =?UTF-8?q?=20ROIs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert?= =?UTF-8?q?=20Vischer,=20fixed=20a=20bug=20that=20caused=20the=20options?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20dialogs=20for=20the=20Rounded=20Rect?= =?UTF-8?q?angle,=20Multi-point=20and=20Arrow=20tools=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20to=20generate=20"Duplicate=20keyword"=20errors=20when=20t?= =?UTF-8?q?he=20Recorder=20was=20=20=20=20=20=20=20=20=20running.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Peter=20Haub,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20caused=20the=20Image=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?Calculator=20to=20not=20work=20as=20expected=20with=20RGB=20ima?= =?UTF-8?q?ges=20when=20using=20=20=20=20=20=20=20=20=20the=20"Difference"?= =?UTF-8?q?=20operator=20and=20the=20"32-bit=20(float)=20result"=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20option=20was=20enabled.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20the=20"Font=20siz?= =?UTF-8?q?e"=20setting=20in=20the=20Edit>=20=20=20=20=20=20=20=20=20Optio?= =?UTF-8?q?ns>Plots=20dialog=20to=20be=20ignored.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20the=20run=20=20=20=20=20=20=20=20=20("Calibratio?= =?UTF-8?q?n=20Bar...",options)=20macro=20function=20to=20ignore=20calls?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20to=20setOption("AntialiasedText",boo?= =?UTF-8?q?lean).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20go=20Sethur,=20?= =?UTF-8?q?worked=20around=20a=20Windows=2010=20and=20OpenJDK=20bug=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20that=20caused=20the=20"thumb"=20on=20scrol?= =?UTF-8?q?lbars=20to=20be=20hard=20to=20see.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20the=20Analyze>Set=20=20=20=20=20=20=20=20=20Scal?= =?UTF-8?q?e=20command=20to=20not=20be=20correctly=20recorded.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Sethur,=20fixed=20a=20bug=20?= =?UTF-8?q?that=20caused=20the=20Image>Stacks>=20=20=20=20=20=20=20=20=20T?= =?UTF-8?q?ools>Substack=20Maker=20command=20to=20not=20carry=20over=20the?= =?UTF-8?q?=20calibration=20=20=20=20=20=20=20=20=20of=20hyperstacks.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Sethur,=20fixed=20b?= =?UTF-8?q?ugs=20that=20caused=20the=20DICOM=20reader=20to=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20not=20correctly=20open=20multi-frame=20DICOMs,=20an?= =?UTF-8?q?d=2016-bit=20signed=20=20=20=20=20=20=20=20=20DICOMs,=20with=20?= =?UTF-8?q?RescaleSlope=3D1=20and=20RescaleIntercept!=3D0.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20m?= =?UTF-8?q?acro=20interpreter=20bug=20that=20=20=20=20=20=20=20=20=20preve?= =?UTF-8?q?nted=20array=20functions=20like=20newArray()=20and=20split()=20?= =?UTF-8?q?from=20=20=20=20=20=20=20=20=20being=20used=20as=20arguments=20?= =?UTF-8?q?to=20user-defined=20functions.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20the=20Window=20menu=20=20=20=20=20=20=20=20=20to=20not=20be?= =?UTF-8?q?=20updated=20when=20saving=20a=20table.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20the=20Image>=20=20=20=20=20=20=20=20=20Transform?= =?UTF-8?q?>Translate=20command=20to=20ignore=20overlays.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20b?= =?UTF-8?q?ug=20that=20caused=20right=20justified=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20text=20in=20overlays=20to=20not=20be=20translated=20correctl?= =?UTF-8?q?y.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik?= =?UTF-8?q?,=20worked=20around=20a=20Java=20bug=20that=20caused=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20the=20OpenDialog.setDefaultDirectory(path)=20?= =?UTF-8?q?method=20to=20sometimes=20=20=20=20=20=20=20=20=20not=20work=20?= =?UTF-8?q?as=20expected=20on=20Windows=20when=20the=20path=20used=20"/"?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20separators.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20macros=20calling=20=20=20=20=20=20=20=20=20open(?= =?UTF-8?q?"")=20to=20not=20be=20aborted=20when=20the=20user=20clicked=20"?= =?UTF-8?q?Cancel"=20in=20=20=20=20=20=20=20=20=20the=20file=20open=20dial?= =?UTF-8?q?og=20and=20"Use=20JFileChooser=20to=20open/save"=20was=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20enabled=20in=20the=20Edit>Options>Input/Outpu?= =?UTF-8?q?t=20dialog=20box.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Nicolas=20De=20Francesco,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Process>FFT>Custom=20Filter=20to=20o?= =?UTF-8?q?nly=20process=20the=20current=20stack=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20slice=20even=20though=20"Process=20entire=20stack"=20was=20c?= =?UTF-8?q?hecked=20in=20the=20=20=20=20=20=20=20=20=20dialog=20box.=20=20?= =?UTF-8?q?=20=E2=80=A2=201.52r=2026=20October=202019=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Plot=20enhancements,=20thanks=20to=20Michael=20Schm?= =?UTF-8?q?id:=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20The=20More>>=20?= =?UTF-8?q?menus=20have=20immediate=20preview.=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=98=86=20New=20More>>Use=20Template=20menu=20(also=20w?= =?UTF-8?q?ith=20immediate=20preview),=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20useful=20for=20creating=20plots=20with=20the=20same=20style.?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Clicking=20into=20?= =?UTF-8?q?a=20rectangular=20area=20next=20to=20an=20axis=20shows=20the=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20corresponding=20axis=20dial?= =?UTF-8?q?og.=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20When=20adding?= =?UTF-8?q?=20a=20curve=20to=20a=20"Live"=20plot,=20it=20remains=20when=20?= =?UTF-8?q?the=20=20=20=20=20=20=20=20=20=20=20=20=20plot=20is=20updated.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jan=20Eglinger,?= =?UTF-8?q?=20saving=20TIFF=20images=20and=20stacks=20to=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20network=20drives=20is=20up=20to=2010=20times=20faster.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Marcel=20Boeglin?= =?UTF-8?q?,=20the=20title=20of=20the=20selection=20list=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20created=20by=20Image>Overlay>List=20Elements=20include?= =?UTF-8?q?s=20the=20image=20name.=20=20=20=20=20=20=20=20=20And,=20when?= =?UTF-8?q?=20you=20double=20click=20on=20a=20line,=20the=20image=20associ?= =?UTF-8?q?ated=20with=20=20=20=20=20=20=20=20=20the=20list=20is=20activat?= =?UTF-8?q?ed,=20the=20corresponding=20selection=20is=20activated=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20and=20stacks=20are=20set=20to=20the=20selecti?= =?UTF-8?q?on=20position.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Mi?= =?UTF-8?q?chael=20Schmid,=20Process>Filters>Gaussian=20Blur=20now=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20uses=20a=20Thread=20Pool,=20reducing=20ove?= =?UTF-8?q?rhead=20and=20making=20it=20faster=20for=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20small=20images.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20?= =?UTF-8?q?to=20Stein=20Rorvik,=20you=20can=20now=20separately=20view=20an?= =?UTF-8?q?d=20set=20the=20=20=20=20=20=20=20=20=20X,=20Y=20and=20Z=20dime?= =?UTF-8?q?nsion=20units=20in=20the=20Image>Properties=20dialog=20box.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ryan=20Siu,=20the?= =?UTF-8?q?=20double=20click=20interval=20used=20to=20complete=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20a=20polygon=20selection=20is=20reduced=20from=20?= =?UTF-8?q?500ms=20to=20250ms=20and=20a=20=20=20=20=20=20=20=20=20confirma?= =?UTF-8?q?tion=20dialog=20is=20displayed=20when=20completing=20the=20sele?= =?UTF-8?q?ction=20=20=20=20=20=20=20=20=20and=20there=20are=20more=20than?= =?UTF-8?q?=2025=20points.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20S?= =?UTF-8?q?tein=20Rorvik,=20the=20slider=20in=20the=20Image>Transform>=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Rotate=20dialog=20now=20shows=20the=20a?= =?UTF-8?q?ngle=20using=20two=20decimal=20places=20and=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20the=20slider=20arrows=20increment/decrement=20by=200.1?= =?UTF-8?q?=20degrees.=20Use=20the=20=20=20=20=20=20=20=20=20keyboard=20ar?= =?UTF-8?q?row=20keys=20as=20a=20shortcut=20to=20finely=20adjust=20the=20a?= =?UTF-8?q?ngle.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'felix.b',?= =?UTF-8?q?=20labels=20of=20multi-point=20tool=20markers=20get=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20larger=20as=20the=20markers=20get=20larger=20and?= =?UTF-8?q?=20there=20are=20two=20new=20marker=20=20=20=20=20=20=20=20=20s?= =?UTF-8?q?izes=20("XXL"=20and=20"XXXL").=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Stein=20Rorvik,=20the=20Image>Adjust>Coordinates?= =?UTF-8?q?=20command=20=20=20=20=20=20=20=20=20can=20now=20be=20used=20to?= =?UTF-8?q?=20set=20the=20Z=20unit.=20=20=20=20=20=20=20=E2=96=A1=20Generi?= =?UTF-8?q?cDialogs=20display=20an=20error=20message=20if=20show()=20is=20?= =?UTF-8?q?called=20=20=20=20=20=20=20=20=20instead=20of=20showDialog().?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20getDir("download?= =?UTF-8?q?s")=20macro=20function=20and=20the=20IJ.getDir=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20("downloads")=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20added=20the=20Roi.g?= =?UTF-8?q?etPosition=20=20=20=20=20=20=20=20=20(channel,slice,frame),=20R?= =?UTF-8?q?oi.setPosition(channel,slice,frame),=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?Stack.setXUnit(),=20Stack.setYUnit(),=20Stack.setUnits=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20(x,y,z,time,value),=20Stack.getOrthoViews(x,y?= =?UTF-8?q?,z),=20=20=20=20=20=20=20=20=20Stack.getOrthoViewsIDs(xy,yz,xz)?= =?UTF-8?q?,=20File.getDirectory(path)=20and=20=20=20=20=20=20=20=20=20Fil?= =?UTF-8?q?e.getNameWithoutExtension(path)=20macro=20functions.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Leroy=20Olivier,=20added?= =?UTF-8?q?=20the=20Stack.getPointPosition=20=20=20=20=20=20=20=20=20(inde?= =?UTF-8?q?x)=20macro=20function.=20=20=20=20=20=20=20=E2=96=A1=20Added=20?= =?UTF-8?q?the=20IJ.openAsByteBuffer()=20method=20(example).=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed=20?= =?UTF-8?q?a=20bug=20that=20caused=20the=20getInfo=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20("window.title")=20macro=20function=20to=20not=20work=20as?= =?UTF-8?q?=20expected=20after=20=20=20=20=20=20=20=20=20opening=20a=20lar?= =?UTF-8?q?ge=20text=20file=20using=20open("/path/to/largeFile.txt").=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20f?= =?UTF-8?q?ixed=20a=20bug=20that=20caused=20min/max=20values=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20of=20calibrated=2016-bit=20images=20to=20be=20sh?= =?UTF-8?q?own=20without=20decimals=20in=20the=20=20=20=20=20=20=20=20=20"?= =?UTF-8?q?B&C"=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20De?= =?UTF-8?q?borah=20Schmidt,=20fixed=20a=20bug=20that=20caused=20Fiji=20use?= =?UTF-8?q?rs=20=20=20=20=20=20=20=20=20to=20not=20be=20able=20to=20update?= =?UTF-8?q?=20via=20HTTPS=20through=20a=20proxy.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Worked=20around=20a=20macOS=20bug=20that=20caused?= =?UTF-8?q?=20the=20keyboard=20arrow=20keys=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20not=20function=20as=20shortcuts=20for=20the=20increment/decr?= =?UTF-8?q?ement=20arrows=20=20=20=20=20=20=20=20=20in=20GenericDialog=20s?= =?UTF-8?q?liders.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Marcel=20?= =?UTF-8?q?Boeglin,=20fixed=20a=20bug=20that=20could=20cause=20the=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20particle=20analyzer=20to=20throw=20an=20ex?= =?UTF-8?q?ception=20when=20creating=20an=20=20=20=20=20=20=20=20=20overla?= =?UTF-8?q?y=20and=20no=20particles=20were=20detected.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Noreen=20Walker,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20image=20type=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20to=20unexpectadly=20to=20change=20to=20COLOR=5F256=20when=20?= =?UTF-8?q?using=20the=20"glasbey"=20=20=20=20=20=20=20=20=20LUT.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20'mountain=5Fman',=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20images=20to=20not=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20be=20displayed=20correctly=20if=20a=20LUT=20was=20a?= =?UTF-8?q?pplied=20before=20the=20image=20=20=20=20=20=20=20=20=20was=20s?= =?UTF-8?q?hown.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'mountain?= =?UTF-8?q?=5Fman',=20fixed=20a=20bug=20that=20caused=208-bit=20PNG=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20images=20with=20LUTs=20to=20open=20as=20ty?= =?UTF-8?q?pe=20COLOR=5F256.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Jan=20Brocher,=20fixed=20a=20bug=20that=20caused=20the=20Edi?= =?UTF-8?q?t>=20=20=20=20=20=20=20=20=20Selection>Create=20Selection=20com?= =?UTF-8?q?mand=20to=20ignore=20the=20"Black=20=20=20=20=20=20=20=20=20bac?= =?UTF-8?q?kground"=20setting=20with=20non-thresholded=20binary=20images.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'mountain=5Fman'?= =?UTF-8?q?,=20fixed=20a=20bug=20that=20caused=20ImageJ=20to=20not=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20be=20be=20able=20to=20open=20TIFF=20files?= =?UTF-8?q?=20saved=20without=20a=20file=20path.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Birgit=20Moeller,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20"Label"=20=20=20=20=20=20=20=20=20colu?= =?UTF-8?q?mn=20to=20not=20be=20sorted=20when=20using=20the=20"Sort"=20com?= =?UTF-8?q?mand=20in=20=20=20=20=20=20=20=20=20Results=20tables.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20lguerard=20and=20mountain?= =?UTF-8?q?=5Fman,=20fixed=20a=20bug=20that=20caused=20an=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20ROI's=20hyperstack=20position=20to=20be=20lost=20wh?= =?UTF-8?q?en=20adding=20it=20to=20the=20=20=20=20=20=20=20=20=20RoiManage?= =?UTF-8?q?r.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Philippe=20Car?= =?UTF-8?q?l=20and=20Michael=20Schmid,=20fixed=20a=20bug=20that=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20caused=20OvalRoi.getMask()=20to=20sometimes?= =?UTF-8?q?=20return=20a=20zero-width=20mask.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Francois=20Gannier=20and=20Michael=20?= =?UTF-8?q?Schmid,=20fixed=20a=201.52o=20=20=20=20=20=20=20=20=20regressio?= =?UTF-8?q?n=20that=20caused=20the=20"Log"=20window=20to=20unexpectedly=20?= =?UTF-8?q?become=20=20=20=20=20=20=20=20=20the=20active=20window.=20=20?= =?UTF-8?q?=20=E2=80=A2=201.52q=2013=20September=202019=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20added=20the=20?= =?UTF-8?q?"Non-blocking=20filter=20=20=20=20=20=20=20=20=20dialogs"=20opt?= =?UTF-8?q?ion=20to=20Edit>Options>Misc.=20The=20Convolve,=20Mean,=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20Median,=20Minimum,=20Maximum,=20Variance?= =?UTF-8?q?=20and=20Image>Math=20commands=20use=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?NonBlockingGenericDialogs=20when=20this=20option=20is=20enabled?= =?UTF-8?q?.=20=20=20=20=20=20=20=E2=96=A1=20"Save=20changes=3F"=20dialogs?= =?UTF-8?q?=20on=20Windows=20and=20Linux=20now=20use=20"Don't=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Save",=20"Cancel"=20and=20"Save"=20buttons.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbret=20Vischer,?= =?UTF-8?q?=20added=20the=20Dialog.addMessage=20=20=20=20=20=20=20=20=20(s?= =?UTF-8?q?tring,fontSize,fontColor)=20macro=20function=20(example).=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Noreen=20Walker,=20the?= =?UTF-8?q?=20Image>Stacks>Statistics=20command=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?and=20the=20StackStatistics=20class=20now=20calculate=20the=20m?= =?UTF-8?q?edian=20of=20=20=20=20=20=20=20=20=20non-float=20images.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Drag=20and=20drop=20opening=20of=20i?= =?UTF-8?q?mages,=20tables=20and=20LUTs=20is=20recorded.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20added=20the=20?= =?UTF-8?q?Plot.showValuesWithLabels()=20=20=20=20=20=20=20=20=20macro=20f?= =?UTF-8?q?unction=20and=20the=20Plot.getResultsTableWithLabels()=20method?= =?UTF-8?q?.=20=20=20=20=20=20=20=20=20Both=20create=20tables=20that=20use?= =?UTF-8?q?=20legend=20labels=20and/or=20axis=20labels=20as=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20column=20headings.=20The=20List,=20Save=20Data=20an?= =?UTF-8?q?d=20Copy=20All=20Data=20plot=20=20=20=20=20=20=20=20=20window?= =?UTF-8?q?=20commands=20also=20now=20use=20labels.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20added=20the=20ge?= =?UTF-8?q?tValue("Length")=20macro=20=20=20=20=20=20=20=20=20function.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,?= =?UTF-8?q?=20added=20the=20IJ.pad(string,digits)=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20macro=20function=20and=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20the=20ImagePlus?= =?UTF-8?q?=20lock()=20and=20unlock()=20=20=20=20=20=20=20=20=20methods=20?= =?UTF-8?q?now=20support=20multiple=20lock/unlock=20operations=20by=20the?= =?UTF-8?q?=20same=20=20=20=20=20=20=20=20=20thread.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20IJ.getValue(imp,measurement)=20method?= =?UTF-8?q?,=20where=20=20=20=20=20=20=20=20=20'measurement'=20is=20"Area"?= =?UTF-8?q?,=20"Mean",=20"StdDev",=20etc.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20File>Import>=20=20=20=20=20=20=20=20=20Image=20Sequence=20to?= =?UTF-8?q?=20not=20correctly=20handle=20RGB48=20images=20when=20"Use=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20virtual=20stack"=20was=20enabled.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fran=C3=A7ois=20Gannie?= =?UTF-8?q?r,=20fixed=20a=20bug=20that=20caused=20the=20unit=20to=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20not=20be=20set=20when=20"Function:"=20was=20s?= =?UTF-8?q?et=20to=20"None"=20in=20the=20Analyze>=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20Calibrate=20dialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20'Matthew',=20fixed=20bugs=20that=20cause=20the=20Table.?= =?UTF-8?q?deleteRows=20=20=20=20=20=20=20=20=20()=20macro=20function=20an?= =?UTF-8?q?d=20IJ.deleteRows()=20method=20to=20not=20update=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20particle=20analyzer=20overlays.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixed=20bugs?= =?UTF-8?q?=20that=20caused=20tables=20with=20=20=20=20=20=20=20=20=20miss?= =?UTF-8?q?ing=20columns=20or=20rows=20to=20not=20be=20opened=20correctly.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Sara=20Vecchio?= =?UTF-8?q?=20and=20Michael=20Schmid,=20fixed=20a=20bug=20that=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20caussed=20the=20curve=20fitter=20to=20throw=20an?= =?UTF-8?q?=20exception=20if=20all=20data=20=20=20=20=20=20=20=20=20points?= =?UTF-8?q?=20contained=20NaNs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20t?= =?UTF-8?q?o=20Robert=20Haase,=20fixed=20a=20bug=20that=20caused=20the=20P?= =?UTF-8?q?rocess>=20=20=20=20=20=20=20=20=20Find=20Maxima=20to=20throw=20?= =?UTF-8?q?an=20exception=20in=20Fiji=20headless=20mode.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Stephen=20Royle,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20run=20=20=20=20=20=20=20=20=20("Fill")?= =?UTF-8?q?=20macro=20function=20to=20ignore=20setColor(pixelValue)=20call?= =?UTF-8?q?s.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'mendel',=20fi?= =?UTF-8?q?xed=20a=20bug=20that=20caused=20enlarged=20ROIs=20to=20be=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20shifted=20if=20the=20polygon=20defining=20?= =?UTF-8?q?the=20original=20ROI=20had=20points=20=20=20=20=20=20=20=20=20o?= =?UTF-8?q?utside=20the=20filled=20polygon.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bug=20that=20c?= =?UTF-8?q?ould=20cause=20ImageJ=20=20=20=20=20=20=20=20=20to=20freezes=20?= =?UTF-8?q?when=20running=20macros=20that=20manipulate=20stacks.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixe?= =?UTF-8?q?d=20a=20bug=20that=20caused=20the=20numeric=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20field=20in=20GenericDialog=20sliders=20to=20be=20too?= =?UTF-8?q?=20narrow=20when=20the=20=20=20=20=20=20=20=20=20maximum=20valu?= =?UTF-8?q?e=20was=20greater=20than=209999.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Norbert=20Vischer,=20fixed=20a=20bug=20that=20?= =?UTF-8?q?caused=20the=20getValue=20=20=20=20=20=20=20=20=20(x,y)=20macro?= =?UTF-8?q?=20function=20to=20not=20interpolate=20when=20x=20or=20y=20were?= =?UTF-8?q?=20real=20=20=20=20=20=20=20=20=20numbers.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20getPixel=20=20=20=20=20=20=20=20=20(x,?= =?UTF-8?q?y)=20macro=20function=20to=20not=20return=20raw=20pixel=20value?= =?UTF-8?q?s=20when=20x=20or=20y=20=20=20=20=20=20=20=20=20were=20real=20n?= =?UTF-8?q?umbers.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'mountain?= =?UTF-8?q?=5Fman',=20fixed=20a=20bug=20that=20caused=20line=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20selections=20to=20not=20be=20correctly=20convert?= =?UTF-8?q?ed=20to=20ShapeRois.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20t?= =?UTF-8?q?o=20Jeremy=20Adler,=20fixed=20a=20regression=20that=20caused=20?= =?UTF-8?q?the=20the=20=20=20=20=20=20=20=20=20makeSelection(10,=20xpoints?= =?UTF-8?q?,=20ypoints)=20macro=20function=20to=20throw=20an=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20exception.=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20Dan=20McDonald,=20fixed=20a=20regression=20that=20caus?= =?UTF-8?q?ed=20the=20Raw=20=20=20=20=20=20=20=20=20File=20Opener=20to=20t?= =?UTF-8?q?hrow=20an=20exception.=20=20=20=20=20=20=20=E2=96=A1=20Fixed=20?= =?UTF-8?q?a=201.52a=20regression=20that=20caused=20tables=20created=20by?= =?UTF-8?q?=20the=20gel=20=20=20=20=20=20=20=20=20analyzer=20to=20not=20ha?= =?UTF-8?q?ve=20row=20numbers.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Hyung-song=20Nam=20and=20Curtis=20Rueden,=20fixed=20a=201.52?= =?UTF-8?q?o=20=20=20=20=20=20=20=20=20regression=20that=20caused=20the=20?= =?UTF-8?q?Channels=20tool=20on=20macOS=20to=20become=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20unresponsive.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Florian=20Jug,=20fixed=20a=201.52o=20regression=20that=20cau?= =?UTF-8?q?sed=20the=20=20=20=20=20=20=20=20=20"Auto"=20button=20in=20the?= =?UTF-8?q?=20"B&C"=20tool=20to=20not=20have=20focus=20on=20macOS.=20=20?= =?UTF-8?q?=20=E2=80=A2=201.52p=2022=20June=202019=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Uwe=20Schmidt,=20improved=20the=20sup?= =?UTF-8?q?port=20for=20multiple=20screen=20=20=20=20=20=20=20=20=20setups?= =?UTF-8?q?:=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Placement=20of=20?= =?UTF-8?q?first=20image=20window=20is=20more=20predictable.=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=98=86=20Reliably=20determine=20the=20c?= =?UTF-8?q?orrect=20screen=20for=20a=20given=20location=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20or=20window,=20for=20example=20to=20determ?= =?UTF-8?q?ine=20if=20a=20window=20can=20be=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20enlarged.=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20?= =?UTF-8?q?If=20there=20is=20ambiguity=20about=20which=20screen=20to=20use?= =?UTF-8?q?,=20the=20one=20=20=20=20=20=20=20=20=20=20=20=20=20that=20cont?= =?UTF-8?q?ains=20the=20main=20ImageJ=20window=20will=20be=20chosen.=20For?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20example=20Plugins>Utilit?= =?UTF-8?q?ies>Capture=20Screen=20and=20Windows>Tile=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20use=20the=20screen=20with=20the=20main=20Imag?= =?UTF-8?q?eJ=20window.=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Dialog?= =?UTF-8?q?s=20are=20shown=20on=20the=20screen=20containing=20the=20main?= =?UTF-8?q?=20ImageJ=20=20=20=20=20=20=20=20=20=20=20=20=20window.=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=E2=98=86=20Maximized=20image=20wind?= =?UTF-8?q?ows=20no=20longer=20revert=20to=20the=20main=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20screen.=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=98=86=20Improved=20behavior=20of=20"+"=20(Image>Zoom>In)=20?= =?UTF-8?q?command.=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Code=20sim?= =?UTF-8?q?plification,=20especially=20by=20removing=20special=20cases=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20for=20Linux.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20ImageJ=20displays=20a=20warning=20dialog=20be?= =?UTF-8?q?fore=20deleting=20a=20multi-point=20=20=20=20=20=20=20=20=20sel?= =?UTF-8?q?ection.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'alex',?= =?UTF-8?q?=20the=20FITS=20Reader=20no=20longer=20flips=20images=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20vertically=20so=20inspection=20of=20pixels=20?= =?UTF-8?q?will=20produce=20the=20expected=20=20=20=20=20=20=20=20=20value?= =?UTF-8?q?s.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutte?= =?UTF-8?q?rer,=20added=20the=20getValue(measurement)=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20macro=20function,=20where=20'measurement'=20is=20"Mean",?= =?UTF-8?q?=20"Median",=20=20=20=20=20=20=20=20=20"Feret",=20etc.=20(examp?= =?UTF-8?q?le).=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20getValue(x,y?= =?UTF-8?q?)=20macro=20function=20and=20the=20=20=20=20=20=20=20=20=20Imag?= =?UTF-8?q?eProcessor.getValue(x,y)=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20"Herbie",=20restored=20macro=20suppor?= =?UTF-8?q?t=20for=20the=20"lightGray",=20=20=20=20=20=20=20=20=20"darkGra?= =?UTF-8?q?y"=20and=20"pink"=20named=20colors.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Somsubhro=20Chaudhuri,=20added=20the?= =?UTF-8?q?=20getValue=20=20=20=20=20=20=20=20=20("selection.angle")=20mac?= =?UTF-8?q?ro=20function=20and=20the=20Rotator.getAngle()=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20method.=20=20=20=20=20=20=20=E2=96=A1=20Added=20the?= =?UTF-8?q?=20getValue("selection.size")=20macro=20function.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Added=20the=20setOption("CopyHeadings",boo?= =?UTF-8?q?lean)=20macro=20function.=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20Stein=20Rorvik,=20added=20the=20Roi.setAntiAlias(boole?= =?UTF-8?q?an)=20=20=20=20=20=20=20=20=20macro=20function,=20which=20can?= =?UTF-8?q?=20be=20used=20to=20control=20antialiasing=20when=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20drawing=20selections=20(example).=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20'MLdish',=20added=20the=20Parti?= =?UTF-8?q?cleAnalyzer.setSummaryTable=20=20=20=20=20=20=20=20=20()=20meth?= =?UTF-8?q?od=20(JavaScript=20example).=20=20=20=20=20=20=20=E2=96=A1=20Th?= =?UTF-8?q?anks=20to=20Wilhelm=20Burger,=20added=20the=20Menus.add(menuPat?= =?UTF-8?q?h,class)=20=20=20=20=20=20=20=20=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Philippe=20Carl,=20added=20the=20RoiM?= =?UTF-8?q?anager.getErrorMessage()=20=20=20=20=20=20=20=20=20method.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20Thomas,?= =?UTF-8?q?=20updated=20the=20Javadoc=20of=20the=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20MaximumFinder.getMaxima()=20methods=20to=20make=20it=20clear?= =?UTF-8?q?er=20that=20the=20=20=20=20=20=20=20=20=20npoints=20variable=20?= =?UTF-8?q?of=20the=20returned=20Polygon=20is=20the=20number=20of=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20maxima=20found,=20not=20the=20length=20of=20t?= =?UTF-8?q?he=20xpoints=20variable.=20=20=20=20=20=20=20=E2=96=A1=20Made?= =?UTF-8?q?=20the=20Toolbar.builtInTools=20array=20public.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Mikael=20Eriksson,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20caused=20the=20particle=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20analyzer's=20"Summary"=20table=20to=20not=20be=20accessible?= =?UTF-8?q?=20in=20macros=20run=20=20=20=20=20=20=20=20=20from=20the=20com?= =?UTF-8?q?mand=20line=20using=20the=20-batch=20option.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Andrew=20Clark,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20Edit>Undo=20to=20=20=20=20=20=20=20=20=20del?= =?UTF-8?q?ete=20all=20stack=20slices=20except=20the=20current=20one=20aft?= =?UTF-8?q?er=20using=20the=20=20=20=20=20=20=20=20=20flood=20fill=20tool.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'Nhthayer',=20fi?= =?UTF-8?q?xed=20a=20bug=20that=20caused=20imageJ=20to=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20incorrectly=20read=20TIFF=20stacks=20created=20by=20th?= =?UTF-8?q?e=20Python=20tifffile=20=20=20=20=20=20=20=20=20package=20when?= =?UTF-8?q?=20the=20"imagej=3DTrue"=20option=20was=20used.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Marcel=20Boeglin,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20caused=20the=20Image>=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20Adjust>Size=20command=20to=20throw=20on=20exception=20with?= =?UTF-8?q?=20XYCT=20=20=20=20=20=20=20=20=20hyperstacks.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Francisco=20Romanos,=20fixed=20?= =?UTF-8?q?a=20bug=20that=20caused=20the=20run=20=20=20=20=20=20=20=20=20(?= =?UTF-8?q?"Scale...",options)=20macro=20function=20to=20ignore=20the=20'i?= =?UTF-8?q?nterpolate'=20=20=20=20=20=20=20=20=20options=20keyword.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Glen=20MacDonald=20and?= =?UTF-8?q?=20Curtis=20Rueden,=20fixed=20a=20bug=20that=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20sometimes=20caused=20macros=20in=20the=20"More=20Tools?= =?UTF-8?q?"=20(>>)=20menu=20to=20be=20=20=20=20=20=20=20=20=20sorted=20ra?= =?UTF-8?q?ndomly.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Philippe?= =?UTF-8?q?=20Carl,=20fixed=20a=20bug=20that=20caused=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20ImagePlus.getStatistic()=20and=20ImageProcessor.getStatis?= =?UTF-8?q?tic()=20to=20=20=20=20=20=20=20=20=20not=20treat=20one=20point?= =?UTF-8?q?=20selections=20the=20same=20way.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Andrew=20Sonnier,=20fixed=20a=20bug=20that=20c?= =?UTF-8?q?aused=20the=20particle=20=20=20=20=20=20=20=20=20analyzer=20to?= =?UTF-8?q?=20not=20be=20recorded=20if=20the=20"In=20situ"=20option=20was?= =?UTF-8?q?=20used.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Mikael?= =?UTF-8?q?=20Eriksson,=20fixed=20a=20bug=20that=20caused=20the=20run=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20(=E2=80=9CColors=E2=80=A6=E2=80=9D,opti?= =?UTF-8?q?ons)=20macro=20function=20to=20throw=20an=20exception=20when=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20called=20from=20a=20-batch=20command=20?= =?UTF-8?q?line=20macro.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ste?= =?UTF-8?q?in=20Rorvik,=20fixed=20a=20bug=20that=20caused=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Overlay.drawLine()=20macro=20function=20to=20?= =?UTF-8?q?not=20work=20correctly=20when=20=20=20=20=20=20=20=20=20used=20?= =?UTF-8?q?in=20conjuction=20with=20Overlay.setColor()=20and/or=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Overlay.setPosition().=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20'Niederle',=20worked=20around=20a=20b?= =?UTF-8?q?ug=20that=20caused=20the=20run=20=20=20=20=20=20=20=20=20("Gamm?= =?UTF-8?q?a...",=20"value=3Dx.xx")=20macro=20function=20to=20fail=20in=20?= =?UTF-8?q?Fiji=20=20=20=20=20=20=20=20=20headless=20mode.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20'fieryice12',=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20=20=20=20=20=20=20=20=20Plot.showValue?= =?UTF-8?q?s=20macro=20function=20to=20fail=20in=20batch=20mode.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20NorbertVischer,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20the=20Image>=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Duplicate=20command=20to=20throw=20on=20exception=20if=20?= =?UTF-8?q?the=20ROI=20was=20outside=20=20=20=20=20=20=20=20=20the=20image?= =?UTF-8?q?.=20=20=20=E2=80=A2=201.52o=2023=20April=202019=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Added=20the=20Help>Examples>Macro>Curve=20Fit?= =?UTF-8?q?ting=20and=20Help>Examples>=20=20=20=20=20=20=20=20=20JavaScrip?= =?UTF-8?q?t>Curve=20Fitting=20examples.=20=20=20=20=20=20=20=E2=96=A1=20T?= =?UTF-8?q?hanks=20to=20Tiago=20Ferreira,=20stack=20and=20hyperstack=20scr?= =?UTF-8?q?ollbars=20now=20=20=20=20=20=20=20=20=20apply=20the=20Edit>Opti?= =?UTF-8?q?ons>Appearance=20"GUI=20scale".=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20'mountain=5Fman',=20tables=20can=20be=20sorted?= =?UTF-8?q?=20alphabetically.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Neil=20Switz,=20the=20Process>FFT>Inverse=20FFT=20command=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20displays=20a=20warning=20message=20if?= =?UTF-8?q?=20the=20"FFT=20of=20..."=20image=20has=20been=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20modified=20but=20no=20pixels=20have=20been=20set=20?= =?UTF-8?q?to=200=20or=20255.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Stein=20Rorvik,=20copies=20of=20IJ=5FProps.txt=20and/or=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20IJ=5FPrefs.txt=20in=20the=20ImageJ=20fo?= =?UTF-8?q?lder=20override=20the=20corresponding=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20files=20in=20the=20default=20locations.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20the=20Table.update?= =?UTF-8?q?=20macro=20function=20is=20=20=20=20=20=20=20=20=20called=20aut?= =?UTF-8?q?omatically=20when=20a=20macro=20finsihes=20and=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Table.setSelection(),=20Table.getSelectionSta?= =?UTF-8?q?rt=20and=20=20=20=20=20=20=20=20=20Table.getSelectionEnd=20func?= =?UTF-8?q?tions=20no=20longer=20require=20that=20a=20title=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20be=20specified.=20=20=20=20=20=20=20=E2=96=A1=20Tha?= =?UTF-8?q?nks=20to=20Philippe=20Carl,=20the=20isKeyDown()=20and=20setKeyD?= =?UTF-8?q?own()=20macro=20=20=20=20=20=20=20=20=20functions=20now=20suppo?= =?UTF-8?q?rt=20the=20control=20key=20(example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20the=20setColor()=20?= =?UTF-8?q?and=20setLineWidth()=20macro=20=20=20=20=20=20=20=20=20function?= =?UTF-8?q?s=20no=20longer=20abort=20the=20macro=20if=20no=20image=20is=20?= =?UTF-8?q?open.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Sian=20Cull?= =?UTF-8?q?ey,=20removed=20"Bridge"=20and=20"Lena"=20from=20the=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20File>Open=20Samples=20menu.=20Macros=20and=20?= =?UTF-8?q?scripts=20that=20use=20these=20=20=20=20=20=20=20=20=20images?= =?UTF-8?q?=20will=20continue=20to=20work.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Stein=20Rorvik,=20the=20run("Apply=20LUT")=20m?= =?UTF-8?q?acro=20function=20no=20=20=20=20=20=20=20=20=20longer=20shows?= =?UTF-8?q?=20an=20error=20message=20with=20images=20that=20have=20a=20dis?= =?UTF-8?q?play=20=20=20=20=20=20=20=20=20range=20of=200-255.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20NorbertVischer,=20Philippe?= =?UTF-8?q?=20Carl=20and=20Stein=20Rorvik,=20added=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20the=20Array.deleteValue()=20and=20Array.deleteIndex()=20macr?= =?UTF-8?q?o=20functions=20=20=20=20=20=20=20=20=20(example).=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20added=20th?= =?UTF-8?q?e=20Table.setLocationAndSize()=20=20=20=20=20=20=20=20=20macro?= =?UTF-8?q?=20function.=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20Imag?= =?UTF-8?q?ePlus.crop(options)=20method,=20where=20'options'=20can=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20be=20can=20be=20"stack",=20"slice"=20or=20?= =?UTF-8?q?a=20range=20(e.g.,=20"20-30").=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20the=20caused?= =?UTF-8?q?=20macros=20using=20a=20=20=20=20=20=20=20=20=20function=20key?= =?UTF-8?q?=20shortcut=20to=20not=20work=20if=20the=20shift=20key=20was=20?= =?UTF-8?q?down.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Salim=20Kan?= =?UTF-8?q?oun,=20fixed=20a=20bug=20in=20the=20DICOM=20reader=20that=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20caused=20it=20to=20sometimes=20not=20corre?= =?UTF-8?q?ctly=20open=20PT=20DICOM=20stacks.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20roundin?= =?UTF-8?q?g=20error=20with=20=20=20=20=20=20=20=20=20setMinAndMax()=20on?= =?UTF-8?q?=20some=20density=20calibrated=208-bit=20images.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Fixed=20non-macro=20recording=20of=20the=20Im?= =?UTF-8?q?age>Duplicate=20command.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Norbert=20Vischer,=20fixed=20a=20bug=20that=20caused=20?= =?UTF-8?q?the=20doWand=20=20=20=20=20=20=20=20=20(x,y,tolerance,"Smooth")?= =?UTF-8?q?=20macro=20function=20to=20cause=20the=20macro=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20language's=20&var=20variable=20passing=20method=20t?= =?UTF-8?q?o=20fail.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jan=20E?= =?UTF-8?q?glinger,=20fixed=20a=20bug=20that=20caused=20log=20histogram=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20plots=20to=20be=20malformed=20if=20the?= =?UTF-8?q?=20line=20width=20was=20set=20to=20greater=20than=20=20=20=20?= =?UTF-8?q?=20=20=20=20=201.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20caused=20the=20Ta?= =?UTF-8?q?ble.title=20=20=20=20=20=20=20=20=20and=20getInfo("window.title?= =?UTF-8?q?")=20macro=20functions=20to=20sometimes=20not=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20work=20with=20custom=20tables.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20bugs=20rela?= =?UTF-8?q?ted=20to=20saving=20and=20=20=20=20=20=20=20=20=20opening=20emp?= =?UTF-8?q?ty=20tables.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norb?= =?UTF-8?q?ert=20Vischer,=20fixed=20a=20bug=20that=20caused=20the=20Mac=20?= =?UTF-8?q?menu=20=20=20=20=20=20=20=20=20bar=20to=20disappear=20when=20ac?= =?UTF-8?q?tivating=20the=20Channels,=20ColorPicker,=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20ContrastAdjuster=20and=20ThresholdAdjuster=20dialogs.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,?= =?UTF-8?q?=20fixed=20a=20bug=20that=20caused=20the=20"Save=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20changes=3F"=20dialog=20to=20not=20be=20the=20front-?= =?UTF-8?q?most=20window=20when=20quitting=20=20=20=20=20=20=20=20=20Image?= =?UTF-8?q?J.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Tihamer,=20fix?= =?UTF-8?q?ed=20a=20bug=20that=20caused=20the=20=20=20=20=20=20=20=20=20Cu?= =?UTF-8?q?rveFitter.getResultString()=20method=20to=20fail=20if=20there?= =?UTF-8?q?=20was=20a=20=20=20=20=20=20=20=20=20fitting=20error.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Ellen=20Arena,=20fixed=20?= =?UTF-8?q?1.52m=20regression=20that=20caused=20the=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Edit>Selection>Create=20Selection=20command=20to=20not=20?= =?UTF-8?q?work=20as=20expected=20=20=20=20=20=20=20=20=20with=20non-thres?= =?UTF-8?q?holded=20images.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?Laurent=20Thomas,=20fixed=20a=201.52n=20regression=20that=20cau?= =?UTF-8?q?sed=20=20=20=20=20=20=20=20=20the=20MaximumFinder.getMaxima()?= =?UTF-8?q?=20method=20to=20always=20return=200=20points.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Gabriel=20Landini,=20fixed=20a?= =?UTF-8?q?=20regression=20that=20could=20cause=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?the=20ImagePlus.setSlice()=20method=20to=20throw=20an=20excepti?= =?UTF-8?q?on.=20=20=20=E2=80=A2=201.52n=2022=20March=202019=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Ellen=20Arena,=20fixed=20a?= =?UTF-8?q?=201.52m=20regression=20that=20caused=20the=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Edit>Selection>Create=20Mask=20command=20to=20not=20pr?= =?UTF-8?q?eserve=20spatial=20=20=20=20=20=20=20=20=20calibration.=20=20?= =?UTF-8?q?=20=E2=80=A2=201.52m=2020=20March=202019=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20ROI=20improvements=20thanks=20to=20Michael=20Schmid?= =?UTF-8?q?,=20including=20more=20=20=20=20=20=20=20=20=20accurate=20Roi.c?= =?UTF-8?q?ontains,=20better=20ShapeRoi=20filling,=20improved=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20ShapeRoi.clone(),=20improved=20Roi=20Manager=20S?= =?UTF-8?q?plit,=20better=20ShapeRoi=20=20=20=20=20=20=20=20=20length=20ca?= =?UTF-8?q?lculation,=20more=20accurate=20perimeter=20for=20ovals=20and=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20rounded=20rectangles,=20more=20accurate?= =?UTF-8?q?=20MinFeret,=20removed=20point=20=20=20=20=20=20=20=20=20select?= =?UTF-8?q?ion=2032k=20slice=20limit,=20ability=20to=20press=20ESC=20to=20?= =?UTF-8?q?abort=20=20=20=20=20=20=20=20=20creation=20of=20polygonROI,=20a?= =?UTF-8?q?nd=20addition=20of=20Roi.getFeretPoints()=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20macro=20function=20(example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Tiago=20Ferreira,=20the=20"GUI=20scal?= =?UTF-8?q?e=20(0.5-3.0)"=20setting=20in=20=20=20=20=20=20=20=20=20the=20E?= =?UTF-8?q?dit>Options>Appearance=20dialog=20is=20now=20applied=20to=20alm?= =?UTF-8?q?ost=20all=20=20=20=20=20=20=20=20=20remaining=20dialogs=20and?= =?UTF-8?q?=20widgets,=20including=20the=20Histogram=20and=20Plot=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Windows=20and=20the=20Threshold=20widget.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,?= =?UTF-8?q?=20added=20the=20File>Show=20Folder=20submenu.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer=20and=20Micha?= =?UTF-8?q?el=20Schmid,=20changed=20"Noise=20=20=20=20=20=20=20=20=20Toler?= =?UTF-8?q?ance"=20to=20"Prominence"=20and=20added=20a=20"Strict"=20option?= =?UTF-8?q?=20to=20the=20=20=20=20=20=20=20=20=20Process>Find=20Maxima=20d?= =?UTF-8?q?ialog.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Hidenao=20?= =?UTF-8?q?Yamada,=20the=20File>Import>Raw=20command=20now=20uses=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20long=20instead=20of=20int=20for=20the=20gap?= =?UTF-8?q?=20between=20images.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20t?= =?UTF-8?q?o=20Stein=20Rorvik,=20Image>Stacks>Tools>Set=20Label=20and=20Im?= =?UTF-8?q?age>=20=20=20=20=20=20=20=20=20Stacks>Tools>Remove=20Slice=20La?= =?UTF-8?q?bels=20work=20with=20single=20images.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20On=20macOS,=20the=20Help>Update=20ImageJ=20command?= =?UTF-8?q?=20displays=20a=20message=20=20=20=20=20=20=20=20=20explaining?= =?UTF-8?q?=20how=20to=20work=20around=20Path=20Randomization=20if=20the?= =?UTF-8?q?=20ImageJ=20=20=20=20=20=20=20=20=20home=20directory=20is=20rea?= =?UTF-8?q?d-only=20and=20the=20file=20path=20starts=20with=20"/=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20private/var/folders/".=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Christophe=20Leterrier,=20the=20File>?= =?UTF-8?q?Import>Image=20Sequence=20=20=20=20=20=20=20=20=20command=20now?= =?UTF-8?q?=20always=20sorts=20the=20files=20names=20on=20macOS.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20The=20File>Save=20As>Image=20Sequence?= =?UTF-8?q?=20command=20saves=20single=20line=20slice=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20labels=20when=20saving=20in=20TIFF=20format.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20the=20F?= =?UTF-8?q?ile>Revert=20command=20now=20works=20=20=20=20=20=20=20=20=20wi?= =?UTF-8?q?th=20virtual=20stacks.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Alicia=20Daeden,=20the=20makeLine()=20and=20makePolygon?= =?UTF-8?q?()=20macro=20=20=20=20=20=20=20=20=20functions=20no=20longer=20?= =?UTF-8?q?have=20a=20200=20point=20limit.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Steve=20Fallows,=20File>Import>Raw=20only=20ge?= =?UTF-8?q?ts=20.raw=20file=20=20=20=20=20=20=20=20=20parameters=20from=20?= =?UTF-8?q?the=20filename=20when=20it=20uses=20'x'=20delimiters.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Gilles=20Carpentier,=20ad?= =?UTF-8?q?ded=20the=20is("line")=20and=20is=20=20=20=20=20=20=20=20=20("a?= =?UTF-8?q?rea")=20macro=20functions.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Albert=20Cardona,=20added=20the=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20ImagePlus.updateVirtualSlice()=20method.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Michael=20Kaul,=20added=20the?= =?UTF-8?q?=20Plot.update()=20method.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20'cyrilturies'=20and=20Jan=20Eglinger,=20fixed=20a=20b?= =?UTF-8?q?ug=20that=20=20=20=20=20=20=20=20=20caused=20Results=20table=20?= =?UTF-8?q?labels=20to=20not=20be=20displayed=20for=20line=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20measurements=20if=20no=20measurement=20options=20we?= =?UTF-8?q?re=20enabled=20in=20Analyze>=20=20=20=20=20=20=20=20=20Set=20Me?= =?UTF-8?q?asurements.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein?= =?UTF-8?q?=20Rorvik,=20fixed=20rounding=20errors=20in=20the=20Image>=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20Scale=20command.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20toolbar=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20be=20corrupted=20when=20opening=20an=20overlay=20containing?= =?UTF-8?q?=20multi-point=20=20=20=20=20=20=20=20=20selections.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixe?= =?UTF-8?q?d=20bugs=20that=20caused=20numerous=20"//=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20setTool()"=20statements=20to=20be=20recorded=20when=20ope?= =?UTF-8?q?ning=20ROI=20sets=20or=20=20=20=20=20=20=20=20=20overlays=20tha?= =?UTF-8?q?t=20contain=20multi-point=20selections.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20multi-point=20sel?= =?UTF-8?q?ections=20to=20lose=20their=20=20=20=20=20=20=20=20=20'pointBef?= =?UTF-8?q?oreDeleting'=20property=20when=20saved=20and=20re-opened.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fi?= =?UTF-8?q?xed=20a=20bug=20that=20caused=20Process>=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Filters>Gaussian=20Blur=20to=20not=20be=20multithread-saf?= =?UTF-8?q?e.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Robert=20Lockw?= =?UTF-8?q?ood,=20fixed=20a=20bug=20that=20caused=20the=20File>=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Save=20command=20to=20not=20be=20correctly=20?= =?UTF-8?q?recorded.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Albert?= =?UTF-8?q?=20Cardona,=20fixed=20bugs=20that=20caused=20Edit>=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Selection>Restore=20Selection,=20and=20setting?= =?UTF-8?q?=20an=20ROI=20from=20the=20ROI=20=20=20=20=20=20=20=20=20Manage?= =?UTF-8?q?r,=20to=20not=20emit=20an=20Roi=20MODIFIED=20event.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Dr-Frog=20and=20Jan=20Egling?= =?UTF-8?q?er,=20fixed=20a=20bug=20that=20caused=20the=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20ImageProcessor.fillOutside(Roi)=20method=20to=20modify?= =?UTF-8?q?=20the=20Roi=20passed=20=20=20=20=20=20=20=20=20as=20the=20argu?= =?UTF-8?q?ment.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Teresa=20Ha?= =?UTF-8?q?ider,=20fixed=20a=20bug=20that=20sometimes=20caused=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Image>Transform>Bin=20to=20not=20correctly=20dis?= =?UTF-8?q?play=20the=20output=20image.=20=20=20=20=20=20=20=E2=96=A1=20Th?= =?UTF-8?q?anks=20to=20Stein=20Rorvik,=20fixed=20a=201.52d=20regression=20?= =?UTF-8?q?that=20caused=20=20=20=20=20=20=20=20=20File>Import>Image=20Seq?= =?UTF-8?q?uence=20to=20use=20the=20image=20label=20(if=20present)=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20as=20the=20slice=20label=20instead=20of=20?= =?UTF-8?q?the=20filename.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20G?= =?UTF-8?q?illes=20Carpentier,=20fixed=20a=201.52k=20regression=20that=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20caused=20the=20particle=20analyzer=20to?= =?UTF-8?q?=20unexpectedly=20create=20composite=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?ROIs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jan=20Eglin?= =?UTF-8?q?ger,=20fixed=20a=201.52i=20regression=20that=20caused=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20macro=20string=20expressions=20like=20"s"+a[i?= =?UTF-8?q?]*n=20to=20generate=20an=20error.=20=20=20=E2=80=A2=201.52k=202?= =?UTF-8?q?9=20January=202019=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Albert=20Cardona=20and=20Gabriel=20Landini,=20added=20the=20?= =?UTF-8?q?"GUI=20=20=20=20=20=20=20=20=20scale=20(0.5-3.0)"=20option=20to?= =?UTF-8?q?=20the=20Edit>Options>Appearance=20dialog,=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20which=20enables=20scaling=20of=20text=20in=20GenericDialo?= =?UTF-8?q?gs=20and=20in=20the=20=20=20=20=20=20=20=20=20Command=20Finder.?= =?UTF-8?q?=20It=20also=20doubles=20the=20size=20of=20the=20tool=20icons?= =?UTF-8?q?=20if=20=20=20=20=20=20=20=20=20the=20scale=20is=201.5=20or=20l?= =?UTF-8?q?arger=20and=20triples=20the=20size=20if=20the=20scale=20is=20?= =?UTF-8?q?=20=20=20=20=20=20=20=202.5=20or=20larger.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added=20clickabl?= =?UTF-8?q?e=20spaces=20between=20the=20=20=20=20=20=20=20=20=20four=20arr?= =?UTF-8?q?ow=20pairs=20in=20plot=20windows=20for=20quickly=20setting=20a?= =?UTF-8?q?=20single=20=20=20=20=20=20=20=20=20plot=20limit.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20ImageJ=20n?= =?UTF-8?q?ow=20displays=20a=20progress=20bar=20when=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20duplicating=20large=20(>200=20megapixel)=20stacks.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Michael=20Schmid=20contributed=20an?= =?UTF-8?q?=20improved=20version=20of=20the=20=20=20=20=20=20=20=20=20Thre?= =?UTF-8?q?sholdToSelection=20class=20(Edit>Selection>Create=20Selection)?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20that=20always=20converts=20single=20?= =?UTF-8?q?pixel=20wide=20lines=20to=20traced=20=20=20=20=20=20=20=20=20se?= =?UTF-8?q?lections=20and=20is=20up=20to=20five=20times=20faster.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Tatsuaki=20Kobayashi,=20I?= =?UTF-8?q?mageJ=20can=20now=20open=2032-bit=20float=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20DICOM=20images.=20=20=20=20=20=20=20=E2=96=A1=20Michael?= =?UTF-8?q?=20Schmid=20contributed=20the=20FloatArray=20class,=20an=20exte?= =?UTF-8?q?ndable=20=20=20=20=20=20=20=20=20float=20array.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added=20th?= =?UTF-8?q?e=20Table.setSelection=20=20=20=20=20=20=20=20=20(start,end,tit?= =?UTF-8?q?le),=20Table.getSelectionStart(title)=20and=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Table.getSelectionEnd(title)=20macro=20functions=20(ex?= =?UTF-8?q?ample).=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20setOption?= =?UTF-8?q?("ScaleConversions",boolean)=20macro=20function.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Robert=20Haase,=20fixed=20a=20b?= =?UTF-8?q?ug=20that=20caused=20the=20Edit>=20=20=20=20=20=20=20=20=20Sele?= =?UTF-8?q?ction>Create=20Selection=20command=20to=20ignore=20the=20"Black?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20background"=20setting=20when=20proce?= =?UTF-8?q?ssing=20non-thresholded=20binary=20=20=20=20=20=20=20=20=20imag?= =?UTF-8?q?es.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Johannes=20Wi?= =?UTF-8?q?bisana,=20fixed=20a=20bug=20in=20the=20Particle=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20Analyzer=20that=20caused=20ROIs=20added=20to=20over?= =?UTF-8?q?lays=20and=20the=20ROI=20Manager=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20not=20exclude=20interior=20holes.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Herbie,=20fixed=20a=20bug=20that=20ca?= =?UTF-8?q?used=20the=20Process>Binary>=20=20=20=20=20=20=20=20=20Make=20B?= =?UTF-8?q?inary=20command=20to=20incorrectly=20set=20the=20threshold=20of?= =?UTF-8?q?=208-bit=20=20=20=20=20=20=20=20=20binary=20images.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Nicolas=20De=20Francesco,=20?= =?UTF-8?q?fixed=20a=20bug=20that=20caused=20the=20LUT=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20to=20not=20be=20saved=20in=20the=20TIFF=20header=20whe?= =?UTF-8?q?n=20saving=20a=20single-channel=20=20=20=20=20=20=20=20=20image?= =?UTF-8?q?=20with=20a=20custom=20grayscale=20LUT.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Mark=20Mandelkern,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20multi-image=20=20=20=20=20=20=20=20=20DICOM?= =?UTF-8?q?=20files=20with=20RescaleSlope!=3D1.0=20to=20open=20incorrectly?= =?UTF-8?q?.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,?= =?UTF-8?q?=20fixed=20a=20bug=20that=20caused=20the=20contrast=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20range=20to=20change=20when=20converting=20an=208?= =?UTF-8?q?-bit=20or=2016-bit=20image=20to=20=20=20=20=20=20=20=20=2032-bi?= =?UTF-8?q?t.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorvik?= =?UTF-8?q?,=20fixed=20a=20bug=20that=20caused=20the=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Table.getColumn("Label")=20macro=20function=20to=20throw?= =?UTF-8?q?=20an=20exception.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Philippe=20Carl,=20fixed=20a=20bug=20that=20caused=20ImageJ?= =?UTF-8?q?=20to=20=20=20=20=20=20=20=20=20freeze=20when=20opening=20the?= =?UTF-8?q?=20Interactive=20Interpreter=20on=20Windows=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20using=20the=20ctrl+j=20keyboard=20shortcut.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20fixe?= =?UTF-8?q?d=20a=20bug=20that=20caused=20ImageJ=20to=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20fail=20to=20open=20one=20column=20tables.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20'Bio7',=20worked=20around=20a?= =?UTF-8?q?=20bug=20that=20caused=20toolbar=20popup=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20menus=20to=20not=20work=20with=20OpenJDK=2011=20and=2012?= =?UTF-8?q?=20on=20Windows.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?Ved=20Sharma,=20fixed=20a=20bug=20that=20caused=20the=20Histogr?= =?UTF-8?q?am=20=20=20=20=20=20=20=20=20command=20to=20not=20behave=20as?= =?UTF-8?q?=20expected=20when=20"Limit=20to=20Threshold"=20was=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20enabled=20in=20Analyze>Set=20Measurements=20and?= =?UTF-8?q?=20there=20was=20an=20invisble=20=20=20=20=20=20=20=20=20thresh?= =?UTF-8?q?old.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vi?= =?UTF-8?q?scher,=20fixed=20bugs=20in=20the=20toScaled(length)=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20and=20toUnscaled(length)=20macro=20functions.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20J=20Xiong,=20fixed?= =?UTF-8?q?=20a=201.52j=20regression=20that=20caused=20the=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20Image>Overlay>From=20ROI=20Manager=20command=20to?= =?UTF-8?q?=20throw=20an=20exception.=20=20=20=20=20=20=20=E2=96=A1=20Than?= =?UTF-8?q?ks=20to=20Philippe=20Carl,=20fixed=201.52j9=20regression=20that?= =?UTF-8?q?=20made=20it=20=20=20=20=20=20=20=20=20impossible=20to=20enter?= =?UTF-8?q?=20closing=20brackets=20into=20editor=20windows=20using=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20French=20keyboards.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=201.52j=20reg?= =?UTF-8?q?ression=20that=20sometimes=20=20=20=20=20=20=20=20=20caused=20m?= =?UTF-8?q?acro=20errors=20to=20be=20ignored=20(examples).=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20'yorgodillo',=20'mountain=5Fman?= =?UTF-8?q?'=20and=20Jan=20Eglinger,=20fixed=20=20=20=20=20=20=20=20=20a?= =?UTF-8?q?=201.52e=20regression=20that=20caused=20float=20to=208-bit=20co?= =?UTF-8?q?nversions=20to=20be=20=20=20=20=20=20=20=20=20done=20incorrectl?= =?UTF-8?q?y.=20=20=20=E2=80=A2=201.52j=2029=20December=202018=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Added=20the=20Plugins>Macros>Interactive?= =?UTF-8?q?=20Interpreter=20command=20=20=20=20=20=20=20=20=20(shortcut:?= =?UTF-8?q?=20"j"),=20which=20enables=20interactive=20editing=20and=20runn?= =?UTF-8?q?ing=20=20=20=20=20=20=20=20=20of=20macro=20and=20JavaScript=20c?= =?UTF-8?q?ode=20in=20an=20editor=20window=20(example).=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20Type=20"js"=20in=20to=20switch=20the=20language=20to?= =?UTF-8?q?=20JavaScript.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ve?= =?UTF-8?q?d=20Sharma,=20point=20selections=20with=20more=20than=2065,535?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20points=20can=20now=20be=20saved=20an?= =?UTF-8?q?d=20reopened=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20Philippe=20Carl,=20the=20status=20bar=20is=20updated?= =?UTF-8?q?=20when=20=20=20=20=20=20=20=20=20adjusting=20elliptical=20and?= =?UTF-8?q?=20rotated=20rectangle=20selections.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Ilan=20Tal,=20added=20the=20"Ignore?= =?UTF-8?q?=20Rescale=20Slopet"=20checkbox=20=20=20=20=20=20=20=20=20to=20?= =?UTF-8?q?the=20Edit>Options>DICOM=20dialog=20box.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20Image>Edit>Resize?= =?UTF-8?q?=20can=20now=20convert=20a=20=20=20=20=20=20=20=20=20single=20i?= =?UTF-8?q?mage=20to=20a=20stack.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20MichaelSchmid,=20improved=20the=20calculation=20of=20Fe?= =?UTF-8?q?ret=20=20=20=20=20=20=20=20=20parameters=20for=20composite=20se?= =?UTF-8?q?lections.=20FeretAngle=20is=20now=20reported=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20(within=200.5=20deg),=20works=20with=20pixel=20aspect?= =?UTF-8?q?=20ratios=20different=20from=20=20=20=20=20=20=20=20=20one=20an?= =?UTF-8?q?d=20is=20more=20accuate=20due=20to=20use=20of=200.5=20deg=20inc?= =?UTF-8?q?rements.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20MichaelS?= =?UTF-8?q?chmid,=20the=20output=20of=20ROI=20Manager=20'AND',=20'OR'=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20and=20'XOR'=20operations=20are,=20if=20?= =?UTF-8?q?possible,=20converted=20from=20composite=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20ROIs=20into=20simpler=20polygon=20ROIs.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutterer,=20errors=20in?= =?UTF-8?q?=20macro=20run()=20statements=20are=20=20=20=20=20=20=20=20=20n?= =?UTF-8?q?ow=20reported=20using=20a=20"Macro=20Error"=20dialog=20that=20d?= =?UTF-8?q?isplays=20the=20=20=20=20=20=20=20=20=20line=20number.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Added=20the=20ImagePlus.plotHistogram()?= =?UTF-8?q?=20method.=20For=20examples,=20run=20=20=20=20=20=20=20=20=20He?= =?UTF-8?q?lp>Examples>JavaScript>Histogram=20Plots.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20JavaScript-friendly=20ImageStatistics?= =?UTF-8?q?.histogram()=20=20=20=20=20=20=20=20=20method=20(example).=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Added=20the=20Overlay.setLabelFon?= =?UTF-8?q?tSize(size,options),=20=20=20=20=20=20=20=20=20Overlay.setLabel?= =?UTF-8?q?Color(),=20Overlay.setStrokeColor()=20and=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Overlay.setStrokeWidth()=20macro=20functions,=20and=20cor?= =?UTF-8?q?responding=20=20=20=20=20=20=20=20=20Overlay=20class=20methods?= =?UTF-8?q?=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jer?= =?UTF-8?q?ome=20Mutterer,=20added=20the=20setIgnoreErrors()=20and=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20getErrorMessage()=20methods=20to=20the=20I?= =?UTF-8?q?nterpreter=20class=20(example).=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bug=20that=20c?= =?UTF-8?q?aused=20Image>Edit>=20=20=20=20=20=20=20=20=20Resize=20to=20not?= =?UTF-8?q?=20preserve=20stack=20lookup=20tables.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20Orthogonal?= =?UTF-8?q?=20Views=20bugs=20that=20caused=20=20=20=20=20=20=20=20=20freez?= =?UTF-8?q?ing,=20dragging=20in=20XZ=20and=20YZ=20views=20to=20not=20work,?= =?UTF-8?q?=20missing=20=20=20=20=20=20=20=20=20density=20calibration=20an?= =?UTF-8?q?d=20incorrect=20behavior=20when=20"Rotate=20YZ"=20and=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20"Flip=20XZ"=20where=20enabled=20in=20Edit>Opt?= =?UTF-8?q?ions>DICOM.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein?= =?UTF-8?q?=20Rorvik,=20fixed=20a=20bug=20that=20caused=20particle=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20analyzer=20overlays=20to=20not=20be=20spec?= =?UTF-8?q?ific=20to=20the=20current=20slice=20when=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20processing=20one=20slice.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Fixed=20a=20bug=20that=20caused=20the=20color=20of=20overlay?= =?UTF-8?q?=20labels=20to=20be=20set=20=20=20=20=20=20=20=20=20to=20black?= =?UTF-8?q?=20after=20the=20image=20was=20saved=20and=20reopened.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20the?= =?UTF-8?q?=20Image>Overlay>To=20ROI=20Manager=20=20=20=20=20=20=20=20=20c?= =?UTF-8?q?ommand=20to=20not=20preserve=20overlay=20properties=20such=20a?= =?UTF-8?q?=20label=20color=20=20=20=20=20=20=20=20=20and=20scalability.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Wilhelm=20Burger?= =?UTF-8?q?,=20fixed=20a=20bug=20that=20caused=20the=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20Roi.setLocation(x,y)=20method=20to=20not=20work=20correct?= =?UTF-8?q?ly=20with=20=20=20=20=20=20=20=20=20ShapeRois=20if=20x=20or=20y?= =?UTF-8?q?=20were=20not=20integers.=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20Philippe=20Carl,=20fixed=20a=20bug=20that=20caused=20t?= =?UTF-8?q?he=20status=20bar=20=20=20=20=20=20=20=20=20to=20not=20be=20upd?= =?UTF-8?q?ated,=20or=20to=20not=20be=20updated=20correctly,=20when=20movi?= =?UTF-8?q?ng=20=20=20=20=20=20=20=20=20or=20changing=20the=20length=20of?= =?UTF-8?q?=20straight=20line=20and=20arrow=20selections=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20using=20the=20arrow=20keys.=20=20=20=E2=80=A2=201.52i?= =?UTF-8?q?=2026=20November=202018=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Ved=20Sharma=20and=20Michael=20Kaul,=20added=20the=20Im?= =?UTF-8?q?age>Stacks>=20=20=20=20=20=20=20=20=20Measure=20Stack=20command?= =?UTF-8?q?=20(macro=20source),=20useful=20for=20plotting=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20stacks=20using=20the=20contextual=20(right-click)?= =?UTF-8?q?=20Plot=20command=20in=20=20=20=20=20=20=20=20=20Results=20tabl?= =?UTF-8?q?es.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome=20Mutt?= =?UTF-8?q?erer,=20added=20the=20Image>Stacks>Tools>Magic=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20Montage=20Tools=20command=20(macro=20source).=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Tables=20can=20be=20sorted=20using?= =?UTF-8?q?=20the=20Sort=20command=20in=20the=20contextual=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20(right-click)=20menu=20or=20in=20the=20Results=20me?= =?UTF-8?q?nu=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20M?= =?UTF-8?q?atias=20Andina,=20the=20Image>Transform>Rotate=20command=20can?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20now=20be=20used=20interactiely.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,?= =?UTF-8?q?=20added=20an=20"F"=20(Fit=20All)=20icon=20next=20to=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20the=20"R"=20(Reset=20Range)=20icon=20in=20the?= =?UTF-8?q?=20bottom-left=20corner=20of=20plot=20=20=20=20=20=20=20=20=20w?= =?UTF-8?q?indows.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Robert=20?= =?UTF-8?q?Haase=20and=20Emanuele=20Martini,=20added=20a=20"Don't=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20reset=20range"=20checkbox=20to=20the=20"Thres?= =?UTF-8?q?hold"=20dialog=20(example).=20=20=20=20=20=20=20=E2=96=A1=20Add?= =?UTF-8?q?ed=20an=20error=20bars=20example=20to=20the=20Help>Examples>Plo?= =?UTF-8?q?ts>Plot=20=20=20=20=20=20=20=20=20Styles=20macro.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Alphabetized=20the=20Image>Stacks>Tools=20?= =?UTF-8?q?menu.=20=20=20=20=20=20=20=E2=96=A1=20Moved=20the=20Image>Stack?= =?UTF-8?q?s>Plot=20XY=20Profile=20command=20to=20Image>Stacks>=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Tools>Plot=20XY=20Profile.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20'Barbara'=20and=20Michael=20Schmid?= =?UTF-8?q?,=20the=20Translate=20command=20=20=20=20=20=20=20=20=20in=20th?= =?UTF-8?q?e=20ROI=20Manager=20remembers=20the=20x=20and=20y=20offset=20va?= =?UTF-8?q?lues.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Alex=20Miro?= =?UTF-8?q?nov,=20added=20an=20optional=20properties=20string=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20argument=20to=20the=20makePoint()=20macro=20func?= =?UTF-8?q?tion=20(macro=20example,=20=20=20=20=20=20=20=20=20JavaScript?= =?UTF-8?q?=20example).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Alex?= =?UTF-8?q?=20Mironov,=20the=20setLineWidth()=20macro=20function=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20automatically=20calls=20Overlay.add()=20when?= =?UTF-8?q?=20the=20line=20width=20changes=20(=20=20=20=20=20=20=20=20=20e?= =?UTF-8?q?xample).=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20Plot.rep?= =?UTF-8?q?lace()=20macro=20function=20and=20method.=20For=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20examples,=20run=20Help>Examples>Plots>Random=20Data?= =?UTF-8?q?=20or=20Help>Examples>=20=20=20=20=20=20=20=20=20JavaScript>Plo?= =?UTF-8?q?t=20Random=20Data.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Michael=20Schmid,=20added=20an=20"Add=20Fit"=20commamnd=20to?= =?UTF-8?q?=20the=20=20=20=20=20=20=20=20=20Data>>=20menu=20of=20Plot=20wi?= =?UTF-8?q?ndows.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Laurent=20?= =?UTF-8?q?Thomas,=20ShortProcessor.rotate()=20and=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20FloatProcessor.rotate()=20now=20fill=20using=20the=20value?= =?UTF-8?q?=20set=20by=20=20=20=20=20=20=20=20=20setBackgroundValue().=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Kai=20Barthel,=20th?= =?UTF-8?q?e=20Analyze>Calibrate=20command=20resets=20the=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20display=20range=20of=20contrast-reduced=20images.?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vische?= =?UTF-8?q?r,=20the=20curve=20fitter=20now=20works=20with=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20datasets=20containing=20NaNs.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20added=20the=20Plo?= =?UTF-8?q?t.objectCount=20macro=20=20=20=20=20=20=20=20=20function.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Matias=20Andina,=20add?= =?UTF-8?q?ed=20the=20setOption=20=20=20=20=20=20=20=20=20("SupportMacroUn?= =?UTF-8?q?do",boolean)=20macro=20function=20(example).=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20added=20a=20co?= =?UTF-8?q?nstructor=20for=20creating=20a=20=20=20=20=20=20=20=20=20plot?= =?UTF-8?q?=20from=20arrays=20to=20the=20PlotContentsDialog=20class=20(exa?= =?UTF-8?q?mple).=20=20=20=20=20=20=20=E2=96=A1=20Added=20the=20PointRoi.g?= =?UTF-8?q?etLastCounter()=20method.=20=20=20=20=20=20=20=E2=96=A1=20Added?= =?UTF-8?q?=20the=20getSizeInBytes()=20methods=20to=20the=20ImagePlus=20cl?= =?UTF-8?q?ass.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Philippe=20C?= =?UTF-8?q?arl=20and=20Michael=20Schmid,=20fixed=20a=20bug=20that=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20caused=20the=20macro=20interpreter=20to=20inc?= =?UTF-8?q?orrectly=20evaluate=20string=20=20=20=20=20=20=20=20=20expressi?= =?UTF-8?q?ons=20containing=20numeric=20arrays=20indexed=20using=20the=20+?= =?UTF-8?q?+=20=20=20=20=20=20=20=20=20operator.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20the=20=20=20=20=20=20=20=20=20changeValues()=20m?= =?UTF-8?q?acro=20funtion=20to=20reset=20the=20display=20range=20of=20=20?= =?UTF-8?q?=20=20=20=20=20=20=2016-bit=20and=2032-bit=20images.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Alex=20Mironov,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20setLineWidth(1)=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20in=20a=20macro=20to=20incorrectly=20set=20the=20line?= =?UTF-8?q?=20width=20to=20the=20width=20set=20=20=20=20=20=20=20=20=20in?= =?UTF-8?q?=20the=20Edit>Options>Line=20Width=20dialog.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bu?= =?UTF-8?q?g=20that=20caused=20the=20Undo=20=20=20=20=20=20=20=20=20comman?= =?UTF-8?q?d=20to=20not=20work=20after=20rotating=20an=20image=20with=20"E?= =?UTF-8?q?nlarge=20=20=20=20=20=20=20=20=20image"=20enabled.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Matias=20Andina,=20fixed=20a?= =?UTF-8?q?=20bug=20that=20caused=20the=20Undo=20=20=20=20=20=20=20=20=20c?= =?UTF-8?q?ommand=20to=20not=20work=20after=20cropping=20or=20rotating=20a?= =?UTF-8?q?=20composite=20=20=20=20=20=20=20=20=20color=20image.=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20nudging=20the=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20end=20of=20a=20line=20selection=20with=20alt-arrow=20keys?= =?UTF-8?q?=20to=20not=20update=20a=20=20=20=20=20=20=20=20=20live=20profi?= =?UTF-8?q?le=20plot.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Mark?= =?UTF-8?q?=20Senko=20and=20Michael=20Schmid,=20fixed=20a=20bug=20that=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20caused=20profile=20plots=20of=20line=20?= =?UTF-8?q?selections=20wider=20than=201=20to=20differ=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20from=20profile=20plots=20of=20rectangles=20of=20the=20?= =?UTF-8?q?same=20size.=20=20=20=20=20=20=20=E2=96=A1=20Fixed=20a=20bug=20?= =?UTF-8?q?that=20caused=20DICOM=20images=20to=20be=20displayed=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20incorrectly=20if=20"Open=20as=2032-bit=20floa?= =?UTF-8?q?t"=20was=20enabled=20in=20Edit>=20=20=20=20=20=20=20=20=20Optio?= =?UTF-8?q?ns>DICOM.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Kenneth?= =?UTF-8?q?=20Sloan,=20fixed=20a=20bug=20that=20caused=20the=20Paintbrush?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Tool=20(in=20"Paint=20on=20overlay"?= =?UTF-8?q?=20mode)=20to=20delete=20pre-existing=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20overlays.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'mou?= =?UTF-8?q?ntain=5Fman',=20fixed=20a=20bug=20that=20caused=20the=20Rescale?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Slope=20tag=20(0028,1053)=20to=20be?= =?UTF-8?q?=20ignored=20when=20opening=20DICOM=20images=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20and=20"Open=20as=2032-bit=20float"=20was=20not=20enabl?= =?UTF-8?q?ed=20in=20Edit>Options>=20=20=20=20=20=20=20=20=20DICOM.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Fred=20Damen,=20fixed?= =?UTF-8?q?=20a=20file=20path=20recording=20bug=20that=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20caused=20a=20NullPointerException.=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bu?= =?UTF-8?q?g=20that=20caused=20buttons=20in=20=20=20=20=20=20=20=20=20some?= =?UTF-8?q?=20dialogs=20(e.g.,=20"B&C"=20and=20"Threshold")=20to=20not=20b?= =?UTF-8?q?e=20displayed=20=20=20=20=20=20=20=20=20correctly=20on=20macOS?= =?UTF-8?q?=20when=20using=20the=20Metal=20look=20and=20feel.=20Opening=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20an=20Action=20Bar=20switches=20to=20Met?= =?UTF-8?q?al=20or=20use=20Edit>Options>Look=20and=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20Feel=20in=20Fiji.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20t?= =?UTF-8?q?o=20Michael=20Schmid,=20fixed=20a=20bug=20that=20caused=20plot?= =?UTF-8?q?=20stacks=20=20=20=20=20=20=20=20=20to=20not=20be=20spatially?= =?UTF-8?q?=20calibrated.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ni?= =?UTF-8?q?colas=20Stifani,=20fixed=20a=201.52h=20regression=20on=20Window?= =?UTF-8?q?s=20=20=20=20=20=20=20=20=20that=20caused=20canceled=20dialog?= =?UTF-8?q?=20boxes=20in=20macros=20started=20using=20the=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20Plugins>Macros>Run=20command=20to=20throw=20an=20ex?= =?UTF-8?q?ception.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Jerome?= =?UTF-8?q?=20Mutterer,=20fixed=20a=20v1.52=20regression=20that=20caused?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20the=20getMetadata()=20macro=20functi?= =?UTF-8?q?on=20(without=20the=20"info"=20or=20"label"=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20argument)=20to=20not=20work=20as=20expected.=20=20=20?= =?UTF-8?q?=E2=80=A2=201.52h=2016=20October=202018=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Plot=20enhancements,=20thanks=20to=20Michael=20Schm?= =?UTF-8?q?id:=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20"Save"=20in=20p?= =?UTF-8?q?lot=20windows=20has=20moved=20into=20a=20new=20Data>>=20menu,?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20which=20includes=20two?= =?UTF-8?q?=20additional=20items:=20(1)=20Add=20from=20Plot=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20(takes=20a=20PlotObject,=20e.g.=20data?= =?UTF-8?q?=20set,=20text,=20etc.,=20from=20a=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20different=20plot)=20and=20(2)=20Add=20from=20Table?= =?UTF-8?q?=20(adds=20data=20from=20a=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20"Results"=20table).=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=98=86=20Values=20in=20tables=20can=20be=20be=20plotted=20di?= =?UTF-8?q?rectly=20using=20the=20=20=20=20=20=20=20=20=20=20=20=20=20cont?= =?UTF-8?q?extual=20menu=20or=20the=20Results>Plot=20command=20in=20"Resul?= =?UTF-8?q?ts"=20=20=20=20=20=20=20=20=20=20=20=20=20tables.=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=98=86=20Added=20the=20Separated=20Bar?= =?UTF-8?q?=20type,=20a=20bar=20graph=20with=20some=20space=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20between=20the=20columns.=20For=20an=20e?= =?UTF-8?q?xample,=20run=20Help>Examples>=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20JavaScript>Plot=20Styles.=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=98=86=20Histogram-like=20"Bar"=20plots=20also=20work=20w?= =?UTF-8?q?ith=20non-equidistant=20=20=20=20=20=20=20=20=20=20=20=20=20poi?= =?UTF-8?q?nts=20along=20x.=20=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Co?= =?UTF-8?q?nnected=20Circles=20fill=20the=20circles=20with=20the=20seconda?= =?UTF-8?q?ry=20color=20=20=20=20=20=20=20=20=20=20=20=20=20(=3D=20line=20?= =?UTF-8?q?color),=20if=20that=20color=20is=20given=20and=20not=20null.=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=E2=98=86=20Improved=20the=20code?= =?UTF-8?q?=20for=20filling=20bars=20and=20"filled"=20curves.=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=E2=98=86=20For=20"Bar"=20and=20"Separated?= =?UTF-8?q?=20Bar",=20the=20base=20line=20of=20the=20plot=20is=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20y=20=3D=200=20if=20the=20values=20di?= =?UTF-8?q?ffer=20by=20more=20than=20a=20factor=20of=202.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Added=20the=20Help>Examples>Plots>Plot=20Styl?= =?UTF-8?q?es=20and=20...JavaScript>=20=20=20=20=20=20=20=20=20Plot=20Styl?= =?UTF-8?q?es=20examples.=20=20=20=20=20=20=20=E2=96=A1=20The=20Edit>Selec?= =?UTF-8?q?tion>Create=20Mask=20command=20works=20with=20overlays=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20created=20by=20the=20Brush=20and=20Pencil=20t?= =?UTF-8?q?ools.=20=20=20=20=20=20=20=E2=96=A1=20Added=20a=20"Help"=20butt?= =?UTF-8?q?on=20to=20the=20Brush=20and=20Pencil=20tool=20dialog=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20boxes.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Gabriel=20Landini=20and=20Jerome=20Mutterer,=20the=20te?= =?UTF-8?q?xt=20tool=20=20=20=20=20=20=20=20=20now=20creates=20an=20"Enter?= =?UTF-8?q?=20text..."=20selection=20when=20you=20click=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20(without=20dragging)=20on=20an=20image=20and=20there?= =?UTF-8?q?=20is=20no=20existing=20=20=20=20=20=20=20=20=20selection.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Gabriel=20Landini,?= =?UTF-8?q?=20the=20"Show=20on=20all=20slices"=20option=20(was=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20"Show=20all")=20now=20appears=20in=20both=20the?= =?UTF-8?q?=20point=20and=20multi-point=20tool=20=20=20=20=20=20=20=20=20d?= =?UTF-8?q?ialogs.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20R?= =?UTF-8?q?orvik,=20the=20Analyze>Tools>Synchronize=20Windows=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20tool=20now=20supports=20use=20of=20the=20"+"=20a?= =?UTF-8?q?nd=20"-"=20keys=20for=20synchronized=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?zooming=20when=20the=20"Image=20scaling"=20option=20is=20enable?= =?UTF-8?q?d.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Lorenzo=20Cang?= =?UTF-8?q?iano,=20added=20a=20"Points"=20column=20to=20the=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20Image>Overlay>List=20Elements=20table.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Added=20the=20Plot.setStyle()=20macro=20fu?= =?UTF-8?q?nction.=20For=20an=20example,=20run=20=20=20=20=20=20=20=20=20H?= =?UTF-8?q?elp>Examples>Plots>Plot=20Styles.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Added=20the=20IJ.exit()=20method,=20which=20aborts=20JavaScr?= =?UTF-8?q?ipts.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Bio7,=20fix?= =?UTF-8?q?ed=20a=20bug=20that=20caused=20images=20to=20turn=20black=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20when=20assigned=20an=20ImageRoi=20created?= =?UTF-8?q?=20by=20the=20Brush=20or=20Pencil=20tools.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20bugs=20that?= =?UTF-8?q?=20caused=20File>Open=20Next=20=20=20=20=20=20=20=20=20to=20som?= =?UTF-8?q?etimes=20fail=20when=20opening=20images=20of=20dissimilar=20typ?= =?UTF-8?q?es.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael=20Sch?= =?UTF-8?q?mid,=20fixed=20several=20bugs=20in=20the=20Image>=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Adjust>Threshold=20tool,=20mostly=20related=20to?= =?UTF-8?q?=2032-bit=20images.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Michael=20Cammer=20and=20Michael=20Schmid,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20=20=20=20=20=20=20=20=20caused=20the=20"Propagate=20t?= =?UTF-8?q?o=20the=20other=20n=20channels=20of=20this=20image"=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20option=20of=20the=20"Set"=20command=20in=20the?= =?UTF-8?q?=20"B&C"=20tool=20to=20not=20work=20as=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20expected.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stei?= =?UTF-8?q?n=20Rorvik=20and=20Michael=20Schmid,=20fixed=20a=20bug=20that?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20caused=20an=20image=20pasted=20into?= =?UTF-8?q?=20a=20zoomed=20image=20to=20be=20incorrectly=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20positioned=20if=20the=20pasted=20image=20was=20equal?= =?UTF-8?q?=20or=20larger=20in=20size=20than=20=20=20=20=20=20=20=20=20the?= =?UTF-8?q?=20target=20image.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Stein=20Rorvik,=20fixed=20bugs=20that=20caused=20scale=20bar?= =?UTF-8?q?s=20to=20be=20=20=20=20=20=20=20=20=20incorrectly=20positioned?= =?UTF-8?q?=20on=20large=20images=20and=20macros=20to=20alter=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20default=20scale=20bar=20dialog=20settings.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Fixed=20a=20bug=20that=20caused=20ke?= =?UTF-8?q?yboard=20shortcuts=20for=20zooming=20in=20and=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20out,=20as=20well=20as=20other=20shortcuts,=20to=20not?= =?UTF-8?q?=20work=20when=20a=20text=20=20=20=20=20=20=20=20=20selection?= =?UTF-8?q?=20was=20active.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?Stein=20Rorvik,=20fixed=20a=20bug=20that=20caused=20right-justi?= =?UTF-8?q?fied=20=20=20=20=20=20=20=20=20text=20added=20to=20an=20overlay?= =?UTF-8?q?=20by=20the=20Overlay.drawString()=20macro=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20function=20to=20not=20be=20displayed=20correctly.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20"hwada",=20fixed=20bug?= =?UTF-8?q?s=20that=20caused=20the=20=20=20=20=20=20=20=20=20ImagePlus.set?= =?UTF-8?q?Image(ImagePlus)=20method=20to=20sometimes=20not=20work=20as=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20expected.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Nathalie=20Houssin,=20fixed=20a=20bug=20that?= =?UTF-8?q?=20caused=20the=20Make=20=20=20=20=20=20=20=20=20Substack=20com?= =?UTF-8?q?mand=20to=20throw=20an=20exception=20when=20used=20with=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20hyperstacks=20opened=20by=20the=20OlympusV?= =?UTF-8?q?iewer=20plugin.=20=20=20=20=20=20=20=E2=96=A1=20Fixed=20bugs=20?= =?UTF-8?q?in=20the=20ImagePlus.setStack()=20method.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20fixed=20a=20bug?= =?UTF-8?q?=20that=20caused=20the=20"Show=20=20=20=20=20=20=20=20=20All"?= =?UTF-8?q?=20button=20in=20the=20ROI=20Manager=20to=20not=20work=20as=20e?= =?UTF-8?q?xpected=20with=20=20=20=20=20=20=20=20=20point=20selections.=20?= =?UTF-8?q?=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Lorenzo=20Cangiano,?= =?UTF-8?q?=20fixed=20a=20bug=20that=20caused=20=20=20=20=20=20=20=20=20pr?= =?UTF-8?q?ogrammatically=20generated=20overlays=20of=20PointRois=20on=20s?= =?UTF-8?q?tacks=20to=20=20=20=20=20=20=20=20=20be=20not=20shown=20when=20?= =?UTF-8?q?saved=20and=20reopened.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Robert=20Haase,=20fixed=20a=20bug=20that=20could=20caus?= =?UTF-8?q?e=20the=20=20=20=20=20=20=20=20=20PolygonRoi.getTracedPerimeter?= =?UTF-8?q?()=20method=20to=20throw=20a=20=20=20=20=20=20=20=20=20NullPoin?= =?UTF-8?q?terException.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Hyu?= =?UTF-8?q?ng-song=20Nam=20and=20Curtis=20Rueden,=20fixed=20a=20bug=20that?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20caused=20keyboard=20shortcuts=20to?= =?UTF-8?q?=20not=20work=20with=20the=20"Channels"=20tool.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Gilles=20Carpentier,=20fixed=20?= =?UTF-8?q?a=201.52f=20regression=20that=20=20=20=20=20=20=20=20=20caused?= =?UTF-8?q?=20the=20Edit>Selection>Create=20Mask=20command=20to=20not=20wo?= =?UTF-8?q?rk=20as=20=20=20=20=20=20=20=20=20expected=20if=20the=20image?= =?UTF-8?q?=20had=20both=20an=20roi=20and=20an=20overlay.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixed=20a?= =?UTF-8?q?=201.52g=20regression=20that=20caused=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20multi-channel=20images=20to=20lose=20color=20table=20and=20d?= =?UTF-8?q?isplay=20range=20=20=20=20=20=20=20=20=20information=20after=20?= =?UTF-8?q?being=20cropped=20and=20saved.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Stephen=20Royle,=20fixed=20a=201.52h=20regression?= =?UTF-8?q?=20that=20caused=20=20=20=20=20=20=20=20=20the=20Image>Transfor?= =?UTF-8?q?m>Rotate=2090=20Degrees=20Right=20(or=20Left)=20command=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20to=20not=20work=20as=20expected=20with=20c?= =?UTF-8?q?omposite=20images.=20=20=20=E2=80=A2=201.52g=2016=20September?= =?UTF-8?q?=202018=20=20=20=20=20=20=20=E2=96=A1=20A=20text=20selection=20?= =?UTF-8?q?in=20an=20overlay=20can=20be=20deleted=20by=20alt-clicking=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20on=20it=20and=20pressing=20backspace+de?= =?UTF-8?q?lete=20(on=20Windows)=20or=20=20=20=20=20=20=20=20=20command+de?= =?UTF-8?q?lete=20(on=20Macs).=20=20=20=20=20=20=20=E2=96=A1=20Fixed=20a?= =?UTF-8?q?=20bug=20that=20caused=20polygon=20and=20polyline=20selections?= =?UTF-8?q?=20to=20lose=20=20=20=20=20=20=20=20=20properties=20like=20colo?= =?UTF-8?q?r,=20line=20width=20and=20name=20when=20a=20point=20is=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20added=20by=20shift-clicking=20on=20an=20exist?= =?UTF-8?q?ing=20point.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Dave?= =?UTF-8?q?=20Mason,=20fixed=20a=20bug=20that=20caused=20the=20File>Import?= =?UTF-8?q?>=20=20=20=20=20=20=20=20=20URL=20command=20to=20not=20correctl?= =?UTF-8?q?y=20open=20Hyperstacks.=20=20=20=20=20=20=20=E2=96=A1=20Thanks?= =?UTF-8?q?=20to=20Volko=20Straub,=20fixed=20a=201.52f=20regression=20that?= =?UTF-8?q?=20caused=20=20=20=20=20=20=20=20=20getDirectory("")=20on=20Win?= =?UTF-8?q?dows=20to=20return=20a=20string=20ending=20in=20"/"=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20instead=20of=20the=20expected=20"\".=20=20=20?= =?UTF-8?q?=E2=80=A2=201.52f=207=20September=202018=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20added=20the=20Pl?= =?UTF-8?q?ot.addHistogram()=20macro=20=20=20=20=20=20=20=20=20function,?= =?UTF-8?q?=20which=20plots=20a=20histogram=20from=20an=20array=20(example?= =?UTF-8?q?).=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Norbert=20Visc?= =?UTF-8?q?her,=20any=20currently=20running=20macro=20is=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20aborted=20when=20running=20an=20installed=20macro=20fr?= =?UTF-8?q?om=20the=20Plugins>Macros=20=20=20=20=20=20=20=20=20menu=20or?= =?UTF-8?q?=20the=20editor's=20Macros=20menu.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Michael=20Schmid,=20added=20the=20"Er?= =?UTF-8?q?ror=20Function"=20[y=3Da+b*erf=20=20=20=20=20=20=20=20=20((x-c)?= =?UTF-8?q?/d)]=20curve=20fit=20option=20and=20the=20ij.util.IJ.Math.erf(x?= =?UTF-8?q?)=20=20=20=20=20=20=20=20=20method=20(example).=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20The=20Edit>Selection>Create=20Mask=20command?= =?UTF-8?q?=20works=20with=20line=20=20=20=20=20=20=20=20=20selections=20a?= =?UTF-8?q?nd=20overlays.=20=20=20=20=20=20=20=E2=96=A1=20The=20"Black=20b?= =?UTF-8?q?ackground"=20setting=20defaults=20to=20'true'.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Anna=20Povolna,=20the=20"Open?= =?UTF-8?q?=20all=20files=20in=20folder"=20and=20"Use=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20virtual=20stack"=20options=20in=20the=20File>Import>raw?= =?UTF-8?q?=20dialog=20can=20be=20=20=20=20=20=20=20=20=20used=20at=20the?= =?UTF-8?q?=20same=20time.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'?= =?UTF-8?q?Sethur',=20ImageJ=20no=20longer=20sorts=20imported=20DICOM=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20stacks=20by=20series=20number=20(tag=20?= =?UTF-8?q?0020,0011)=20if=20"Sort=20images=20=20=20=20=20=20=20=20=20nume?= =?UTF-8?q?rically"=20is=20not=20checked=20in=20the=20File>Import>ImageSeq?= =?UTF-8?q?uence=20=20=20=20=20=20=20=20=20dialog.=20Also=20added=20a=20re?= =?UTF-8?q?cordable=20'noMetaSort'=20option=20to=20the=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20options=20string=20of=20the=20FolderOpener.open(dir,op?= =?UTF-8?q?tions)=20method.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20?= =?UTF-8?q?'Alan',=20added=20the=20createThresholdMask()=20and=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20createRoiMask()=20methods=20to=20the=20ImagePlus?= =?UTF-8?q?=20class.=20These=20methods=20=20=20=20=20=20=20=20=20are=20rec?= =?UTF-8?q?orded=20when=20using=20the=20Edit>Selection>Create=20Mask=20com?= =?UTF-8?q?mand=20=20=20=20=20=20=20=20=20(JavaScript=20example).=20=20=20?= =?UTF-8?q?=20=20=20=20=E2=96=A1=20Added=20the=20recordable=20Raw.open(),?= =?UTF-8?q?=20Raw.openAll()=20and=20=20=20=20=20=20=20=20=20Raw.openAllVir?= =?UTF-8?q?tual()=20methods=20(JavaScript=20example).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20added=20the=20Dicom?= =?UTF-8?q?Tools.getTagName(tag)=20=20=20=20=20=20=20=20=20method.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Christian=20Tischer,?= =?UTF-8?q?=20fixed=20bugs=20in=20the=20RoiManager.add=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20(ImagePlus,Roi,int)=20method=20than=20caused=20it=20to?= =?UTF-8?q?=20not=20behave=20as=20=20=20=20=20=20=20=20=20expected=20if=20?= =?UTF-8?q?the=20ROI=20name=20was=20not=20null.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Norbert=20Vischer,=20fixed=20bugs=20t?= =?UTF-8?q?hat=20caused=20the=20Edit>Cut=20=20=20=20=20=20=20=20=20and=20A?= =?UTF-8?q?nalyze>Set=20Scale=20commands=20to=20not=20set=20the=20'changes?= =?UTF-8?q?'=20flag.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein?= =?UTF-8?q?=20Rorvik,=20fixed=20a=20bug=20that=20caused=20the=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Overlay.drawString=20macro=20function=20to=20ign?= =?UTF-8?q?ore=20the=20justification=20=20=20=20=20=20=20=20=20set=20by=20?= =?UTF-8?q?the=20setJustification()=20function.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20output=20of=20the=20=20=20=20=20=20=20=20=20Over?= =?UTF-8?q?lay.drawString()=20function=20to=20be=20lost=20when=20text=20is?= =?UTF-8?q?=20added=20=20=20=20=20=20=20=20=20using=20Overlay.addSelection?= =?UTF-8?q?().=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Lorenzo=20Can?= =?UTF-8?q?giono,=20fixed=20a=20bug=20that=20caused=20selections=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20pasted=20into=20images=20to=20not=20be=20save?= =?UTF-8?q?d.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Mahmoudi=20Sid?= =?UTF-8?q?i=20Ahmed,=20fixed=20a=20bug=20that=20caused=20the=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20Analyze>Calibrate=20command=20to=20not=20work=20?= =?UTF-8?q?with=20signed=2016-bit=20=20=20=20=20=20=20=20=20images.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Menelaos=20Symeonides,?= =?UTF-8?q?=20fixed=20an=20ROI=20Manager=20bug=20that=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20caused=20the=20stack=20position=20to=20be=20ignored=20whe?= =?UTF-8?q?n=20measuring=20renamed=20=20=20=20=20=20=20=20=20ROIs.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Ron=20DeSpain,=20fixed?= =?UTF-8?q?=20a=20bug=20that=20caused=20attempts=20to=20add=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20to=20(by=20holding=20shift=20key=20down)=20and=20su?= =?UTF-8?q?bract=20from=20(by=20holding=20alt=20=20=20=20=20=20=20=20=20ke?= =?UTF-8?q?y=20down)=20elliptical=20selections=20to=20fail.=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Ron=20DeSpain,=20fixed=20a=20bu?= =?UTF-8?q?g=20that=20caused=20the=20Window>Tile=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20command=20to=20overlap=20the=20"ImageJ"=20window=20with=20im?= =?UTF-8?q?age=20titles.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Pet?= =?UTF-8?q?e=20Bankhead,=20fixed=20a=20bug=20the=20caused=20the=20Process>?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20Batch>Convert=20command=20to=20not?= =?UTF-8?q?=20work=20correctly=20on=20Macs.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20'Hamish',=20fixed=20a=20bug=20that=20caused=20?= =?UTF-8?q?the=20roiManager=20=20=20=20=20=20=20=20=20("delete")=20macro?= =?UTF-8?q?=20function=20to=20throw=20an=20exception=20when=20used=20in=20?= =?UTF-8?q?a=20=20=20=20=20=20=20=20=20loop.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20cau?= =?UTF-8?q?sed=20one=20column=20=20=20=20=20=20=20=20=20results=20tables?= =?UTF-8?q?=20to=20not=20be=20displayed=20correctly.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20File>Import>Raw=20=20=20=20=20=20=20=20=20to=20s?= =?UTF-8?q?ilently=20fail=20when=20importing=20a=20stack=20and=20the=20fil?= =?UTF-8?q?e=20size=20was=20=20=20=20=20=20=20=20=20smaller=20than=20the?= =?UTF-8?q?=20size=20of=20a=20single=20image.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20the=20=20=20=20=20=20=20=20=20Overlay.drawString?= =?UTF-8?q?()=20macro=20function=20to=20not=20correctly=20display=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20right-justified=20text.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20bugs=20that?= =?UTF-8?q?=20caused=20the=20run=20=20=20=20=20=20=20=20=20("Raw...",optio?= =?UTF-8?q?ns)=20and=20run("Image=20Sequence...",options)=20macro=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20functions=20to=20fail=20silently=20if=20the?= =?UTF-8?q?=20file=20or=20folder=20did=20not=20exist.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20t?= =?UTF-8?q?hat=20caused=20the=20stack=20title=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20be=20incorrect=20after=20importing=20an=20image=20sequence?= =?UTF-8?q?=20on=20Windows=20=20=20=20=20=20=20=20=20using=20a=20file=20pa?= =?UTF-8?q?th=20with=20forward=20slashes.=20=20=20=20=20=20=20=E2=96=A1=20?= =?UTF-8?q?Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20File>Open=20Next=20=20=20=20=20=20=20=20=20to=20not=20correc?= =?UTF-8?q?tly=20open=20a=20non-composite=20image=20after=20having=20opene?= =?UTF-8?q?d=20=20=20=20=20=20=20=20=20a=20composite=20image.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Ved=20Sharma,=20fixed=20an?= =?UTF-8?q?=20ROI=20Manager=20bug=20that=20caused=20a=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20"Rename=20ROI"=20dialog=20do=20be=20unexpectadly=20displa?= =?UTF-8?q?yed=20when=20running=20=20=20=20=20=20=20=20=20macro=20using=20?= =?UTF-8?q?setKeyDown("alt")=20and=20makeOval()=20to=20create=20a=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20composite=20selection.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Ved=20Sharma,=20fixed=20an=20ROI=20Ma?= =?UTF-8?q?nager=20bug=20that=20caused=20an=20=20=20=20=20=20=20=20=20exce?= =?UTF-8?q?ption=20when=20saving=20an=20ROI=20set=20containing=20a=20point?= =?UTF-8?q?=20selection=20=20=20=20=20=20=20=20=20followed=20by=20a=20comp?= =?UTF-8?q?osite=20selection.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20Salim=20Kanoun,=20fixed=20a=20bug=20that=20caused=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20RoiManager.addRoi(roi)=20calls=20to=20be=20ig?= =?UTF-8?q?nored=20if=20the=20ROI=20was=20a=20=20=20=20=20=20=20=20=20dupl?= =?UTF-8?q?icate.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20'TMC',=20f?= =?UTF-8?q?ixed=20a=20bug=20that=20caused=20the=20ROI=20Manager's=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20"Interpolate=20ROIs"=20command=20to=20throw?= =?UTF-8?q?=20an=20exception.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to?= =?UTF-8?q?=20'Agnieszka',=20fixed=20a=20bug=20that=20caused=20the=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20ImagePlus.getFileInfo()=20method=20to=20th?= =?UTF-8?q?row=20a=20NullPointerException.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20that=20cau?= =?UTF-8?q?sed=20the=20Macros>=20=20=20=20=20=20=20=20=20Evaluate=20comman?= =?UTF-8?q?ds=20in=20the=20text=20editor=20to=20not=20update=20the=20Windo?= =?UTF-8?q?w=20=20=20=20=20=20=20=20=20menu.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Norbert=20Vischer,=20fixed=20a=20bug=20that=20?= =?UTF-8?q?caused=20the=20macro=20=20=20=20=20=20=20=20=20editor=20to=20no?= =?UTF-8?q?t=20always=20abort=20any=20existing=20macro=20before=20running?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20another=20one.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Manel=20Bosch,=20fixed=20a=201.52e=20?= =?UTF-8?q?regression=20that=20caused=20=20=20=20=20=20=20=20=20image=20co?= =?UTF-8?q?nversions=20to=20RGB=20to=20not=20preserve=20the=20color=20codi?= =?UTF-8?q?ng.=20=20=20=E2=80=A2=201.52e=2011=20July=202018=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20The=20"Threshold"=20tool=20no=20longer=20rese?= =?UTF-8?q?ts=20the=20display=20range=20of=20=20=20=20=20=20=20=20=2016-bi?= =?UTF-8?q?t=20and=2032-bit=20images.=20=20=20=20=20=20=20=E2=96=A1=20Rest?= =?UTF-8?q?ored=20the=20"Set"=20button=20(removed=20in=201.51r)=20to=20the?= =?UTF-8?q?=20"Threshold"=20=20=20=20=20=20=20=20=20dialog,=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Kai=20Schleicher,=20the=20optio?= =?UTF-8?q?ns=20string=20of=20the=20=20=20=20=20=20=20=20=20FolderOpener.o?= =?UTF-8?q?pen(dir,options)=20method=20can=20now=20include=20a=20file=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20name=20filter=20(example).=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Added=20a=20no-argument=20constructor=20to?= =?UTF-8?q?=20the=20PointRoi=20class=20(example=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?at=20Help>Examples>JavaScript>Points).=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Added=20the=20Roi.size()=20method,=20equivalent=20t?= =?UTF-8?q?o=20Roi.getPolygon=20=20=20=20=20=20=20=20=20().npoints.=20=20?= =?UTF-8?q?=20=20=20=20=20=E2=96=A1=20Added=20the=20FFT.forward(),=20FFT.m?= =?UTF-8?q?ultiply(),=20FFT.inverse()=20and=20=20=20=20=20=20=20=20=20FFT.?= =?UTF-8?q?filter()=20methods=20(JavaScript=20example).=20=20=20=20=20=20?= =?UTF-8?q?=20=E2=96=A1=20The=20open("/path/to/file.avi")=20macro=20functi?= =?UTF-8?q?on=20and=20the=20=20=20=20=20=20=20=20=20IJ.openImage("/path/to?= =?UTF-8?q?/file.avi")=20method=20now=20open=20AVI=20files=20by=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20default=20as=20virtual=20stacks.=20=20=20=20?= =?UTF-8?q?=20=20=20=E2=96=A1=20Thanks=20to=20Volko=20Straub=20and=20Micha?= =?UTF-8?q?el=20Schmid,=20fixed=20bugs=20that=20=20=20=20=20=20=20=20=20ca?= =?UTF-8?q?used=20the=20ImageProcessor.isInvertedLut()=20and=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20ImageProcessor.isColorLut()=20methods=20to=20som?= =?UTF-8?q?etimes=20incorrectly=20=20=20=20=20=20=20=20=20return=20'true'?= =?UTF-8?q?=20with=20thresholded=20images.=20=20=20=20=20=20=20=E2=96=A1?= =?UTF-8?q?=20Thanks=20to=20Volko=20Straub,=20fixed=20a=20bug=20that=20cou?= =?UTF-8?q?ld=20cause=20=20=20=20=20=20=20=20=20non-thresholded=20pixels?= =?UTF-8?q?=20in=2016-bit=20and=2032-bit=20images=20to=20be=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20highlighted=20in=20red=20(example).=20=20=20=20=20?= =?UTF-8?q?=20=20=E2=96=A1=20Thanks=20to=20Thomas=20Boudier=20and=20Jan=20?= =?UTF-8?q?Eglinger,=20fixed=20a=20bug=20that=20=20=20=20=20=20=20=20=20ca?= =?UTF-8?q?used=20macro=20file=20name=20parameters=20containing=20a=20"]"?= =?UTF-8?q?=20character=20to=20=20=20=20=20=20=20=20=20not=20be=20read=20c?= =?UTF-8?q?orrectly.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Michael?= =?UTF-8?q?=20Nonet,=20fixed=20a=20bug=20caused=20the=20median=20to=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20always=20be=20set=20to=20zero=20when=20mea?= =?UTF-8?q?suring=20line=20selections.=20=20=20=20=20=20=20=E2=96=A1=20Tha?= =?UTF-8?q?nks=20to=20Norbert=20Vischer,=20fixed=20a=20bug=20that=20caused?= =?UTF-8?q?=20errors=20after=20=20=20=20=20=20=20=20=20running=20the=20run?= =?UTF-8?q?("RGB=20Stack")=20or=20run("HSB=20Stack")=20macro=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20functions=20on=20large=20images=20when=20running?= =?UTF-8?q?=20Java=208=20on=20macOS.=20=20=20=20=20=20=20=E2=96=A1=20Thank?= =?UTF-8?q?s=20to=20Chris=20Wood=20and=20Curtis=20Rueden,=20fixed=20a=20bu?= =?UTF-8?q?g=20that=20caused=20=20=20=20=20=20=20=20=20the=20Image>Stacks>?= =?UTF-8?q?Delete=20Slice=20command=20to=20deadlock=20when=20deleting=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20the=20last=20channel=20of=20a=20hyperst?= =?UTF-8?q?ack.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20Stein=20Rorv?= =?UTF-8?q?ik,=20fixed=20a=20bug=20that=20caused=20the=20Process>=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20Math>NaN=20Background=20command=20to=20throw?= =?UTF-8?q?=20an=20exception=20when=20=20=20=20=20=20=20=20=20attempting?= =?UTF-8?q?=20to=20process=20a=20non-32-bit=20stack.=20=20=20=20=20=20=20?= =?UTF-8?q?=E2=96=A1=20Thanks=20to=20Stein=20Rorvik,=20fixed=20a=20bug=20o?= =?UTF-8?q?n=20Windows=20that=20caused=20text=20=20=20=20=20=20=20=20=20to?= =?UTF-8?q?=20be=20pasted=20into=20text=20editor=20windows=20at=20the=20wr?= =?UTF-8?q?ong=20position.=20=20=20=20=20=20=20=E2=96=A1=20Thanks=20to=20S?= =?UTF-8?q?tein=20Rorvik,=20fixed=20a=20bug=20that=20caused=20print("?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ") 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. --- ij/IJ.java | 4 +- ij/ImageJ.java | 38 +- ij/ImagePlus.java | 17 +- ij/VirtualStack.java | 2 +- ij/WindowManager.java | 15 + ij/gui/GUI.java | 2 +- ij/gui/GenericDialog.java | 9 +- ij/gui/ImageCanvas.java | 3 +- ij/gui/ImageWindow.java | 4 +- ij/gui/NonBlockingGenericDialog.java | 1 + ij/gui/PlotContentsDialog.java | 3 +- ij/gui/PlotDialog.java | 3 +- ij/gui/ProfilePlot.java | 12 +- ij/gui/Toolbar.java | 52 +- ij/gui/WaitForUserDialog.java | 19 +- ij/io/DirectoryChooser.java | 6 +- ij/io/DragAndDropHandler.java | 95 +++ ij/io/FileOpener.java | 48 +- ij/io/FileSaver.java | 6 +- ij/io/ImageReader.java | 12 +- ij/io/ImportDialog.java | 6 +- ij/io/OpenDialog.java | 9 +- ij/io/Opener.java | 14 +- ij/io/SaveDialog.java | 4 + ij/macro/Functions.java | 10 +- ij/macro/Interpreter.java | 25 +- ij/measure/Calibration.java | 47 +- ij/plugin/Colors.java | 5 +- ij/plugin/Compiler.java | 4 +- ij/plugin/CompositeConverter.java | 25 +- ij/plugin/Duplicator.java | 8 +- ij/plugin/FITS_Reader.java | 9 +- ij/plugin/FileInfoVirtualStack.java | 22 +- ij/plugin/FolderOpener.java | 89 ++- ij/plugin/ImageInfo.java | 2 +- ij/plugin/ImagesToStack.java | 12 +- ij/plugin/OverlayCommands.java | 2 +- ij/plugin/RoiEnlarger.java | 2 +- ij/plugin/ScaleBar.java | 1011 ++++++++++++++++-------- ij/plugin/Selection.java | 24 +- ij/plugin/SimpleCommands.java | 4 +- ij/plugin/StackEditor.java | 2 +- ij/plugin/StackWriter.java | 9 +- ij/plugin/Startup.java | 5 +- ij/plugin/ThreadLister.java | 13 + ij/plugin/filter/Duplicater.java | 2 +- ij/plugin/filter/ImageMath.java | 6 +- ij/plugin/filter/ParticleAnalyzer.java | 2 +- ij/plugin/frame/ColorPicker.java | 6 +- ij/plugin/frame/RoiManager.java | 87 +- ij/process/ByteStatistics.java | 6 +- ij/process/ColorStatistics.java | 6 +- ij/process/FHT.java | 6 +- ij/process/FloatProcessor.java | 17 +- ij/process/FloatStatistics.java | 12 +- ij/process/IntProcessor.java | 10 +- ij/process/ShortProcessor.java | 10 +- ij/process/ShortStatistics.java | 6 +- ij/process/StackConverter.java | 3 + ij/process/StackStatistics.java | 6 +- ij/text/TextCanvas.java | 3 +- ij/text/TextPanel.java | 3 +- ij/util/Tools.java | 16 +- release-notes.html | 92 +++ 64 files changed, 1457 insertions(+), 556 deletions(-) create mode 100644 ij/io/DragAndDropHandler.java diff --git a/ij/IJ.java b/ij/IJ.java index ec26f99ea..08b9ab0ae 100644 --- a/ij/IJ.java +++ b/ij/IJ.java @@ -386,8 +386,8 @@ private static String convert(String command) { commandTable.put("Line Graph (21K)", "Line Graph"); commandTable.put("Mitosis (26MB, 5D stack)", "Mitosis (5D stack)"); commandTable.put("MRI Stack (528K)", "MRI Stack"); - commandTable.put("M51 Galaxy (177K, 16-bits)", "M51 Galaxy (16-bits))"); - commandTable.put("Neuron (1.6M, 5 channels", "Neuron (5 channels"); + commandTable.put("M51 Galaxy (177K, 16-bits)", "M51 Galaxy (16-bits)"); + commandTable.put("Neuron (1.6M, 5 channels)", "Neuron (5 channels)"); commandTable.put("Nile Bend (1.9M)", "Nile Bend"); commandTable.put("Organ of Corti (2.8M, 4D stack)", "Organ of Corti (4D stack)"); commandTable.put("Particles (75K)", "Particles"); diff --git a/ij/ImageJ.java b/ij/ImageJ.java index 205b5ad77..bcf21a17e 100644 --- a/ij/ImageJ.java +++ b/ij/ImageJ.java @@ -17,6 +17,7 @@ import java.awt.image.*; import javax.swing.ImageIcon; import javax.swing.JLabel; +import javax.swing.SwingUtilities; /** This frame is the main ImageJ class. @@ -77,8 +78,8 @@ public class ImageJ extends Frame implements ActionListener, MouseListener, KeyListener, WindowListener, ItemListener, Runnable { /** Plugins should call IJ.getVersion() or IJ.getFullVersion() to get the version string. */ - public static final String VERSION = "1.53k"; - public static final String BUILD = ""; //19 + public static final String VERSION = "1.53m"; + public static final String BUILD = ""; //41 public static Color backgroundColor = new Color(237,237,237); /** SansSerif, 12-point, plain font. */ public static final Font SansSerif12 = new Font("SansSerif", Font.PLAIN, 12); @@ -224,6 +225,10 @@ public ImageJ(java.applet.Applet applet, int mode) { } if (applet==null) IJ.runPlugIn("ij.plugin.DragAndDrop", ""); + if (!getTitle().contains("Fiji")) { + Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler()); + System.setProperty("sun.awt.exception.handler",ExceptionHandler.class.getName()); + } String str = m.getMacroCount()==1?" macro":" macros"; configureProxy(); if (applet==null) @@ -885,5 +890,34 @@ public void resize() { progressBar.init((int)(ProgressBar.WIDTH*scale), (int)(ProgressBar.HEIGHT*scale)); pack(); } + + /** Handles exceptions on the EDT. */ + public static class ExceptionHandler implements Thread.UncaughtExceptionHandler { + + // for EDT exceptions + public void handle(Throwable thrown) { + handleException(Thread.currentThread().getName(), thrown); + } + + // for other uncaught exceptions + public void uncaughtException(Thread thread, Throwable thrown) { + handleException(thread.getName(), thrown); + } + + protected void handleException(String tname, Throwable e) { + if (Macro.MACRO_CANCELED.equals(e.getMessage())) + return; + CharArrayWriter caw = new CharArrayWriter(); + PrintWriter pw = new PrintWriter(caw); + e.printStackTrace(pw); + String s = caw.toString(); + if (s!=null && s.contains("ij.")) { + if (IJ.getInstance()!=null) + s = IJ.getInstance().getInfo()+"\n"+s; + IJ.log(s); + } + } + + } // inner class ExceptionHandler } diff --git a/ij/ImagePlus.java b/ij/ImagePlus.java index b97570911..c7c8c51ab 100644 --- a/ij/ImagePlus.java +++ b/ij/ImagePlus.java @@ -103,6 +103,7 @@ public class ImagePlus implements ImageObserver, Measurements, Cloneable { private Plot plot; private Properties imageProperties; private Color borderColor; + private boolean temporary; /** Constructs an uninitialized ImagePlus. */ @@ -164,6 +165,14 @@ public ImagePlus(String title, ImageStack stack) { private void setID() { ID = --currentID; } + + public void setTemporary() { + if (!temporary) { + temporary = true; + currentID++; + ID = -Integer.MAX_VALUE; + } + } /** Locks the image so other threads can test to see if it is in use. * One thread can lock an image multiple times, then it has to unlock @@ -472,7 +481,7 @@ public void show() { /** Opens a window to display this image and displays 'statusMessage' in the status bar. */ public void show(String statusMessage) { - if (isVisible()) + if (isVisible() || temporary) return; win = null; if ((IJ.isMacro() && ij==null) || Interpreter.isBatchMode()) { @@ -820,7 +829,7 @@ public void setStack(ImageStack newStack, int channels, int slices, int frames) private synchronized void setStackNull() { if (oneSliceStack && stack!=null && stack.size()>0) { String label = stack.getSliceLabel(1); - setProperty("Label", label); + setProp("Slice_Label", label); } stack = null; oneSliceStack = false; @@ -1681,7 +1690,7 @@ public ImageStack getStack() { ImageProcessor ip2 = getProcessor(); if (ip2==null) return s; - String label = (String)getProperty("Label"); + String label = getProp("Slice_Label"); if (label==null) { String info = (String)getProperty("Info"); label = info!=null?getTitle()+"\n"+info:null; // DICOM metadata @@ -2929,6 +2938,8 @@ public void copyToSystem() { } protected void notifyListeners(final int id) { + if (temporary) + return; final ImagePlus imp = this; EventQueue.invokeLater(new Runnable() { public void run() { diff --git a/ij/VirtualStack.java b/ij/VirtualStack.java index 10dcaec96..658badf7d 100644 --- a/ij/VirtualStack.java +++ b/ij/VirtualStack.java @@ -177,7 +177,7 @@ public ImageProcessor getProcessor(int n) { Opener opener = new Opener(); opener.setSilentMode(true); IJ.redirectErrorMessages(true); - ImagePlus imp = opener.openImage(path+names[n-1]); + ImagePlus imp = opener.openTempImage(path, names[n-1]); IJ.redirectErrorMessages(false); ImageProcessor ip = null; int depthThisImage = 0; diff --git a/ij/WindowManager.java b/ij/WindowManager.java index c6d4022b8..a957ac79a 100644 --- a/ij/WindowManager.java +++ b/ij/WindowManager.java @@ -333,6 +333,21 @@ static boolean isDuplicateName(String name) { } return false; } + + /* + static boolean isDuplicateBatchModeName(String name) { + int[] list = getIDList(); + for (int i=0; i0) { @@ -555,7 +555,7 @@ public Component add(Component comp) { } public void maximize() { - if (GenericDialog.getInstance()!=null) + if (GenericDialog.getInstance()!=null && IJ.isMacOSX() && IJ.isJava18()) return; // workaround for OSX/Java 8 maximize bug Rectangle rect = getMaximumBounds(); if (IJ.debugMode) IJ.log("maximize: "+rect); diff --git a/ij/gui/NonBlockingGenericDialog.java b/ij/gui/NonBlockingGenericDialog.java index 3e6e34dc3..55dc6b373 100644 --- a/ij/gui/NonBlockingGenericDialog.java +++ b/ij/gui/NonBlockingGenericDialog.java @@ -16,6 +16,7 @@ public NonBlockingGenericDialog(String title) { super(title, null); setModal(false); IJ.protectStatusBar(false); + instance = this; } public synchronized void showDialog() { diff --git a/ij/gui/PlotContentsDialog.java b/ij/gui/PlotContentsDialog.java index 35a49602a..c3ccdb052 100644 --- a/ij/gui/PlotContentsDialog.java +++ b/ij/gui/PlotContentsDialog.java @@ -267,7 +267,8 @@ else if (dialogType == ADD_FIT) } public boolean dialogItemChanged(GenericDialog gd, AWTEvent e) { - if (e == null) return true; //gets called with e=null upon OK + if (e==null) + return true; //gets called with e=null upon OK boolean setStyle = false; if (dialogType == STYLE) { int objectIndex = objectChoice.getSelectedIndex(); // no getNextChoice since Choices depend on dialog type diff --git a/ij/gui/PlotDialog.java b/ij/gui/PlotDialog.java index abaf8246e..55289d56e 100644 --- a/ij/gui/PlotDialog.java +++ b/ij/gui/PlotDialog.java @@ -297,7 +297,8 @@ else if (dialogType == SET_RANGE) * the fields must be exactly the same as those for setting up the fields in 'setupDialog' (fields must be * also read in the same sequence). */ public boolean dialogItemChanged(GenericDialog gd, AWTEvent e) { - if (dialogShowing && e == null) return true; //gets called with e=null upon OK; ignore this + if (dialogShowing && e==null) + return true; //gets called with e=null upon OK; ignore this boolean livePlot = plot.plotMaker != null; if (dialogType == SET_RANGE || dialogType == X_AXIS) { diff --git a/ij/gui/ProfilePlot.java b/ij/gui/ProfilePlot.java index 638049753..875a295fe 100644 --- a/ij/gui/ProfilePlot.java +++ b/ij/gui/ProfilePlot.java @@ -323,13 +323,15 @@ public static double[] getColumnAverageProfile(Rectangle rect, ImageProcessor ip void findMinAndMax() { if (profile==null) return; - double min = Double.MAX_VALUE; - double max = -Double.MAX_VALUE; + double min = profile[0]; + double max = profile[0]; double value; - for (int i=0; imax) max=value; + if (valuemax) + max = value; } this.min = min; this.max = max; diff --git a/ij/gui/Toolbar.java b/ij/gui/Toolbar.java index a3efe6f0a..a53dcafff 100644 --- a/ij/gui/Toolbar.java +++ b/ij/gui/Toolbar.java @@ -97,6 +97,7 @@ public class Toolbar extends Canvas implements MouseListener, MouseMotionListene private String currentSet = "Startup Macros"; private Timer pressTimer; private static int longClickDelay = 600; //ms + private boolean disableRecording; private static Color foregroundColor = Prefs.getColor(Prefs.FCOLOR,Color.white); private static Color backgroundColor = Prefs.getColor(Prefs.BCOLOR,Color.black); @@ -246,6 +247,7 @@ void addPopupMenus() { pickerPopup.addSeparator(); addMenuItem(pickerPopup, "Foreground..."); addMenuItem(pickerPopup, "Background..."); + addMenuItem(pickerPopup, "Colors..."); addMenuItem(pickerPopup, "Color Picker..."); add(pickerPopup); @@ -894,10 +896,12 @@ private void setTool2(int tool) { showMessage(current); if (Recorder.record) { String name = getName(current); - if (name!=null) { + if (name!=null && name.equals("dropper")) disableRecording=true; + if (name!=null && !disableRecording) { IJ.wait(100); // workaround for OSX/Java 8 bug Recorder.record("setTool", name); } + if (name!=null && !name.equals("dropper")) disableRecording=false; } if (legacyMode) repaint(); @@ -1594,7 +1598,7 @@ public static void restoreTools() { } } - private void installStartupMacros() { + private void installStartupMacros() { resetTools(); String path = IJ.getDir("macros")+"StartupMacros.txt"; File f = new File(path); @@ -1644,34 +1648,40 @@ else if ("Set...".equals(cmd)) IJ.runPlugIn("ij.plugin.Zoom", "set"); else if ("Maximize".equals(cmd)) IJ.runPlugIn("ij.plugin.Zoom", "max"); - setTool(previousTool); + disableRecording = true; + setTool(previousTool); + disableRecording = false; return; } if (pickerPopup==popup) { if ("White/Black".equals(cmd)) { - setForegroundColor(Color.white); - setBackgroundColor(Color.black); + setAndRecordForgroundColor(Color.white); + setAndRecordBackgroundColor(Color.black); } else if ("Black/White".equals(cmd)) { - setForegroundColor(Color.black); - setBackgroundColor(Color.white); + setAndRecordForgroundColor(Color.black); + setAndRecordBackgroundColor(Color.white); } else if ("Red".equals(cmd)) - setForegroundColor(Color.red); + setAndRecordForgroundColor(Color.red); else if ("Green".equals(cmd)) - setForegroundColor(Color.green); + setAndRecordForgroundColor(Color.green); else if ("Blue".equals(cmd)) - setForegroundColor(Color.blue); + setAndRecordForgroundColor(Color.blue); else if ("Yellow".equals(cmd)) - setForegroundColor(Color.yellow); + setAndRecordForgroundColor(Color.yellow); else if ("Cyan".equals(cmd)) - setForegroundColor(Color.cyan); + setAndRecordForgroundColor(Color.cyan); else if ("Magenta".equals(cmd)) - setForegroundColor(Color.magenta); + setAndRecordForgroundColor(Color.magenta); else if ("Foreground...".equals(cmd)) - setForegroundColor(new ColorChooser("Select Foreground Color", foregroundColor, false).getColor()); + setAndRecordForgroundColor(new ColorChooser("Select Foreground Color", foregroundColor, false).getColor()); else if ("Background...".equals(cmd)) - setBackgroundColor(new ColorChooser("Select Background Color", backgroundColor, false).getColor()); - else + setAndRecordBackgroundColor(new ColorChooser("Select Background Color", backgroundColor, false).getColor()); + else if ("Colors...".equals(cmd)) { + IJ.run("Colors...", ""); + Recorder.setForegroundColor(getForegroundColor()); + Recorder.setBackgroundColor(getBackgroundColor()); + } else IJ.run("Color Picker...", ""); if (!"Color Picker".equals(cmd)) ColorPicker.update(); @@ -1691,6 +1701,16 @@ else if ("Background...".equals(cmd)) tools[tool].runMenuTool(names[tool], cmd); } + private void setAndRecordForgroundColor(Color color) { + setForegroundColor(color); + Recorder.setForegroundColor(color); + } + + private void setAndRecordBackgroundColor(Color color) { + setBackgroundColor(color); + Recorder.setBackgroundColor(color); + } + public Dimension getPreferredSize(){ return ps; } diff --git a/ij/gui/WaitForUserDialog.java b/ij/gui/WaitForUserDialog.java index 5f2db2d15..31a758c2a 100644 --- a/ij/gui/WaitForUserDialog.java +++ b/ij/gui/WaitForUserDialog.java @@ -15,6 +15,7 @@ */ public class WaitForUserDialog extends Dialog implements ActionListener, KeyListener { protected Button button; + protected Button cancelButton; protected MultiLineLabel label; static protected int xloc=-1, yloc=-1; private boolean escPressed; @@ -33,15 +34,25 @@ public WaitForUserDialog(String title, String text) { GridBagLayout gridbag = new GridBagLayout(); //set up the layout GridBagConstraints c = new GridBagConstraints(); setLayout(gridbag); - c.insets = new Insets(6, 6, 0, 6); + c.insets = new Insets(6, 6, 0, 6); c.gridx = 0; c.gridy = 0; c.anchor = GridBagConstraints.WEST; add(label,c); + button = new Button(" OK "); button.addActionListener(this); button.addKeyListener(this); c.insets = new Insets(2, 6, 6, 6); - c.gridx = 0; c.gridy = 2; c.anchor = GridBagConstraints.EAST; + c.gridx = 0; c.gridy = 1; c.anchor = GridBagConstraints.EAST; add(button, c); + + if (IJ.isMacro()) { + cancelButton = new Button(" Cancel "); + cancelButton.addActionListener(this); + cancelButton.addKeyListener(this); + c.anchor = GridBagConstraints.WEST; //same as OK button but WEST + add(cancelButton, c); + } + setResizable(false); addKeyListener(this); GUI.scale(this); @@ -73,6 +84,10 @@ public void close() { } public void actionPerformed(ActionEvent e) { + String s = e.getActionCommand(); + if(s.indexOf("Cancel") >= 0){ + escPressed = true; + } close(); } diff --git a/ij/io/DirectoryChooser.java b/ij/io/DirectoryChooser.java index 803e731fa..f2944ad76 100644 --- a/ij/io/DirectoryChooser.java +++ b/ij/io/DirectoryChooser.java @@ -40,11 +40,13 @@ public void run() { JFileChooser chooser = new JFileChooser(); chooser.setDialogTitle(title); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + chooser.setDragEnabled(true); + chooser.setTransferHandler(new DragAndDropHandler(chooser)); String defaultDir = OpenDialog.getDefaultDirectory(); if (defaultDir!=null) { File f = new File(defaultDir); if (IJ.debugMode) - IJ.log("DirectoryChooser,setSelectedFile: "+f); + IJ.log("DirectoryChooser,setSelectedFileW: "+f); chooser.setSelectedFile(f); } chooser.setApproveButtonText("Select"); @@ -66,6 +68,8 @@ void getDirectoryUsingJFileChooserOnThisThread(final String title) { JFileChooser chooser = new JFileChooser(); chooser.setDialogTitle(title); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + chooser.setDragEnabled(true); + chooser.setTransferHandler(new DragAndDropHandler(chooser)); String defaultDir = OpenDialog.getDefaultDirectory(); if (defaultDir!=null) { File f = new File(defaultDir); diff --git a/ij/io/DragAndDropHandler.java b/ij/io/DragAndDropHandler.java new file mode 100644 index 000000000..d14227f4e --- /dev/null +++ b/ij/io/DragAndDropHandler.java @@ -0,0 +1,95 @@ +package ij.io; +import ij.*; +import ij.gui.*; +import ij.plugin.frame.Recorder; +import ij.util.Java2; +import java.awt.*; +import java.io.*; +import java.util.ArrayList; //no need to import java.util.List; it would be ambiguous because of java.awt.List +import java.net.URI; +import java.net.URISyntaxException; +import javax.swing.*; +import javax.swing.filechooser.*; +import java.awt.datatransfer.*; + +/** This class handles drag&drop onto JFileChoosers. */ + public class DragAndDropHandler extends TransferHandler { + private JFileChooser jFileChooser; + + /** Given a JFileChooser 'fc', this is how to use this class: + *
      +	 *     fc.setDragEnabled(true);
      +	 *     fc.setTransferHandler(new DragAndDropHandler(fc));
      +	 * 
      + */ + public DragAndDropHandler(JFileChooser jFileChooser) { + super(); + this.jFileChooser = jFileChooser; + } + + /** Returns whether any of the transfer flavors is supported */ + public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) { + for (DataFlavor dataFlavor : transferFlavors) { + if (isSupportedTransferFlavor(dataFlavor)) + return true; + } + return false; + } + + /** Imports the drag&drop file or list of files and sets the JFileChooser to this. + * Returns true if successful */ + public boolean importData(JComponent comp, Transferable t) { + DataFlavor[] transferFlavors = t.getTransferDataFlavors(); + for (DataFlavor dataFlavor : transferFlavors) { + try { + java.util.List fileList = null; + if (dataFlavor.isFlavorJavaFileListType()) { + fileList = (java.util.List)t.getTransferData(DataFlavor.javaFileListFlavor); + if (IJ.debugMode) IJ.log("dragAndDrop FileList size="+fileList.size()+" first: "+fileList.get(0)); + } else if (isSupportedTransferFlavor(dataFlavor)) { + String str = (String)t.getTransferData(dataFlavor); + if (IJ.debugMode) IJ.log("dragAndDrop str="+str); + String[] strs = str.split("[\n\r]+"); //multiple files are separate lines + fileList = new ArrayList(strs.length); + for (String s : strs) { + if (s.length() > 0) { + File file = new File(s); //Try whether it is a plain path (pointing to an existing file) + if (!file.exists()) try { + file = new File(new URI(s)); //When not successful, try a whether it is a URL, e.g. file:///absolute/path/to/file + } catch (URISyntaxException e) {continue;} + if (file.exists()) //We only accept drag&drop of existing files + fileList.add(file); + } + } + } + if (fileList == null || fileList.size() ==0) continue; //this data flavor did not work + + File firstFile = fileList.get(0); + if (jFileChooser.isMultiSelectionEnabled()) { //multiple files accepted + File dir = firstFile.getParentFile(); + jFileChooser.setCurrentDirectory(dir); + File[] files = fileList.toArray(new File[0]); + jFileChooser.setSelectedFiles(files); + } else { + File file = firstFile; //single file required; if we get more take the first one + if (jFileChooser.getFileSelectionMode() == JFileChooser.DIRECTORIES_ONLY && !file.isDirectory()) + file = file.getParentFile(); //if a directory is required and we get a file, use its directory + if (jFileChooser.getDialogType() == JFileChooser.SAVE_DIALOG && file.isDirectory()) + jFileChooser.setCurrentDirectory(file); //in a save operation, if we get a directory, move there + else + jFileChooser.setSelectedFile(file); + } + jFileChooser.rescanCurrentDirectory(); + return true; + } catch (Exception e) {if (IJ.debugMode) IJ.handleException(e);} + } + return false; + } + + /** Returns whether this transfer flavor is supported. We support File Lists and Strings (plain or as list of URLs). */ + public boolean isSupportedTransferFlavor(DataFlavor flavor) { + return flavor.isFlavorJavaFileListType() || + (flavor.getRepresentationClass() == String.class && + (flavor.getMimeType().startsWith("text/uri-list") || flavor.getMimeType().startsWith("text/plain"))); + } +} diff --git a/ij/io/FileOpener.java b/ij/io/FileOpener.java index 189586f11..202121a1c 100644 --- a/ij/io/FileOpener.java +++ b/ij/io/FileOpener.java @@ -159,7 +159,7 @@ else if (fi.description.indexOf("mode=gray")!=-1) if (fi.info!=null) imp.setProperty("Info", fi.info); if (fi.sliceLabels!=null&&fi.sliceLabels.length==1&&fi.sliceLabels[0]!=null) - imp.setProperty("Label", fi.sliceLabels[0]); + imp.setProp("Slice_Label", fi.sliceLabels[0]); if (fi.plot!=null) try { Plot plot = new Plot(imp, new ByteArrayInputStream(fi.plot)); imp.setProperty(Plot.PROPERTY_KEY, plot); @@ -174,6 +174,52 @@ else if (fi.description.indexOf("mode=gray")!=-1) return imp; } + public ImageProcessor openProcessor() { + Object pixels; + ProgressBar pb=null; + ImageProcessor ip = null; + ColorModel cm = createColorModel(fi); + switch (fi.fileType) { + case FileInfo.GRAY8: + case FileInfo.COLOR8: + case FileInfo.BITMAP: + pixels = readPixels(fi); + if (pixels==null) return null; + ip = new ByteProcessor(width, height, (byte[])pixels, cm); + break; + case FileInfo.GRAY16_SIGNED: + case FileInfo.GRAY16_UNSIGNED: + case FileInfo.GRAY12_UNSIGNED: + pixels = readPixels(fi); + if (pixels==null) return null; + ip = new ShortProcessor(width, height, (short[])pixels, cm); + break; + case FileInfo.GRAY32_INT: + case FileInfo.GRAY32_UNSIGNED: + case FileInfo.GRAY32_FLOAT: + case FileInfo.GRAY24_UNSIGNED: + case FileInfo.GRAY64_FLOAT: + pixels = readPixels(fi); + if (pixels==null) return null; + ip = new FloatProcessor(width, height, (float[])pixels, cm); + break; + case FileInfo.RGB: + case FileInfo.BGR: + case FileInfo.ARGB: + case FileInfo.ABGR: + case FileInfo.BARG: + case FileInfo.RGB_PLANAR: + case FileInfo.CMYK: + pixels = readPixels(fi); + if (pixels==null) return null; + ip = new ColorProcessor(width, height, (int[])pixels); + if (fi.fileType==FileInfo.CMYK) + ip.invert(); + break; + } + return ip; + } + void setOverlay(ImagePlus imp, byte[][] rois) { Overlay overlay = new Overlay(); Overlay proto = null; diff --git a/ij/io/FileSaver.java b/ij/io/FileSaver.java index 0af96b22e..a7ef326ba 100644 --- a/ij/io/FileSaver.java +++ b/ij/io/FileSaver.java @@ -101,10 +101,10 @@ public boolean saveAsTiff(String path) { if (imp.getProperty("FHT")!=null && path.contains("FFT of ")) setupFFTSave(); fi.info = imp.getInfoProperty(); - Object label = imp.getProperty("Label"); - if (label!=null && (label instanceof String)) { + String label = imp.isStack()?imp.getStack().getSliceLabel(1):null; + if (label!=null) { fi.sliceLabels = new String[1]; - fi.sliceLabels[0] = (String)label; + fi.sliceLabels[0] = label; } fi.description = getDescriptionString(); if (imp.getProperty(Plot.PROPERTY_KEY) != null) { diff --git a/ij/io/ImageReader.java b/ij/io/ImageReader.java index f111cbf5b..ed929b1f4 100644 --- a/ij/io/ImageReader.java +++ b/ij/io/ImageReader.java @@ -601,8 +601,10 @@ Object readRGB48(InputStream in) throws IOException { value = ((buffer[base+1]&0xff)<<8) | (buffer[base]&0xff); else value = ((buffer[base]&0xff)<<8) | (buffer[base+1]&0xff); - if (valuemax) max = value; + if (valuemax) + max = value; stack[channel][pixel] = (short)(value); channel++; if (channel==channels) { @@ -643,8 +645,10 @@ Object readCompressedRGB48(InputStream in) throws IOException { value = ((buffer[base+1]&0xff)<<8) | (buffer[base]&0xff); else value = ((buffer[base]&0xff)<<8) | (buffer[base+1]&0xff); - if (valuemax) max = value; + if (valuemax) + max = value; stack[channel][pixel] = (short)(value); channel++; if (channel==channels) { diff --git a/ij/io/ImportDialog.java b/ij/io/ImportDialog.java index 88c100c45..d5e328e0e 100644 --- a/ij/io/ImportDialog.java +++ b/ij/io/ImportDialog.java @@ -157,8 +157,10 @@ void openAll(String[] list, FileInfo fi) { } for (int n=1; n<=slices; n++) { ImageProcessor ip = stack2.getProcessor(n); - if (ip.getMin()max) max = ip.getMax(); + if (ip.getMin()max) + max = ip.getMax(); String label = list[i]; if (slices>1) label += "-" + IJ.pad(n,digits); stack.addSlice(label, ip); diff --git a/ij/io/OpenDialog.java b/ij/io/OpenDialog.java index e8e90d153..33090a3cf 100644 --- a/ij/io/OpenDialog.java +++ b/ij/io/OpenDialog.java @@ -10,8 +10,9 @@ import javax.swing.filechooser.*; /** This class displays a dialog window from - which the user can select an input file. */ - public class OpenDialog { + * which the user can select an input file. +*/ +public class OpenDialog { private String dir; private String name; @@ -101,6 +102,8 @@ void jOpen(String title, String path, String fileName) { void jOpenDispatchThread(String title, String path, final String fileName) { JFileChooser fc = new JFileChooser(); fc.setDialogTitle(title); + fc.setDragEnabled(true); + fc.setTransferHandler(new DragAndDropHandler(fc)); File fdir = null; if (path!=null) fdir = new File(path); @@ -126,6 +129,8 @@ void jOpenInvokeAndWait(final String title, final String path, final String file public void run() { JFileChooser fc = new JFileChooser(); fc.setDialogTitle(title); + fc.setDragEnabled(true); + fc.setTransferHandler(new DragAndDropHandler(fc)); File fdir = null; if (path!=null) fdir = new File(path); diff --git a/ij/io/Opener.java b/ij/io/Opener.java index 96429fa3f..547e20551 100644 --- a/ij/io/Opener.java +++ b/ij/io/Opener.java @@ -182,6 +182,8 @@ public void openMultiple() { public void run() { JFileChooser fc = new JFileChooser(); fc.setMultiSelectionEnabled(true); + fc.setDragEnabled(true); + fc.setTransferHandler(new DragAndDropHandler(fc)); File dir = null; String sdir = OpenDialog.getDefaultDirectory(); if (sdir!=null) @@ -372,6 +374,13 @@ public ImagePlus openImage(String directory, String name) { } } + public ImagePlus openTempImage(String directory, String name) { + ImagePlus imp = openImage(directory, name); + if (imp!=null) + imp.setTemporary(); + return imp; + } + // Call HandleExtraFileTypes plugin to see if it can handle unknown formats // or files in TIFF format that the built in reader is unable to open. private ImagePlus openUsingHandleExtraFileTypes(String path) { @@ -1164,9 +1173,10 @@ public static LUT openLut(String filePathOrUrl) { public static void openResultsTable(String path) { try { ResultsTable rt = ResultsTable.open(path); - rt.showRowNumbers(true); - if (rt!=null) + if (rt!=null) { + rt.showRowNumbers(true); rt.show("Results"); + } } catch(IOException e) { IJ.error("Open Results", e.getMessage()); } diff --git a/ij/io/SaveDialog.java b/ij/io/SaveDialog.java index c6e998be7..7101f159a 100644 --- a/ij/io/SaveDialog.java +++ b/ij/io/SaveDialog.java @@ -104,6 +104,8 @@ void jSave(String title, String defaultDir, String defaultName) { void jSaveDispatchThread(String title, String defaultDir, String defaultName) { JFileChooser fc = new JFileChooser(); fc.setDialogTitle(title); + fc.setDragEnabled(true); + fc.setTransferHandler(new DragAndDropHandler(fc)); if (defaultDir!=null) { File f = new File(defaultDir); if (f!=null) @@ -143,6 +145,8 @@ void jSaveInvokeAndWait(final String title, final String defaultDir, final Strin public void run() { JFileChooser fc = new JFileChooser(); fc.setDialogTitle(title); + fc.setDragEnabled(true); + fc.setTransferHandler(new DragAndDropHandler(fc)); if (defaultDir!=null) { File f = new File(defaultDir); if (f!=null) diff --git a/ij/macro/Functions.java b/ij/macro/Functions.java index f74dd48ae..b97997f9d 100644 --- a/ij/macro/Functions.java +++ b/ij/macro/Functions.java @@ -1656,7 +1656,7 @@ String getInfo(String key) { ImagePlus imp = getImage(); String label = null; if (imp.getStackSize()==1) - label = (String)imp.getProperty("Label"); + label = imp.getProp("Slice_Label"); else label = imp.getStack().getShortSliceLabel(imp.getCurrentSlice()); return label!=null?label:""; @@ -2827,7 +2827,7 @@ void exit() { String msg = null; if (interp.nextToken()=='(') { interp.getLeftParen(); - if (isStringArg()) + if (interp.nextToken()!=')') msg = getString(); interp.getRightParen(); } @@ -3098,7 +3098,7 @@ else if (select) { shiftKeyDown = altKeyDown = false; } else rm.select(index); - } else if (cmd.equals("count")) + } else if (cmd.equals("count")||cmd.equals("size")) countOrIndex = rm.getCount(); else if (cmd.equals("index")) countOrIndex = rm.getSelectedIndex(); @@ -4173,8 +4173,6 @@ void setMetadata() { imp.setProperty("Info", metadata); else { imp.getStack().setSliceLabel(metadata, imp.getCurrentSlice()); - if (imp.getStackSize()==1) - imp.setProperty("Label", metadata); if (!Interpreter.isBatchMode()) imp.repaintWindow(); } } @@ -5543,7 +5541,7 @@ void waitForUser() { waitForUserDialog.show(); interp.waitingForUser = false; Interpreter.setInstance(instance); // works around bug caused by use of drawing tools - if (waitForUserDialog.escPressed()) + if (waitForUserDialog.escPressed() || IJ.escapePressed()) throw new RuntimeException(Macro.MACRO_CANCELED); } diff --git a/ij/macro/Interpreter.java b/ij/macro/Interpreter.java index bb5f463f4..84bbe0a61 100644 --- a/ij/macro/Interpreter.java +++ b/ij/macro/Interpreter.java @@ -94,7 +94,10 @@ public void run(String macro) { } /** Runs the specified macro, passing it a string - argument and returning a string value. */ + * argument and returning a string value. + * @see ij.IJ#runMacro(String,String) + * @see ij.IJ#runMacroFile(String,String) + */ public String run(String macro, String arg) { argument = arg; calledMacro = true; @@ -975,6 +978,25 @@ final void doArrayElementAssignment() { if (token==ARRAY_FUNCTION) array[index].setArray(func.getArrayFunction(pgm.table[tokenAddress].type)); break; + case USER_FUNCTION: + int savePC = pc; + getToken(); // the function + boolean simpleFunctionCall = isSimpleFunctionCall(true); + pc = savePC; + if (simpleFunctionCall) { + getToken(); // the function + Variable v2 = runUserFunction(); + if (v2==null) + error("No return value"); + if (done) return; + int type = v2.getType(); + if (type==Variable.VALUE) + array[index].setValue(v2.getValue()); + else + array[index].setString(v2.getString()); + } else + array[index].setValue(getExpression()); + break; default: switch (op) { case '=': array[index].setValue(getExpression()); break; @@ -1026,7 +1048,6 @@ boolean isSimpleFunctionCall(boolean assignment) { int count = 0; do { getToken(); - //IJ.log(pgm.decodeToken(token, tokenAddress)); if (token=='(') count++; else if (token==')') diff --git a/ij/measure/Calibration.java b/ij/measure/Calibration.java index 7bce965fd..123fcea03 100644 --- a/ij/measure/Calibration.java +++ b/ij/measure/Calibration.java @@ -58,9 +58,6 @@ public class Calibration implements Cloneable { /* Z distance unit */ private String zunit; - /* Distance units (e.g. 'microns', 'inches') */ - private String units; - /* Pixel value unit (e.g. 'gray level', 'OD') */ private String valueUnit = DEFAULT_VALUE_UNIT; @@ -100,7 +97,6 @@ public boolean scaled() { /** Sets the default length unit (e.g. "mm", "inch"). */ public void setUnit(String unit) { this.unit = sanitizeUnit(unit); - units = null; } /** Sets the X length unit. */ @@ -154,21 +150,40 @@ public String getZUnit() { return zunit!=null?zunit:unit; } + /** Returns the plural form of the unit passed as argument (e.g. "micron" gives "microns", "inch" gives "inches"). */ + private static String pluralForm(String unit) { + String units; + if (unit.equals("pixel")) + units = "pixels"; + else if (unit.equals("micron")) + units = "microns"; + else if (unit.equals("inch")) + units = "inches"; + else + units = unit; + return units; + } + /** Returns the plural form of the length unit (e.g. "microns", "inches"). */ public String getUnits() { - if (units==null) { - if (unit.equals("pixel")) - units = "pixels"; - else if (unit.equals("micron")) - units = "microns"; - else if (unit.equals("inch")) - units = "inches"; - else - units = unit; - } - return units; + return pluralForm(getUnit()); } - + + /** Returns the plural form of the X length unit (e.g. "microns", "inches"), or of the default unit if 'xunit' is null. */ + public String getXUnits() { + return pluralForm(getXUnit()); + } + + /** Returns the plural form of the Y length unit (e.g. "microns", "inches"), or of the default unit if 'yunit' is null. */ + public String getYUnits() { + return pluralForm(getYUnit()); + } + + /** Returns the plural form of the Z length unit (e.g. "microns", "inches"), or of the default unit if 'zunit' is null. */ + public String getZUnits() { + return pluralForm(getZUnit()); + } + /** Sets the time unit (e.g. "sec", "msec"). */ public void setTimeUnit(String unit) { if (unit==null || unit.equals("")) diff --git a/ij/plugin/Colors.java b/ij/plugin/Colors.java index dd3e8fa7a..e4d17320a 100644 --- a/ij/plugin/Colors.java +++ b/ij/plugin/Colors.java @@ -104,7 +104,8 @@ public static String getColorName(Color c, String defaultName) { } public static Color getColor(String name, Color defaultColor) { - if (name==null) return defaultColor; + if (name==null || name.length()<2) + return defaultColor; name = name.toLowerCase(Locale.US); Color c = defaultColor; if (name.contains(colors[7])) c = Color.black; @@ -128,6 +129,8 @@ public static Color decode(String hexColor) { } public static Color decode(String hexColor, Color defaultColor) { + if (hexColor==null || hexColor.length()<2) + return defaultColor; Color color = getColor(hexColor, null); if (color==null) { if (hexColor.startsWith("#")) diff --git a/ij/plugin/Compiler.java b/ij/plugin/Compiler.java index dce96207f..a9ec95fac 100644 --- a/ij/plugin/Compiler.java +++ b/ij/plugin/Compiler.java @@ -229,8 +229,8 @@ boolean open(String path, String msg) { IJ.error("File name must end with \".java\" or \".class\"."); okay = false; } - } else if (!(lcName.endsWith(".java")||lcName.endsWith(".txt")||lcName.endsWith(".ijm")||lcName.endsWith(".js"))) { - IJ.error("File name must end with \".java\", \".txt\" or \".js\"."); + } else if (!(lcName.endsWith(".java")||lcName.endsWith(".txt")||lcName.endsWith(".ijm")||lcName.endsWith(".js")||lcName.endsWith(".py")||lcName.endsWith(".bsh"))) { + IJ.error("File name must end with \".java\", \".txt\", \".ijm\", \".js\" or \".py\""); okay = false; } } diff --git a/ij/plugin/CompositeConverter.java b/ij/plugin/CompositeConverter.java index bd8e009f3..0a81dd909 100644 --- a/ij/plugin/CompositeConverter.java +++ b/ij/plugin/CompositeConverter.java @@ -12,7 +12,6 @@ public class CompositeConverter implements PlugIn { public void run(String arg) { - String[] modes = {"Composite", "Color", "Grayscale"}; ImagePlus imp = IJ.getImage(); if (imp.isComposite()) { CompositeImage ci = (CompositeImage)imp; @@ -22,14 +21,9 @@ public void run(String arg) { } return; } - String mode = modes[0]; - int z = imp.getStackSize(); int c = imp.getNChannels(); - if (c==1) { - c = z; - imp.setDimensions(c, 1, 1); - if (c>7) mode = modes[2]; - } + int z = imp.getNSlices(); + int t = imp.getNFrames(); if (imp.getBitDepth()==24) { ImageWindow win = imp.getWindow(); Point loc = win!=null?win.getLocation():null; @@ -38,18 +32,22 @@ public void run(String arg) { if (loc!=null) ImageWindow.setNextLocation(loc); imp2.show(); imp.changes = false; - if (z==1) { + if (z*t==1) { imp.hide(); WindowManager.setCurrentWindow(imp2.getWindow()); } else { if (arg!=null && arg.equals("color")) ((CompositeImage)imp2).setMode(IJ.COLOR); - imp2.setZ(slice); + imp2.setSlice(slice); imp.close(); } if (IJ.isMacro() && !Interpreter.isBatchMode()) IJ.wait(500); } else if (c>=2 || (IJ.macroRunning()&&c>=1)) { + String[] modes = {"Composite", "Color", "Grayscale"}; + String mode = modes[0]; + if (c==1 && z*t>7) + mode = modes[2]; GenericDialog gd = new GenericDialog("Make Composite"); gd.addChoice("Display Mode:", modes, mode); gd.showDialog(); @@ -89,7 +87,9 @@ private static ImagePlus convertRGBToComposite(ImagePlus imp) { int width = imp.getWidth(); int height = imp.getHeight(); ImageStack stack1 = imp.getStack(); - int n = stack1.getSize(); + int z = imp.getNSlices(); + int t = imp.getNFrames(); + int n = z*t; ImageStack stack2 = new ImageStack(width, height); for (int i=0; i1 && IJ.isLinux()) + WindowManager.setTempCurrentImage(imp2); if (stackSize>1 && imp2.getStackSize()==stackSize) imp2.setSlice(imp.getCurrentSlice()); if (isRotatedRect) @@ -303,7 +305,7 @@ public ImagePlus crop(ImagePlus imp) { if (label.length()>250 && label.indexOf('\n')>0 && label.contains("0002,")) imp2.setProperty("Info", label); // DICOM metadata else - imp2.setProperty("Label", label); + imp2.setProp("Slice_Label", label); } if (imp.isComposite()) { LUT lut = ((CompositeImage)imp).getChannelLut(); @@ -313,9 +315,9 @@ public ImagePlus crop(ImagePlus imp) { imp2.getProcessor().setColorModel(lut); } } else { - String label = (String)imp.getProperty("Label"); + String label = imp.getProp("Slice_Label"); if (label!=null) - imp2.setProperty("Label", label); + imp2.setProp("Slice_Label", label); } Overlay overlay = imp.getOverlay(); if (overlay!=null && !imp.getHideOverlay()) { diff --git a/ij/plugin/FITS_Reader.java b/ij/plugin/FITS_Reader.java index 1138da643..0e14df466 100644 --- a/ij/plugin/FITS_Reader.java +++ b/ij/plugin/FITS_Reader.java @@ -8,12 +8,13 @@ import ij.measure.*; /** Opens and displays FITS images. The FITS format is - described at "http://fits.gsfc.nasa.gov/fits_standard.html". - Add setOption("FlipFitsImages",true) to the - Edit/Options/Startup dialog to have images flipped vertically. + * described at "http://fits.gsfc.nasa.gov/fits_standard.html". + * Add setOption("FlipFitsImages",false) to the + * Edit/Options/Startup dialog to have FITS images not + * flipped vertically. */ public class FITS_Reader extends ImagePlus implements PlugIn { - private static boolean flipImages; + private static boolean flipImages = true; public void run(String arg) { OpenDialog od = new OpenDialog("Open FITS...", arg); diff --git a/ij/plugin/FileInfoVirtualStack.java b/ij/plugin/FileInfoVirtualStack.java index 0a59696e9..983674745 100644 --- a/ij/plugin/FileInfoVirtualStack.java +++ b/ij/plugin/FileInfoVirtualStack.java @@ -108,12 +108,13 @@ private ImagePlus open() { } } nImages = info.length; - FileOpener fo = new FileOpener(info[0] ); + FileOpener fo = new FileOpener(info[0]); ImagePlus imp = fo.openImage(); if (nImages==1 && fi.fileType==FileInfo.RGB48) return imp; Properties props = fo.decodeDescriptionString(fi); ImagePlus imp2 = new ImagePlus(fi.fileName, this); + imp2.setDisplayRange(imp.getDisplayRangeMin(),imp.getDisplayRangeMax()); imp2.setFileInfo(fi); if (imp!=null && props!=null) { setBitDepth(imp.getBitDepth()); @@ -195,20 +196,24 @@ public ImageProcessor getProcessor(int n) { throw new IllegalArgumentException("Argument out of range: "+n); //if (n>1) IJ.log(" "+(info[n-1].getOffset()-info[n-2].getOffset())); info[n-1].nImages = 1; // why is this needed? - ImagePlus imp = null; + ImageProcessor ip = null; if (IJ.debugMode) { long t0 = System.currentTimeMillis(); FileOpener fo = new FileOpener(info[n-1]); - imp = fo.openImage(); + ip = fo.openProcessor(); IJ.log("FileInfoVirtualStack: "+n+", offset="+info[n-1].getOffset()+", "+(System.currentTimeMillis()-t0)+"ms"); } else { FileOpener fo = new FileOpener(info[n-1]); - imp = fo.openImage(); - if (info[n-1].fileType==FileInfo.RGB48 && info[n-1].sliceNumber>0) - imp.setSlice(info[n-1].sliceNumber); + if (info[n-1].fileType==FileInfo.RGB48) { + ImagePlus imp = fo.openImage(); + if (info[n-1].sliceNumber>0) + imp.setSlice(info[n-1].sliceNumber); + ip = imp.getProcessor(); + } else + ip = fo.openProcessor(); } - if (imp!=null) - return imp.getProcessor(); + if (ip!=null) + return ip; else { int w=getWidth(), h=getHeight(); IJ.log("Read error or file not found ("+n+"): "+info[n-1].directory+info[n-1].fileName); @@ -252,7 +257,6 @@ public int getHeight() { /** Adds an image to this stack. */ public synchronized void addImage(FileInfo fileInfo) { nImages++; - //IJ.log("addImage: "+nImages+" "+fileInfo); if (info==null) info = new FileInfo[250]; if (nImages==info.length) { diff --git a/ij/plugin/FolderOpener.java b/ij/plugin/FolderOpener.java index 8f52d1afb..8c355262e 100644 --- a/ij/plugin/FolderOpener.java +++ b/ij/plugin/FolderOpener.java @@ -14,8 +14,8 @@ /** Implements the File/Import/Image Sequence command, which opens a folder of images as a stack. */ -public class FolderOpener implements PlugIn { - private static final int MAX_SEPARATE = 40; +public class FolderOpener implements PlugIn, TextListener { + private static final int MAX_SEPARATE = 100; private static final String DIR_KEY = "import.sequence.dir"; private static final String[] types = {"default", "16-bit", "32-bit", "RGB"}; private static String[] excludedTypes = {".txt",".lut",".roi",".pty",".hdr",".java",".ijm",".py",".js",".bsh",".xml",".rar",".h5",".doc",".xls"}; @@ -43,6 +43,7 @@ public class FolderOpener implements PlugIn { private int step = 1; private double scale = 100.0; private boolean openAsSeparateImages; + private TextField dirField, filterField, startField, countField, stepField; /** Opens the images in the specified directory as a stack. Displays @@ -107,9 +108,9 @@ public void run(String arg) { boolean isMacro = Macro.getOptions()!=null; if (!directorySet) directory = null; - if (arg!=null && !arg.equals("")) { + if (arg!=null && !arg.equals("")) directory = arg; - } else { + else { if (!isMacro) { sortFileNames = staticSortFileNames; openAsVirtualStack = staticOpenAsVirtualStack; @@ -134,6 +135,10 @@ public void run(String arg) { if (!showDialog()) return; } File file = new File(directory); + if (!file.exists()) { + IJ.error("File>Import>Image Sequence", "Directory not found: "+directory); + return; + } String[] list = file.list(); if (list==null) { String parent = file.getParent(); @@ -189,7 +194,7 @@ public void run(String arg) { Opener opener = new Opener(); opener.setSilentMode(true); IJ.redirectErrorMessages(true); - ImagePlus imp = opener.openImage(directory, list[i]); + ImagePlus imp = opener.openTempImage(directory, list[i]); IJ.redirectErrorMessages(false); if (imp!=null) { width = imp.getWidth(); @@ -244,7 +249,7 @@ public void run(String arg) { IJ.open(directory+list[i]); imp = null; } else if (!openAsVirtualStack||stack==null) { - imp = opener.openImage(directory, list[i]); + imp = opener.openTempImage(directory, list[i]); stackSize = imp!=null?imp.getStackSize():1; } IJ.redirectErrorMessages(false); @@ -425,15 +430,21 @@ else if (label2!=null && !label2.equals("")) int idx = this.start-1; if (idx<0 || idx>=list.length) idx = 0; - imp2.setProperty("Label", list[idx]); + imp2.setProp("Slice_Label", list[idx]); if (info1!=null) imp2.setProperty("Info", info1); } if (arg==null && !saveImage) { String time = (System.currentTimeMillis()-t0)/1000.0 + " seconds"; - if (openAsSeparateImages && imp2.getStackSize()<=MAX_SEPARATE) + if (openAsSeparateImages) { + if (imp2.getStackSize()>MAX_SEPARATE && !IJ.isMacro()) { + boolean ok = IJ.showMessageWithCancel("Import>Image Sequence", + "Are you sure you want to open "+imp2.getStackSize() + +" separate windows?\nThis may cause the system to become very slow or stall."); + if (!ok) return; + } openAsSeparateImages(imp2); - else + } else imp2.show(time); if (stack.isVirtual()) { overlay = stack.getProcessor(1).getOverlay(); @@ -443,8 +454,6 @@ else if (label2!=null && !label2.equals("")) } if (saveImage) image = imp2; - if (openAsSeparateImages && imp2.getStackSize()>MAX_SEPARATE) - IJ.error("Import>Image Sequence", "A maximum of "+MAX_SEPARATE+" images can be opened separately."); } IJ.showProgress(1.0); if (Recorder.record) { @@ -472,10 +481,17 @@ else if (label2!=null && !label2.equals("")) private void openAsSeparateImages(ImagePlus imp) { VirtualStack stack = (VirtualStack)imp.getStack(); String dir = stack.getDirectory(); - for (int n=1; n<=stack.size(); n++) - IJ.open(dir+stack.getFileName(n)); + int skip = 0; + for (int n=1; n<=stack.size(); n++) { + ImagePlus imp2 = IJ.openImage(dir+stack.getFileName(n)); + if (skip<=0) { + imp2.show(); + skip = imp2.getStackSize()-1; + } else + skip--; + } } - + public static boolean useInfo(String info) { return info!=null && !(info.startsWith("Software")||info.startsWith("ImageDescription")); } @@ -522,13 +538,14 @@ boolean showDialog() { this.bitDepth = 24; } String countStr = "---"; - if (directorySet) { + if (!directorySet) + directory = Prefs.get(DIR_KEY, IJ.getDir("downloads")+"stack/"); + if (directory!=null) { File f = new File(directory); String[] names = f.list(); - names = (new FolderOpener()).trimFileList(names); - countStr = ""+names.length; - } else - directory = Prefs.get(DIR_KEY, IJ.getDir("downloads")+"stack/"); + names = trimFileList(names); + countStr = names!=null?""+names.length:"---"; + } GenericDialog gd = new GenericDialog("Import Image Sequence"); gd.setInsets(5, 0, 0); gd.addDirectoryField("Dir:", directory); @@ -541,6 +558,19 @@ boolean showDialog() { gd.addNumericField("Start:", this.start, 0, 6, ""); gd.addStringField("Count:", countStr, 6); gd.addNumericField("Step:", this.step, 0, 6, ""); + if (!IJ.isMacro() && !GraphicsEnvironment.isHeadless()) { + Vector v = gd.getStringFields(); + dirField = (TextField)v.elementAt(0); + dirField.addTextListener(this); + filterField = (TextField)v.elementAt(1); + filterField.addTextListener(this); + countField = (TextField)v.elementAt(2); + v = gd.getNumericFields(); + startField = (TextField)v.elementAt(0); + startField.addTextListener(this); + stepField = (TextField)v.elementAt(1); + stepField.addTextListener(this); + } gd.addNumericField("Scale:", this.scale, 0, 6, "%"); gd.addCheckbox("Sort names numerically", sortFileNames); gd.addCheckbox("Use virtual stack", openAsVirtualStack); @@ -669,6 +699,8 @@ private String bitDepthToType(int bitDepth) { /** Removes names that start with "." or end with ".db", ".txt", ".lut", "roi", ".pty", ".hdr", ".py", etc. */ public String[] trimFileList(String[] rawlist) { + if (rawlist==null) + return null; int count = 0; for (int i=0; i< rawlist.length; i++) { String name = rawlist[i]; @@ -724,6 +756,25 @@ public void setDirectory(String path) { public String[] sortFileList(String[] list) { return StringSorter.sortNumerically(list); } + + public void textValueChanged(TextEvent e) { + if (dirField==null) + return; + String dir = dirField.getText(); + File f = new File(dir); + String[] names = f.list(); + names = trimFileList(names); + names = getFilteredList(names, filterField.getText(), null); + int count = names!=null?names.length:0; + double start = Tools.parseDouble(startField.getText(), Double.NaN); + if (!Double.isNaN(start) && start>1) + count = count - ((int)start-1); + double step = Tools.parseDouble(stepField.getText(), Double.NaN); + if (!Double.isNaN(step) && step>1) + count = count/(int)step; + String countStr = count>0?""+count:"---"; + countField.setText(countStr); + } } // FolderOpener diff --git a/ij/plugin/ImageInfo.java b/ij/plugin/ImageInfo.java index 0f6d23e48..09d3c7254 100644 --- a/ij/plugin/ImageInfo.java +++ b/ij/plugin/ImageInfo.java @@ -513,7 +513,7 @@ private String getImageProperties(ImagePlus imp) { String value = props[i+1]; if (LUT.nameKey.equals(key) || "UniqueName".equals(key)) continue; - if (key!=null && value!=null && !key.equals("ShowInfo")) { + if (key!=null && value!=null && !(key.equals("ShowInfo")||key.equals("Slice_Label"))) { if (value.length()<80) s += key + ": " + value + "\n"; else diff --git a/ij/plugin/ImagesToStack.java b/ij/plugin/ImagesToStack.java index 18954dc5d..ec0f37295 100644 --- a/ij/plugin/ImagesToStack.java +++ b/ij/plugin/ImagesToStack.java @@ -6,6 +6,7 @@ import ij.measure.Calibration; import ij.macro.Interpreter; import ij.io.FileInfo; +import java.awt.Color; /** Implements the Image/Stacks/Images to Stack" command. */ @@ -31,6 +32,7 @@ public class ImagesToStack implements PlugIn { private int stackType; private ImagePlus[] images; private String name = "Stack"; + private Color fillColor; /** Converts the images in 'images' to a stack, using the default settings ("copy center" and "titles as labels"). */ @@ -91,8 +93,10 @@ public void convertImagesToStack() { gd.addMessage(msg); gd.addChoice("Method:", methods, methods[staticMethod]); } + gd.setSmartRecording(true); gd.addStringField("Name:", name, 12); gd.addStringField("Title contains:", "", 12); + gd.addStringField("Fill color:", "", 12); if (sizesDiffer) gd.addCheckbox("Bicubic interpolation", staticBicubic); gd.addCheckbox("Use titles as labels", staticTitlesAsLabels); @@ -103,6 +107,8 @@ public void convertImagesToStack() { method = gd.getNextChoiceIndex(); name = gd.getNextString(); filter = gd.getNextString(); + String fillc = gd.getNextString(); + fillColor = Colors.decode(fillc, null); if (sizesDiffer) bicubic = gd.getNextBoolean(); titlesAsLabels = gd.getNextBoolean(); @@ -151,7 +157,7 @@ private ImagePlus convert(ImagePlus[] images, int count) { if (ip.getMax()>max) max = ip.getMax(); String label = titlesAsLabels?images[i].getTitle():null; if (label==null) - label = (String)images[i].getProperty("Label"); + label = images[i].getProp("Slice_Label"); if (label!=null) { String info = (String)images[i].getProperty("Info"); if (info!=null) label += "\n" + info; @@ -182,6 +188,10 @@ private ImagePlus convert(ImagePlus[] images, int count) { case 32: ip2 = new FloatProcessor(width, height); break; case rgb: ip2 = new ColorProcessor(width, height); break; } + if (fillColor!=null) { + ip2.setColor(fillColor); + ip2.fill(); + } int xoff=0, yoff=0; if (method==COPY_CENTER) { xoff = (width-ip.getWidth())/2; diff --git a/ij/plugin/OverlayCommands.java b/ij/plugin/OverlayCommands.java index 0d040e4c8..3c97fc479 100644 --- a/ij/plugin/OverlayCommands.java +++ b/ij/plugin/OverlayCommands.java @@ -312,7 +312,7 @@ void flatten() { int flags = IJ.setupDialog(imp, 0); if (flags==PlugInFilter.DONE) return; - else if (flags==PlugInFilter.DOES_STACKS) { + else if (flags==PlugInFilter.DOES_STACKS && !(imp.isComposite()&&overlay==null)) { //Added by Marcel Boeglin 2014.01.24 if (overlay==null && roiManagerOverlay==null && !imp.isComposite()) { IJ.error("Flatten", "Overlay or multi-channel image required"); diff --git a/ij/plugin/RoiEnlarger.java b/ij/plugin/RoiEnlarger.java index f3d97d06f..aeb52469f 100644 --- a/ij/plugin/RoiEnlarger.java +++ b/ij/plugin/RoiEnlarger.java @@ -99,7 +99,7 @@ public boolean dialogItemChanged(GenericDialog gd, AWTEvent e) { Checkbox usePixelsCbx = checkboxes == null ? null : (Checkbox)checkboxes.get(0); double n = gd.getNextNumber(); boolean usePixels = cal.scaled() ? gd.getNextBoolean() : true; //getNextBoolean also needed for macro recorded - if (e != null && e.getSource() == usePixelsCbx) { + if (e!=null && e.getSource() == usePixelsCbx) { double pixelWidth = cal.pixelWidth; int decimalPlaces = 0; if (usePixels) { diff --git a/ij/plugin/ScaleBar.java b/ij/plugin/ScaleBar.java index a258e0f56..e0d59ed3b 100644 --- a/ij/plugin/ScaleBar.java +++ b/ij/plugin/ScaleBar.java @@ -6,9 +6,11 @@ import ij.measure.*; import java.awt.event.*; -/** This plugin implements the Analyze/Tools/Draw Scale Bar command. - Divakar Ramachandran added options to draw a background - and use a serif font on 23 April 2006. +/** This plugin implements the Analyze/Tools/Scale Bar command. + * Divakar Ramachandran added options to draw a background + * and use a serif font on 23 April 2006. + * Remi Berthoz added an option to draw vertical scale + * bars on 17 September 2021. */ public class ScaleBar implements PlugIn { @@ -16,414 +18,743 @@ public class ScaleBar implements PlugIn { static final int UPPER_RIGHT=0, LOWER_RIGHT=1, LOWER_LEFT=2, UPPER_LEFT=3, AT_SELECTION=4; static final String[] colors = {"White","Black","Light Gray","Gray","Dark Gray","Red","Green","Blue","Yellow"}; static final String[] bcolors = {"None","Black","White","Dark Gray","Gray","Light Gray","Yellow","Blue","Green","Red"}; - static final String[] checkboxLabels = {"Bold Text", "Hide Text", "Serif Font", "Overlay"}; + static final String[] checkboxLabels = {"Horizontal", "Vertical", "Bold Text", "Hide Text", "Serif Font", "Overlay"}; final static String SCALE_BAR = "|SB|"; - private static int defaultFontSize = 14; - private static int defaultBarHeight = 4; - private static double sBarWidth; - private static int sBarHeightInPixels = defaultBarHeight; - private static String sLocation = locations[LOWER_RIGHT]; - private static String sColor = colors[0]; - private static String sBcolor = bcolors[0]; - private static boolean sBoldText = true; - private static boolean sHideText; - private static boolean sCreateOverlay = true; - private static int sFontSize = defaultFontSize; - private static boolean sLabelAll; - - private double barWidth = sBarWidth; - private int barHeightInPixels = sBarHeightInPixels; - private String location = sLocation; - private String color = sColor; - private String bcolor = sBcolor; - private boolean boldText = sBoldText; - private boolean hideText = sHideText; - private boolean createOverlay = sCreateOverlay; - private int fontSize = sFontSize; - private boolean labelAll = sLabelAll; + private static final ScaleBarConfiguration sConfig = new ScaleBarConfiguration(); + private ScaleBarConfiguration config = new ScaleBarConfiguration(sConfig); ImagePlus imp; - double imageWidth; - double mag = 1.0; - int xloc, yloc; - int barWidthInPixels; - int roiX=-1, roiY, roiWidth, roiHeight; - boolean serifFont; - boolean[] checkboxStates = new boolean[4]; - boolean showingOverlay, drawnScaleBar; + int hBarWidthInPixels; + int vBarHeightInPixels; + int roiX, roiY, roiWidth, roiHeight; + boolean userRoiExists; + boolean[] checkboxStates = new boolean[6]; + + Rectangle hBackground = new Rectangle(); + Rectangle hBar = new Rectangle(); + Rectangle hText = new Rectangle(); + Rectangle vBackground = new Rectangle(); + Rectangle vBar = new Rectangle(); + Rectangle vText = new Rectangle(); + /** + * This method is called when the plugin is loaded. 'arg', which + * may be blank, is the argument specified for this plugin in + * IJ_Props.txt. + */ public void run(String arg) { imp = WindowManager.getCurrentImage(); - if (imp!=null) { - if (showDialog(imp) && imp.getStackSize()>1 && labelAll) - labelSlices(imp); - } else + if (imp == null) { IJ.noImage(); + return; + } + // Snapshot before anything, so we can revert if the user cancels the action. + imp.getProcessor().snapshot(); + + userRoiExists = parseCurrentROI(); + boolean userOKed = askUserConfiguration(userRoiExists); + + if (!userOKed) { + removeScalebar(); + return; + } + + if (!IJ.isMacro()) + persistConfiguration(); + updateScalebar(!config.labelAll); } - void labelSlices(ImagePlus imp) { - if (createOverlay) return; - ImageStack stack = imp.getStack(); - String units = getUnits(imp); - for (int i=1; i<=stack.size(); i++) - drawScaleBar(stack.getProcessor(i), units); - imp.setStack(stack); + /** + * Remove the scalebar drawn by this plugin. + * + * If the scalebar was drawn without the overlay by another + * instance of the plugin (it is drawn into the image), then + * we cannot remove it. + * + * If the scalebar was drawn using the overlay by another + * instance of the plugin, then we can remove it. + * + * With or without the overlay, we can remove a scalebar + * drawn by this instance of the plugin. + */ + void removeScalebar() { + // Revert with Undo, in case "Use Overlay" is not ticked + imp.getProcessor().reset(); + imp.updateAndDraw(); + // Remove overlay drawn by this plugin, in case "Use Overlay" is ticked + Overlay overlay = imp.getOverlay(); + if (overlay!=null) { + overlay.remove(SCALE_BAR); + imp.draw(); + } } - boolean showDialog(ImagePlus imp) { - if (IJ.macroRunning()) { - barHeightInPixels = defaultBarHeight; - location = locations[LOWER_RIGHT]; - color = colors[0]; - bcolor = bcolors[0]; - fontSize = defaultFontSize; - } - Roi roi = imp.getRoi(); - if (roi!=null) { - Rectangle r = roi.getBounds(); - roiX = r.x; - roiY = r.y; - roiWidth = r.width; - roiHeight = r.height; - location = locations[AT_SELECTION]; - } else if (location.equals(locations[AT_SELECTION])) - location = locations[UPPER_RIGHT]; + /** + * If there is a user selected ROI, set the class variables {roiX} + * and {roiY}, {roiWidth}, {roiHeight} to the corresponding + * features of the ROI, and return true. Otherwise, return false. + */ + boolean parseCurrentROI() { + Roi roi = imp.getRoi(); + if (roi == null) return false; + + Rectangle r = roi.getBounds(); + roiX = r.x; + roiY = r.y; + roiWidth = r.width; + roiHeight = r.height; + return true; + } + /** + * There is no hard codded value for the width of the scalebar, + * when the plugin is called for the first time in an ImageJ + * instance, a defautl value for the width will be computed by + * this method. + */ + void computeDefaultBarWidth(boolean currentROIExists) { Calibration cal = imp.getCalibration(); ImageWindow win = imp.getWindow(); - mag = (win!=null)?win.getCanvas().getMagnification():1.0; + double mag = (win!=null)?win.getCanvas().getMagnification():1.0; if (mag>1.0) mag = 1.0; - if (fontSize<(defaultFontSize/mag)) - fontSize = (int)(defaultFontSize/mag); - String units = cal.getUnits(); - // Handle Digital Micrograph unit microns - if (units.equals("micron")) - units = IJ.micronSymbol+"m"; + double pixelWidth = cal.pixelWidth; if (pixelWidth==0.0) pixelWidth = 1.0; - double scale = 1.0/pixelWidth; - imageWidth = imp.getWidth()*pixelWidth; - if (roiX>0 && roiWidth>10) - barWidth = roiWidth*pixelWidth; - else if (barWidth==0.0 || barWidth>0.67*imageWidth) { - barWidth = (80.0*pixelWidth)/mag; - if (barWidth>0.67*imageWidth) - barWidth = 0.67*imageWidth; - if (barWidth>5.0) - barWidth = (int)barWidth; + double pixelHeight = cal.pixelHeight; + if (pixelHeight==0.0) + pixelHeight = 1.0; + double imageWidth = imp.getWidth()*pixelWidth; + double imageHeight = imp.getHeight()*pixelHeight; + + if (currentROIExists && roiX>=0 && roiWidth>10) { + // If the user has a ROI, set the bar width according to ROI width. + config.hBarWidth = roiWidth*pixelWidth; } - int stackSize = imp.getStackSize(); - int digits = (int)barWidth==barWidth?0:1; - if (barWidth<1.0) - digits = 2; - int percent = (int)(barWidth*100.0/imageWidth); - if (mag<1.0 && barHeightInPixels1) { - gd.setInsets(0, 25, 0); - gd.addCheckbox("Label all slices", labelAll); + else if (config.hBarWidth<=0.0 || config.hBarWidth>0.67*imageWidth) { + // If the bar is of negative width or too wide for the image, + // set the bar width to 80 pixels. + config.hBarWidth = (80.0*pixelWidth)/mag; + if (config.hBarWidth>0.67*imageWidth) + // If 80 pixels is too much, do 2/3 of the image. + config.hBarWidth = 0.67*imageWidth; + if (config.hBarWidth>5.0) + // If the resulting size is larger than 5 units, round the value. + config.hBarWidth = (int) config.hBarWidth; } - gd.showDialog(); - if (gd.wasCanceled()) { - imp.getProcessor().reset(); - imp.updateAndDraw(); - Overlay overlay = imp.getOverlay(); - if (showingOverlay && overlay!=null) { - overlay.remove(SCALE_BAR); - imp.draw(); - } - return false; + + if (currentROIExists && roiY>=0 && roiHeight>10) { + config.vBarHeight = roiHeight*pixelHeight; + } + else if (config.vBarHeight<=0.0 || config.vBarHeight>0.67*imageHeight) { + config.vBarHeight = (80.0*pixelHeight)/mag; + if (config.vBarHeight>0.67*imageHeight) + // If 80 pixels is too much, do 2/3 of the image. + config.vBarHeight = 0.67*imageHeight; + if (config.vBarHeight>5.0) + // If the resulting size is larger than 5 units, round the value. + config.vBarHeight = (int) config.vBarHeight; + } + } + + /** + * Genreate & draw the configuration dialog. + * + * Return the value of dialog.wasOKed() when the user clicks OK + * or Cancel. + */ + boolean askUserConfiguration(boolean currentROIExists) { + // Update the user configuration if there is an ROI, or if + // the defined bar width is negative (it is if it has never + // been set in this ImageJ instance). + if (currentROIExists) { + config.location = locations[AT_SELECTION]; } - barWidth = gd.getNextNumber(); - barHeightInPixels = (int)gd.getNextNumber(); - fontSize = (int)gd.getNextNumber(); - color = gd.getNextChoice(); - bcolor = gd.getNextChoice(); - location = gd.getNextChoice(); - boldText = gd.getNextBoolean(); - hideText = gd.getNextBoolean(); - serifFont = gd.getNextBoolean(); - createOverlay = gd.getNextBoolean(); - if (stackSize>1) - labelAll = gd.getNextBoolean(); - if (IJ.macroRunning()) - updateScalebar(); - else { - sBarWidth = barWidth; - sBarHeightInPixels = barHeightInPixels; - sLocation = location; - sColor = color; - sBcolor = bcolor; - sBoldText = boldText; - sHideText = hideText; - sCreateOverlay = createOverlay; - sFontSize = fontSize; - sLabelAll = labelAll; + if (IJ.isMacro()) + config.updateFrom(new ScaleBarConfiguration()); + if (config.hBarWidth <= 0 || config.vBarHeight <= 0 || currentROIExists) { + computeDefaultBarWidth(currentROIExists); } - return true; + + // Draw a first preview scalebar, with the default or presisted + // configuration. + updateScalebar(true); + + // Create & show the dialog, then return. + boolean multipleSlices = imp.getStackSize() > 1; + GenericDialog dialog = new BarDialog(getHUnit(), getVUnit(), config.hDigits, config.vDigits, multipleSlices); + DialogListener dialogListener = new BarDialogListener(multipleSlices); + dialog.addDialogListener(dialogListener); + dialog.showDialog(); + return dialog.wasOKed(); } - void drawScaleBar(ImagePlus imp) { - if (!updateLocation()) - return; - Undo.setup(Undo.FILTER, imp); - drawScaleBar(imp.getProcessor(), getUnits(imp)); - imp.updateAndDraw(); + /** + * Store the active configuration into the static variable that + * is persisted across calls of the plugin. + * + * The "active" configuration is normally the one reflected by + * the dialog. + */ + void persistConfiguration() { + sConfig.updateFrom(config); } - String getUnits(ImagePlus imp) { - String units = imp.getCalibration().getUnits(); - if (units.equals("microns")) - units = IJ.micronSymbol+"m"; - return units; + /** + * Return the X unit strings defined in the image calibration. + */ + String getHUnit() { + String hUnits = imp.getCalibration().getXUnits(); + if (hUnits.equals("microns")) + hUnits = IJ.micronSymbol+"m"; + return hUnits; } - void createOverlay(ImagePlus imp) { - Overlay overlay = imp.getOverlay(); - if (overlay==null) - overlay = new Overlay(); - else - overlay.remove(SCALE_BAR); + /** + * Return the Y unit strings defined in the image calibration. + */ + String getVUnit() { + String vUnits = imp.getCalibration().getYUnits(); + if (vUnits.equals("microns")) + vUnits = IJ.micronSymbol+"m"; + return vUnits; + } + + /** + * Create & draw the scalebar using an Overlay. + */ + Overlay createScaleBarOverlay() throws MissingRoiException { + Overlay overlay = new Overlay(); + Color color = getColor(); Color bcolor = getBColor(); - int x = xloc; - int y = yloc; - int fontType = boldText?Font.BOLD:Font.PLAIN; - String face = serifFont?"Serif":"SanSerif"; - Font font = new Font(face, fontType, fontSize); - String label = getLength(barWidth) + " "+ getUnits(imp); + + int fontType = config.boldText?Font.BOLD:Font.PLAIN; + String face = config.serifFont?"Serif":"SanSerif"; + Font font = new Font(face, fontType, config.fontSize); ImageProcessor ip = imp.getProcessor(); ip.setFont(font); - int swidth = hideText?0:ip.getStringWidth(label); - int xoffset = (barWidthInPixels - swidth)/2; - int yoffset = barHeightInPixels + (hideText?0:fontSize+fontSize/4); - if (bcolor!=null) { - int w = barWidthInPixels; - int h = yoffset; - if (w ). + */ + String getHLabel() { + return IJ.d2s(config.hBarWidth, config.hDigits) + " " + getHUnit(); + } + + /** + * Returns the text to draw near the scalebar ( ). + */ + String getVLabel() { + return IJ.d2s(config.vBarHeight, config.vDigits) + " " + getVUnit(); + } + + /** + * Returns the width of the box that contains the horizontal scalebar and + * its label. + */ + int getHBoxWidthInPixels() { + updateFont(); + ImageProcessor ip = imp.getProcessor(); + int hLabelWidth = config.hideText ? 0 : ip.getStringWidth(getHLabel()); + int hBoxWidth = Math.max(hBarWidthInPixels, hLabelWidth); + return (config.showHorizontal ? hBoxWidth : 0); + } + + /** + * Returns the height of the box that contains the horizontal scalebar and + * its label. + */ + int getHBoxHeightInPixels() { + int hLabelHeight = config.hideText ? 0 : config.fontSize; + int hBoxHeight = config.barThicknessInPixels + (int) (hLabelHeight * 1.25); + return (config.showHorizontal ? hBoxHeight : 0); + } + + /** + * Returns the height of the box that contains the vertical scalebar and + * its label. + */ + int getVBoxHeightInPixels() { + updateFont(); ImageProcessor ip = imp.getProcessor(); - ip.setFont(new Font(font, fontType, fontSize)); + int vLabelHeight = config.hideText ? 0 : ip.getStringWidth(getVLabel()); + int vBoxHeight = Math.max(vBarHeightInPixels, vLabelHeight); + return (config.showVertical ? vBoxHeight : 0); + } + + /** + * Returns the width of the box that contains the vertical scalebar and + * its label. + */ + int getVBoxWidthInPixels() { + int vLabelWidth = config.hideText ? 0 : config.fontSize; + int vBoxWidth = config.barThicknessInPixels + (int) (vLabelWidth * 1.25); + return (config.showVertical ? vBoxWidth : 0); + } + + /** + * Returns the size of margins that should be displayed between the scalebar + * elements and the image edge. + */ + int getOuterMarginSizeInPixels() { + int imageWidth = imp.getWidth(); + int imageHeight = imp.getHeight(); + return (imageWidth + imageHeight) / 100; + } + + /** + * Retruns the size of margins that should be displayed between the scalebar + * elements and the edge of the element's backround. + */ + int getInnerMarginSizeInPixels() { + int maxWidth = Math.max(getHBoxWidthInPixels(), getVBoxHeightInPixels()); + int margin = Math.max(maxWidth/20, 2); + return config.bcolor.equals("None") ? 0 : margin; + } + + void updateFont() { + int fontType = config.boldText?Font.BOLD:Font.PLAIN; + String font = config.serifFont?"Serif":"SanSerif"; + ImageProcessor ip = imp.getProcessor(); + ip.setFont(new Font(font, fontType, config.fontSize)); ip.setAntialiasedText(true); - String label = getLength(barWidth)+" "+getUnits(imp); - int swidth = hideText?0:ip.getStringWidth(label); - int labelWidth = (swidth < barWidthInPixels)?0:(int) (barWidthInPixels-swidth)/2; - int x = 0; - int y = 0; - if (location.equals(locations[UPPER_RIGHT])) { - x = width - margin - barWidthInPixels + labelWidth; - y = margin; - } else if (location.equals(locations[LOWER_RIGHT])) { - x = width - margin - barWidthInPixels + labelWidth; - y = height - margin - barHeightInPixels - fontSize; - } else if (location.equals(locations[UPPER_LEFT])) { - x = margin - labelWidth; - y = margin; - } else if (location.equals(locations[LOWER_LEFT])) { - x = margin - labelWidth; - y = height - margin - barHeightInPixels - fontSize; + } + + /** + * Sets the positions x y of hBackground and vBackground based on + * the current configuration. + */ + void setBackgroundBoxesPositions(ImageProcessor ip) throws MissingRoiException { + Calibration cal = imp.getCalibration(); + hBarWidthInPixels = (int)(config.hBarWidth/cal.pixelWidth); + vBarHeightInPixels = (int)(config.vBarHeight/cal.pixelHeight); + + boolean hTextTop = config.showVertical && (config.location.equals(locations[UPPER_LEFT]) || config.location.equals(locations[UPPER_RIGHT])); + + int imageWidth = imp.getWidth(); + int imageHeight = imp.getHeight(); + int hBoxWidth = getHBoxWidthInPixels(); + int hBoxHeight = getHBoxHeightInPixels(); + int vBoxWidth = getVBoxWidthInPixels(); + int vBoxHeight = getVBoxHeightInPixels(); + int outerMargin = getOuterMarginSizeInPixels(); + int innerMargin = getInnerMarginSizeInPixels(); + + hBackground.width = innerMargin + hBoxWidth + innerMargin; + hBackground.height = innerMargin + hBoxHeight + innerMargin; + vBackground.width = innerMargin + vBoxWidth + innerMargin; + vBackground.height = innerMargin + vBoxHeight + innerMargin; + + if (config.location.equals(locations[UPPER_RIGHT])) { + hBackground.x = imageWidth - outerMargin - innerMargin - vBoxWidth + (config.showVertical ? config.barThicknessInPixels : 0) - hBoxWidth - innerMargin; + hBackground.y = outerMargin; + vBackground.x = imageWidth - outerMargin - innerMargin - vBoxWidth - innerMargin; + vBackground.y = outerMargin + (hTextTop ? hBoxHeight - config.barThicknessInPixels : 0); + hBackground.width += (config.showVertical ? vBoxWidth - config.barThicknessInPixels : 0); + + } else if (config.location.equals(locations[LOWER_RIGHT])) { + hBackground.x = imageWidth - outerMargin - innerMargin - vBoxWidth - hBoxWidth + (config.showVertical ? config.barThicknessInPixels : 0) - innerMargin; + hBackground.y = imageHeight - outerMargin - innerMargin - hBoxHeight - innerMargin; + vBackground.x = imageWidth - outerMargin - innerMargin - vBoxWidth - innerMargin; + vBackground.y = imageHeight - outerMargin - innerMargin - hBoxHeight + (config.showHorizontal ? config.barThicknessInPixels : 0) - vBoxHeight - innerMargin; + vBackground.height += (config.showHorizontal ? hBoxHeight - config.barThicknessInPixels : 0); + + } else if (config.location.equals(locations[UPPER_LEFT])) { + hBackground.x = outerMargin + (config.showVertical ? vBackground.width - 2*innerMargin - config.barThicknessInPixels : 0); + hBackground.y = outerMargin; + vBackground.x = outerMargin; + vBackground.y = outerMargin + (hTextTop ? hBoxHeight - config.barThicknessInPixels : 0); + hBackground.width += (config.showVertical ? vBoxWidth - config.barThicknessInPixels : 0); + hBackground.x -= (config.showVertical ? vBoxWidth - config.barThicknessInPixels : 0); + + } else if (config.location.equals(locations[LOWER_LEFT])) { + hBackground.x = outerMargin + (config.showVertical ? vBackground.width - 2*innerMargin - config.barThicknessInPixels : 0); + hBackground.y = imageHeight - outerMargin - innerMargin - hBoxHeight - innerMargin; + vBackground.x = outerMargin; + vBackground.y = imageHeight - outerMargin - innerMargin - hBoxHeight + (config.showHorizontal ? config.barThicknessInPixels : 0) - vBoxHeight - innerMargin; + vBackground.height += (config.showHorizontal ? hBoxHeight - config.barThicknessInPixels : 0); + } else { - if (roiX==-1) - return false; - x = roiX; - y = roiY; + if (!userRoiExists) + throw new MissingRoiException(); + + hBackground.x = roiX; + hBackground.y = roiY; + vBackground.x = roiX; + vBackground.y = roiY; } - xloc = x; - yloc = y; - return true; + } + + /** + * Sets the rectangles x y positions for scalebar elements (hBar, hText, vBar, vText), + * based on the current configuration. Also sets the width and height of the rectangles. + * + * The position of each rectangle is relative to hBackground and vBackground, + * so setBackgroundBoxesPositions() must run before this method computes positions. + * This method calls setBackgroundBoxesPositions(). + */ + void setElementsPositions(ImageProcessor ip) throws MissingRoiException { + + setBackgroundBoxesPositions(ip); + + int hBoxWidth = getHBoxWidthInPixels(); + int hBoxHeight = getHBoxHeightInPixels(); + + int vBoxWidth = getVBoxWidthInPixels(); + int vBoxHeight = getVBoxHeightInPixels(); + + int innerMargin = getInnerMarginSizeInPixels(); + + boolean right = config.location.equals(locations[LOWER_RIGHT]) || config.location.equals(locations[UPPER_RIGHT]); + boolean upper = config.location.equals(locations[UPPER_RIGHT]) || config.location.equals(locations[UPPER_LEFT]); + boolean hTextTop = config.showVertical && upper; + + hBar.x = hBackground.x + innerMargin + (hBoxWidth - hBarWidthInPixels)/2 + (config.showVertical && !right && upper ? vBoxWidth - config.barThicknessInPixels : 0); + hBar.y = hBackground.y + innerMargin + (hTextTop ? hBoxHeight - config.barThicknessInPixels : 0); + hBar.width = hBarWidthInPixels; + hBar.height = config.barThicknessInPixels; + + hText.height = config.hideText ? 0 : config.fontSize; + hText.width = config.hideText ? 0 : ip.getStringWidth(getHLabel()); + hText.x = hBackground.x + innerMargin + (hBoxWidth - hText.width)/2 + (config.showVertical && !right && upper ? vBoxWidth - config.barThicknessInPixels : 0); + hText.y = hTextTop ? (hBackground.y + innerMargin - (int)(config.fontSize*0.25)) : (hBar.y + hBar.height); + + vBar.width = config.barThicknessInPixels; + vBar.height = vBarHeightInPixels; + vBar.x = vBackground.x + (right ? innerMargin : vBackground.width - config.barThicknessInPixels - innerMargin); + vBar.y = vBackground.y + innerMargin + (vBoxHeight - vBar.height)/2; + + vText.height = config.hideText ? 0 : ip.getStringWidth(getVLabel()); + vText.width = config.hideText ? 0 : config.fontSize; + vText.x = right ? (vBar.x + vBar.width) : (vBar.x - vBoxWidth + config.barThicknessInPixels - (int)(config.fontSize*0.25)); + vText.y = vBackground.y + innerMargin + (vBoxHeight - vText.height)/2; } Color getColor() { Color c = Color.black; - if (color.equals(colors[0])) c = Color.white; - else if (color.equals(colors[2])) c = Color.lightGray; - else if (color.equals(colors[3])) c = Color.gray; - else if (color.equals(colors[4])) c = Color.darkGray; - else if (color.equals(colors[5])) c = Color.red; - else if (color.equals(colors[6])) c = Color.green; - else if (color.equals(colors[7])) c = Color.blue; - else if (color.equals(colors[8])) c = Color.yellow; + if (config.color.equals(colors[0])) c = Color.white; + else if (config.color.equals(colors[2])) c = Color.lightGray; + else if (config.color.equals(colors[3])) c = Color.gray; + else if (config.color.equals(colors[4])) c = Color.darkGray; + else if (config.color.equals(colors[5])) c = Color.red; + else if (config.color.equals(colors[6])) c = Color.green; + else if (config.color.equals(colors[7])) c = Color.blue; + else if (config.color.equals(colors[8])) c = Color.yellow; return c; } // Div., mimic getColor to write getBColor for bkgnd Color getBColor() { - if (bcolor==null || bcolor.equals(bcolors[0])) return null; + if (config.bcolor==null || config.bcolor.equals(bcolors[0])) return null; Color bc = Color.white; - if (bcolor.equals(bcolors[1])) bc = Color.black; - else if (bcolor.equals(bcolors[3])) bc = Color.darkGray; - else if (bcolor.equals(bcolors[4])) bc = Color.gray; - else if (bcolor.equals(bcolors[5])) bc = Color.lightGray; - else if (bcolor.equals(bcolors[6])) bc = Color.yellow; - else if (bcolor.equals(bcolors[7])) bc = Color.blue; - else if (bcolor.equals(bcolors[8])) bc = Color.green; - else if (bcolor.equals(bcolors[9])) bc = Color.red; + if (config.bcolor.equals(bcolors[1])) bc = Color.black; + else if (config.bcolor.equals(bcolors[3])) bc = Color.darkGray; + else if (config.bcolor.equals(bcolors[4])) bc = Color.gray; + else if (config.bcolor.equals(bcolors[5])) bc = Color.lightGray; + else if (config.bcolor.equals(bcolors[6])) bc = Color.yellow; + else if (config.bcolor.equals(bcolors[7])) bc = Color.blue; + else if (config.bcolor.equals(bcolors[8])) bc = Color.green; + else if (config.bcolor.equals(bcolors[9])) bc = Color.red; return bc; } - void updateScalebar() { - updateLocation(); - imp.getProcessor().reset(); - if (createOverlay) { - if (drawnScaleBar) { + /** + * Draw the scale bar, based on the current configuration. + * + * If {previewOnly} is true, only the active slice will be + * labeled with a scalebar. If it is false, all slices of + * the stack will be labeled. + * + * This method chooses whether to use an overlay or the + * drawing tool to create the scalebar. + */ + void updateScalebar(boolean previewOnly) { + removeScalebar(); + + Overlay scaleBarOverlay; + try { + scaleBarOverlay = createScaleBarOverlay(); + } catch (MissingRoiException e) { + return; // Simply don't draw the scalebar. + } + + Overlay impOverlay = imp.getOverlay(); + if (impOverlay==null) { + impOverlay = new Overlay(); + } + + if (config.useOverlay) { + for (Roi roi : scaleBarOverlay) + impOverlay.add(roi); + imp.setOverlay(impOverlay); + } else { + if (previewOnly) { + ImageProcessor ip = imp.getProcessor(); + drawOverlayOnProcessor(scaleBarOverlay, ip); imp.updateAndDraw(); - drawnScaleBar = false; + } else { + ImageStack stack = imp.getStack(); + for (int i=1; i<=stack.size(); i++) { + ImageProcessor ip = stack.getProcessor(i); + drawOverlayOnProcessor(scaleBarOverlay, ip); + imp.updateAndDraw(); + } + imp.setStack(stack); } - createOverlay(imp); - } else { - if (showingOverlay) { - imp.setOverlay(null); - showingOverlay = false; + } + } + + void drawOverlayOnProcessor(Overlay overlay, ImageProcessor processor) { + if (processor.getBitDepth() == 8 || processor.getBitDepth() == 24) { + // drawOverlay() only works for 8-bits and RGB + processor.drawOverlay(overlay); + return; + } + // Generate a buffer ImageProcessor, completely black. + // We will draw the overlay on it, then loop over each pixel, + // to replace drawn pixels in the original processor. + ImageProcessor ip = new ByteProcessor(imp.getWidth(), imp.getHeight()); + ip.setCalibrationTable(processor.getCalibrationTable()); + LUT lut = ip.getLut(); + for (Roi roi : overlay) { + Color fillColor = roi.getFillColor(); + if (fillColor != null) { + int i = processor.getBestIndex(fillColor); + roi.setFillColor(new Color(lut.getRed(i), lut.getGreen(i), lut.getBlue(i))); + // Below, when looping on each pixel of the buffer, we detect whether it was + // drawn by checking if the pixel value is greater than zero. Hence, we cannot + // put zero-valued pixels when the Roi is black, or these pixels will not + // be part of the drawing. + if (roi.getFillColor().equals(Color.BLACK)) roi.setFillColor(new Color(1, 1, 1)); + } + Color strokeColor = roi.getStrokeColor(); + if (strokeColor != null) { + int i = processor.getBestIndex(strokeColor); + roi.setStrokeColor(new Color(lut.getRed(i), lut.getGreen(i), lut.getBlue(i))); + if (roi.getStrokeColor().equals(Color.BLACK)) roi.setStrokeColor(new Color(1, 1, 1)); } - drawScaleBar(imp); } + ip.drawOverlay(overlay); + for (int y = 0; y < ip.getHeight(); y++) + for (int x = 0; x < ip.getWidth(); x++) { + int p = ip.get(x, y); + if (p > 0) { + p = (int) (p * ((processor.getMax() - processor.getMin()) / 255d) + (float)processor.getMin()); + if (processor.getBitDepth() == 32) + p = Float.floatToIntBits(p); + processor.putPixel(x, y, p); + } + } } class BarDialog extends GenericDialog { - BarDialog(String title) { - super(title); + BarDialog(String hUnits, String vUnits, int hDigits, int vDigits, boolean multipleSlices) { + super("Scale Bar"); + + addNumericField("Width in "+hUnits+": ", config.hBarWidth, hDigits); + addNumericField("Height in "+vUnits+": ", config.vBarHeight, vDigits); + addNumericField("Thickness in pixels: ", config.barThicknessInPixels, 0); + addNumericField("Font size: ", config.fontSize, 0); + addChoice("Color: ", colors, config.color); + addChoice("Background: ", bcolors, config.bcolor); + addChoice("Location: ", locations, config.location); + checkboxStates[0] = config.showHorizontal; checkboxStates[1] = config.showVertical; + checkboxStates[2] = config.boldText; checkboxStates[3] = config.hideText; + checkboxStates[4] = config.serifFont; checkboxStates[5] = config.useOverlay; + setInsets(10, 25, 0); + addCheckboxGroup(3, 2, checkboxLabels, checkboxStates); + + // For simplicity of the itemStateChanged() method below, + // is is best to keep the "Label all slices" checkbox in + // the last position. + if (multipleSlices) { + setInsets(0, 25, 0); + addCheckbox("Label all slices", config.labelAll); + } + } + } //BarDialog inner class + + class BarDialogListener implements DialogListener { + + boolean multipleSlices; + + public BarDialogListener(boolean multipleSlices) { + super(); + this.multipleSlices = multipleSlices; } - public void textValueChanged(TextEvent e) { - TextField widthField = ((TextField)numberField.elementAt(0)); - Double d = getValue(widthField.getText()); - if (d==null) - return; - barWidth = d.doubleValue(); - TextField heightField = ((TextField)numberField.elementAt(1)); - d = getValue(heightField.getText()); - if (d==null) - return; - barHeightInPixels = (int)d.doubleValue(); - TextField fontSizeField = ((TextField)numberField.elementAt(2)); - d = getValue(fontSizeField.getText()); - if (d==null) - return; - int size = (int)d.doubleValue(); - if (size>5) - fontSize = size; - updateScalebar(); + @Override + public boolean dialogItemChanged(GenericDialog gd, AWTEvent e) { + config.hBarWidth = gd.getNextNumber(); + config.vBarHeight = gd.getNextNumber(); + config.barThicknessInPixels = (int)gd.getNextNumber(); + config.fontSize = (int)gd.getNextNumber(); + config.color = gd.getNextChoice(); + config.bcolor = gd.getNextChoice(); + config.location = gd.getNextChoice(); + config.showHorizontal = gd.getNextBoolean(); + config.showVertical = gd.getNextBoolean(); + config.boldText = gd.getNextBoolean(); + config.hideText = gd.getNextBoolean(); + config.serifFont = gd.getNextBoolean(); + config.useOverlay = gd.getNextBoolean(); + if (multipleSlices) + config.labelAll = gd.getNextBoolean(); + if (!config.showHorizontal && !config.showVertical && IJ.isMacro()) { + // Previous versions of this plugin did not handle vertical scale bars: + // the macro syntax was different in that "height" meant "thickness" of + // the horizontal scalebar. + // If the conditional above is true, then the macro syntax is the old + // one, so we swap a few config variables. + config.showHorizontal = true; + config.barThicknessInPixels = (int)config.vBarHeight; + config.vBarHeight = 0.0; + } + + String widthString = ((TextField) gd.getNumericFields().elementAt(0)).getText(); + boolean hasDecimalPoint = false; + config.hDigits = 0; + for (int i = 0; i < widthString.length(); i++) { + if (hasDecimalPoint) + config.hDigits += 1; + if (widthString.charAt(i) == '.') + hasDecimalPoint = true; + } + + String heightString = ((TextField) gd.getNumericFields().elementAt(1)).getText(); + hasDecimalPoint = false; + config.vDigits = 0; + for (int i = 0; i < heightString.length(); i++) { + if (hasDecimalPoint) + config.vDigits += 1; + if (heightString.charAt(i) == '.') + hasDecimalPoint = true; + } + + updateScalebar(true); + return true; } + } - public void itemStateChanged(ItemEvent e) { - Choice col = (Choice)(choice.elementAt(0)); - color = col.getSelectedItem(); - Choice bcol = (Choice)(choice.elementAt(1)); - bcolor = bcol.getSelectedItem(); - Choice loc = (Choice)(choice.elementAt(2)); - location = loc.getSelectedItem(); - boldText = ((Checkbox)(checkbox.elementAt(0))).getState(); - hideText = ((Checkbox)(checkbox.elementAt(1))).getState(); - serifFont = ((Checkbox)(checkbox.elementAt(2))).getState(); - createOverlay = ((Checkbox)(checkbox.elementAt(3))).getState(); - updateScalebar(); + class MissingRoiException extends Exception { + MissingRoiException() { + super("Scalebar location is set to AT_SELECTION but there is no selection on the image."); } + } //MissingRoiException inner class - } //BarDialog inner class + static class ScaleBarConfiguration { + + private static int defaultBarHeight = 4; + + boolean showHorizontal; + boolean showVertical; + double hBarWidth; + double vBarHeight; + int hDigits; // The number of digits after the decimal point that the user input in the dialog for vBarWidth. + int vDigits; + int barThicknessInPixels; + String location; + String color; + String bcolor; + boolean boldText; + boolean hideText; + boolean serifFont; + boolean useOverlay; + int fontSize; + boolean labelAll; + + /** + * Create ScaleBarConfiguration with default values. + */ + ScaleBarConfiguration() { + this.showHorizontal = true; + this.showVertical = false; + this.hBarWidth = -1; + this.vBarHeight = -1; + this.barThicknessInPixels = defaultBarHeight; + this.location = locations[LOWER_RIGHT]; + this.color = colors[0]; + this.bcolor = bcolors[0]; + this.boldText = true; + this.hideText = false; + this.serifFont = false; + this.useOverlay = true; + this.fontSize = 14; + this.labelAll = false; + } + + /** + * Copy constructor. + */ + ScaleBarConfiguration(ScaleBarConfiguration model) { + this.updateFrom(model); + } + + void updateFrom(ScaleBarConfiguration model) { + this.showHorizontal = model.showHorizontal; + this.showVertical = model.showVertical; + this.hBarWidth = model.hBarWidth; + this.vBarHeight = model.vBarHeight; + this.hDigits = model.hDigits; + this.vDigits = model.vDigits; + this.barThicknessInPixels = model.barThicknessInPixels; + this.location = locations[LOWER_RIGHT]; + this.color = model.color; + this.bcolor = model.bcolor; + this.boldText = model.boldText; + this.serifFont = model.serifFont; + this.hideText = model.hideText; + this.useOverlay = model.useOverlay; + this.fontSize = model.fontSize; + this.labelAll = model.labelAll; + } + } //ScaleBarConfiguration inner class } //ScaleBar class diff --git a/ij/plugin/Selection.java b/ij/plugin/Selection.java index 4f68bfc49..cfeb31fd5 100644 --- a/ij/plugin/Selection.java +++ b/ij/plugin/Selection.java @@ -619,6 +619,8 @@ void createSelectionFromMask(ImagePlus imp) { if (Prefs.blackBackground) threshold = (threshold==255)?0:255; ip.setThreshold(threshold, threshold, ImageProcessor.NO_LUT_UPDATE); + if (!IJ.isMacro()) + IJ.log("Create Selection: threshold not set; assumed to be "+threshold+"-"+threshold); IJ.runPlugIn("ij.plugin.filter.ThresholdToSelection", ""); } @@ -934,10 +936,24 @@ private void fitRectangle(ImagePlus imp) { double pd = ((xp[i2min] - xp[imin]) * (yp[jmin] - yp[imin]) - (xp[jmin] - xp[imin]) * (yp[i2min] - yp[imin])) / Math.sqrt(Math.pow(xp[i2min] - xp[imin], 2) + Math.pow(yp[i2min] - yp [imin], 2)); // signed feret diameter double pairAngle = Math.atan2( yp[i2min]- yp[imin], xp[i2min]- xp[imin]); double minAngle = pairAngle + Math.PI/2; - double x1 = xp[imin] + Math.cos(pairAngle) * min_hmax + Math.cos(minAngle) * pd/2; - double y1 = yp[imin] + Math.sin(pairAngle) * min_hmax + Math.sin(minAngle) * pd/2; - double x2 = xp[imin] + Math.cos(pairAngle) * min_hmin + Math.cos(minAngle) * pd/2; - double y2 = yp[imin] + Math.sin(pairAngle) * min_hmin + Math.sin(minAngle) * pd/2; + + // rectangle center and signed full height + double xm = xp[imin] + Math.cos(pairAngle) * (min_hmax + min_hmin)/2 + Math.cos(minAngle) * pd/2; + double ym = yp[imin] + Math.sin(pairAngle) * (min_hmax + min_hmin)/2 + Math.sin(minAngle) * pd/2; + double hm = min_hmax - min_hmin; + + if (minFD > Math.abs(hm)) { // ensure control axis is parallel to longer side + pairAngle = pairAngle - Math.PI/2; + minFD = Math.abs(hm); + hm = pd; + } + + if (pairAngle * hm > 0) hm = -hm; // ensure first control point at the top + + double x1 = xm + Math.cos(pairAngle) * hm/2; + double y1 = ym + Math.sin(pairAngle) * hm/2; + double x2 = xm - Math.cos(pairAngle) * hm/2; + double y2 = ym - Math.sin(pairAngle) * hm/2; Undo.setup(Undo.ROI, imp); imp.deleteRoi(); Roi roi2 = new RotatedRectRoi(x1, y1, x2, y2, minFD); diff --git a/ij/plugin/SimpleCommands.java b/ij/plugin/SimpleCommands.java index 0552b9552..b99234166 100644 --- a/ij/plugin/SimpleCommands.java +++ b/ij/plugin/SimpleCommands.java @@ -148,7 +148,7 @@ private void setSliceLabel() { if (label2.length()==0) label2 = null; stack.setSliceLabel(label2, n); - imp.setProperty("Label", label2); + imp.setProp("Slice_Label", label2); imp.repaintWindow(); } } @@ -161,7 +161,7 @@ private void removeStackLabels() { for (int i=1; i<=size; i++) stack.setSliceLabel(null, i); if (size==1) - imp.setProperty("Label", null); + imp.setProp("Slice_Label", null); imp.repaintWindow(); } diff --git a/ij/plugin/StackEditor.java b/ij/plugin/StackEditor.java index fb9879a18..e23f683a8 100644 --- a/ij/plugin/StackEditor.java +++ b/ij/plugin/StackEditor.java @@ -61,7 +61,7 @@ void deleteSlice() { stack.deleteSlice(n); if (stack.size()==1) { String label = stack.getSliceLabel(1); - if (label!=null) imp.setProperty("Label", label); + if (label!=null) imp.setProp("Slice_Label", label); } imp.setStack(null, stack); if (n--<1) n = 1; diff --git a/ij/plugin/StackWriter.java b/ij/plugin/StackWriter.java index bfbc2ca80..a4961de69 100644 --- a/ij/plugin/StackWriter.java +++ b/ij/plugin/StackWriter.java @@ -74,6 +74,11 @@ public void run(String arg) { else { if (!showDialog(imp)) return; + } + File d = new File(directory); + if (d==null || !d.isDirectory()) { + IJ.error("File>Save As>Image Sequence", "Directory not found: "+directory); + return; } int number = 0; if (ndigits<1) ndigits = 1; @@ -117,12 +122,12 @@ else if (format.equals("text image")) } imp2.setProcessor(null, ip); String label2 = stack.getSliceLabel(i); - imp2.setProperty("Label", null); + imp2.setProp("Slice_Label", null); if (label2!=null) { if (label2.contains("\n")) imp2.setProperty("Info", label2); else - imp2.setProperty("Label", label2);; + imp2.setProp("Slice_Label", label2);; } else { Properties props = imp2.getProperties(); if (props!=null) props.remove("Info"); diff --git a/ij/plugin/Startup.java b/ij/plugin/Startup.java index 73aa4bafa..9a91e5e33 100644 --- a/ij/plugin/Startup.java +++ b/ij/plugin/Startup.java @@ -20,7 +20,8 @@ public class Startup implements PlugIn, ItemListener { "12-bit (0-4095) range", "Splash Screen", "Bolder selections", - "Add to overlay" + "Add to overlay", + "Flip FITS images" }; private String macro = ""; private int originalLength; @@ -97,6 +98,8 @@ else if (item.equals(code[7])) statement = "Roi.setDefaultStrokeWidth(2);\n"; else if (item.equals(code[8])) statement = "setOption(\"Add to overlay\", true);\n"; + else if (item.equals(code[9])) + statement = "setOption(\"FlipFitsImages\", false);\n"; if (statement!=null) { TextArea ta = gd.getTextArea1(); ta.insert(statement, ta.getCaretPosition()); diff --git a/ij/plugin/ThreadLister.java b/ij/plugin/ThreadLister.java index 061103e40..57f60a2f7 100644 --- a/ij/plugin/ThreadLister.java +++ b/ij/plugin/ThreadLister.java @@ -2,6 +2,7 @@ import java.io.*; import ij.*; import ij.text.*; +import javax.swing.SwingUtilities; /** * Displays thread information in a text window. @@ -21,6 +22,18 @@ public void run(String arg) { new TextWindow("Threads", caw.toString(), 420, 420); } catch (Exception e) {} + + // cause an exception on the EDT + if (IJ.altKeyDown()) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + ((Object) null).toString(); + } + }); + } + // cause an exception off the EDT + //((Object) null).toString(); + } diff --git a/ij/plugin/filter/Duplicater.java b/ij/plugin/filter/Duplicater.java index 77e14bda4..dbf6b20f7 100644 --- a/ij/plugin/filter/Duplicater.java +++ b/ij/plugin/filter/Duplicater.java @@ -5,7 +5,7 @@ /** * @deprecated -* replaced by Duplicator class +* replaced by ij.plugin.Duplicator class */ public class Duplicater implements PlugInFilter { ImagePlus imp; diff --git a/ij/plugin/filter/ImageMath.java b/ij/plugin/filter/ImageMath.java index 516f61bbe..92a8ab8a6 100644 --- a/ij/plugin/filter/ImageMath.java +++ b/ij/plugin/filter/ImageMath.java @@ -9,7 +9,7 @@ public class ImageMath implements ExtendedPlugInFilter, DialogListener { public static final String MACRO_KEY = "math.macro"; - private int flags = DOES_ALL|SUPPORTS_MASKING|KEEP_PREVIEW; + private int flags = DOES_ALL|SUPPORTS_MASKING|KEEP_PREVIEW|PARALLELIZE_STACKS; private String arg; private ImagePlus imp; private boolean canceled; @@ -46,8 +46,6 @@ public int setup(String arg, ImagePlus imp) { this.arg = arg; this.imp = imp; IJ.register(ImageMath.class); - if (!arg.equals("macro") || Interpreter.getInstance()==null) - flags |= PARALLELIZE_STACKS; return flags; } @@ -477,7 +475,7 @@ else if (arg.equals("set")) { lastMaxValue = maxValue; lastAndValue = andValue; lastGammaValue = gammaValue; - lastMacro = macro; + lastMacro = macro2; } return IJ.setupDialog(imp, flags); } diff --git a/ij/plugin/filter/ParticleAnalyzer.java b/ij/plugin/filter/ParticleAnalyzer.java index 62716b6cd..85182c244 100644 --- a/ij/plugin/filter/ParticleAnalyzer.java +++ b/ij/plugin/filter/ParticleAnalyzer.java @@ -810,7 +810,7 @@ else if (ip instanceof FloatProcessor) level1 = 255; level2 = 255; fillColor = 64; - if (!Prefs.blackBackground && !imp.isInvertedLut() && stats.histogram[0]<(imp.getWidth()*imp.getHeight())/2) { + if (!Prefs.blackBackground && !imp.isInvertedLut()) { level1 = 0; level2 = 0; fillColor = 192; diff --git a/ij/plugin/frame/ColorPicker.java b/ij/plugin/frame/ColorPicker.java index 181692b0a..825ddd725 100644 --- a/ij/plugin/frame/ColorPicker.java +++ b/ij/plugin/frame/ColorPicker.java @@ -290,9 +290,13 @@ public void mousePressed(MouseEvent e) { Color c = Toolbar.getBackgroundColor(); Toolbar.setBackgroundColor(Toolbar.getForegroundColor()); Toolbar.setForegroundColor(c); + Recorder.setForegroundColor(Toolbar.getForegroundColor()); + Recorder.setBackgroundColor(Toolbar.getBackgroundColor()); } else if (resetRect.contains(x,y)) { Toolbar.setForegroundColor(Color.white); - Toolbar.setBackgroundColor(Color.black); + Toolbar.setBackgroundColor(Color.black); + Recorder.setForegroundColor(Color.white); + Recorder.setBackgroundColor(Color.black); } else if ((background1Rect.contains(x,y)) || (background2Rect.contains(x,y))) { background = true; if (doubleClick) editColor(); diff --git a/ij/plugin/frame/RoiManager.java b/ij/plugin/frame/RoiManager.java index 2dc9e98d4..0fb8bdc53 100644 --- a/ij/plugin/frame/RoiManager.java +++ b/ij/plugin/frame/RoiManager.java @@ -226,7 +226,9 @@ else if (command.equals("Open...")) open(null); else if (command.equals("Save...")) { Thread t1 = new Thread(new Runnable() { - public void run() {save();} + public void run() { + save(null); + } }); t1.start(); } else if (command.equals("Fill")) @@ -791,7 +793,10 @@ int getSliceNumber(Roi roi, String label) { return slice; } - void open(String path) { + /** Opens a single .roi file or a ZIP-compressed set of ROIs. + * Returns 'true' if the operation was succesful. + */ + public boolean open(String path) { Macro.setOptions(null); String name = null; if (path==null || path.equals("")) { @@ -799,17 +804,22 @@ void open(String path) { String directory = od.getDirectory(); name = od.getFileName(); if (name==null) - return; + return false; path = directory + name; } - if (Recorder.record && !Recorder.scriptMode()) - Recorder.record("roiManager", "Open", path); + if (Recorder.record && !IJ.macroRunning()) { + if (Recorder.scriptMode()) + Recorder.recordCall("rm.open(\""+path+"\");"); + else + Recorder.record("roiManager", "Open", path); + } + boolean ok = false; if (path.endsWith(".zip")) { boolean wasRecording = Recorder.record; Recorder.record = false; - openZip(path); + ok = openZip(path); Recorder.record = wasRecording; - return; + return ok; } Opener o = new Opener(); if (name==null) name = o.getName(path); @@ -822,13 +832,17 @@ void open(String path) { listModel.addElement(name); rois.add(roi); errorMessage = null; - } else - errorMessage = "Unable to open ROI at "+path; + ok = true; + } else { + errorMessage = "Unable to open ROI at "+path; + ok = false; + } updateShowAll(); + return ok; } // Modified on 2005/11/15 by Ulrik Stervbo to only read .roi files and to not empty the current list - void openZip(String path) { + boolean openZip(String path) { ZipInputStream in = null; ByteArrayOutputStream out = null; int nRois = 0; @@ -872,16 +886,24 @@ void openZip(String path) { error(errorMessage); } updateShowAll(); + return errorMessage==null; } - boolean save() { + /** If one ROI is selected, it is saved as a .roi + * file, if multiple (or no) ROIs are selected, + * they are saved as a .zip ROI set. Returns + * 'true' if the save operation was succesful. + * @see #setSelectedIndexes + */ + public boolean save(String path) { if (getCount()==0) return error("The selection list is empty."); int[] indexes = getIndexes(); if (indexes.length>1) - return saveMultiple(indexes, null); + return saveMultiple(indexes, path); else - return saveOne(indexes, null); + return saveOne(indexes, path); + } boolean saveOne(int[] indexes, String path) { @@ -911,14 +933,18 @@ boolean saveOne(int[] indexes, String path) { errorMessage = e.getMessage(); IJ.error("ROI Manager", errorMessage); } - if (Recorder.record && !IJ.isMacro()) - Recorder.record("roiManager", "Save", path); + if (Recorder.record && !IJ.isMacro()) { + if (Recorder.scriptMode()) + Recorder.recordCall("rm.save(\""+path+"\");"); + else + Recorder.record("roiManager", "Save", path); + } return true; } boolean saveMultiple(int[] indexes, String path) { Macro.setOptions(null); - if (path==null) { + if (path==null || path.equals("")) { SaveDialog sd = new SaveDialog("Save ROIs...", "RoiSet", ".zip"); String name = sd.getFileName(); if (name == null) @@ -962,8 +988,12 @@ boolean saveMultiple(int[] indexes, String path) { double time = (System.currentTimeMillis()-t0)/1000.0; IJ.showProgress(1.0); IJ.showStatus(IJ.d2s(time,3)+" seconds, "+indexes.length+" ROIs, "+path); - if (Recorder.record && !IJ.isMacro()) - Recorder.record("roiManager", "Save", path); + if (Recorder.record && !IJ.isMacro()) { + if (Recorder.scriptMode()) + Recorder.recordCall("rm.save(\""+path+"\");"); + else + Recorder.record("roiManager", "Save", path); + } return true; } @@ -1531,7 +1561,7 @@ void setProperties(Color color, int lineWidth, Color fillColor) { else roi.setPosition(rpRoi.getPosition()); } - if (roi instanceof TextRoi) { + if ((roi instanceof TextRoi) && showDialog) { roi.setImage(imp); if (font!=null) ((TextRoi)roi).setCurrentFont(font); @@ -1651,7 +1681,7 @@ private void combineRois(ImagePlus imp, Roi[] rois) { roi = Roi.convertLineToArea(roi); if (s1==null) { if (roi instanceof ShapeRoi) - s1 = (ShapeRoi)roi; + s1 = (ShapeRoi)roi.clone(); else s1 = new ShapeRoi(roi); if (s1==null) return; @@ -2268,19 +2298,21 @@ public boolean runCommand(String cmd, String name) { cmd = cmd.toLowerCase(); macro = true; if (cmd.equals("open")) { - open(Opener.makeFullPath(name)); + boolean ok = open(Opener.makeFullPath(name)); macro = false; - return true; + return ok; } else if (cmd.equals("save")) { + boolean ok = false; if (name!=null && name.endsWith(".roi")) - saveOne(getIndexes(), name); + ok = saveOne(getIndexes(), name); else - save(name, false); + ok = save(name, false); + return ok; } else if (cmd.equals("save selected")) { if (name!=null && name.endsWith(".roi")) - saveOne(getIndexes(), name); + return saveOne(getIndexes(), name); else - save(name, true); + return save(name, true); } else if (cmd.equals("rename")) { rename(name); macro = false; @@ -2574,9 +2606,6 @@ public void mouseWheelMoved(MouseWheelEvent event) { } } - /** Selects multiple ROIs, where 'indexes' is an array of integers, - each greater than or equal to 0 and less than the value returned by getCount(). - */ /** Selects multiple ROIs, where 'indexes' is an array of integers, each * greater than or equal to 0 and less than the value returned by getCount(). * @see #getSelectedIndexes diff --git a/ij/process/ByteStatistics.java b/ij/process/ByteStatistics.java index c7fabb261..fe033cffe 100644 --- a/ij/process/ByteStatistics.java +++ b/ij/process/ByteStatistics.java @@ -166,8 +166,10 @@ void getCalibratedMinAndMax(int minThreshold, int maxThreshold, float[] cTable) for (int i=minThreshold; i<=maxThreshold; i++) { if (histogram[i]>0) { v = cTable[i]; - if (vmax) max = v; + if (vmax) + max = v; } } } diff --git a/ij/process/ColorStatistics.java b/ij/process/ColorStatistics.java index 8f803cb42..f3627c474 100644 --- a/ij/process/ColorStatistics.java +++ b/ij/process/ColorStatistics.java @@ -87,8 +87,10 @@ void getIntStatistics(ImageProcessor ip) { for (int x=rx; x<(rx+rw); x++) { if (mask==null || mask[mi++]!=0) { v = pixels[i]; - if (vroiMax) roiMax = v; + if (vroiMax) + roiMax = v; } i++; } diff --git a/ij/process/FHT.java b/ij/process/FHT.java index 37903e193..13d36bb40 100644 --- a/ij/process/FHT.java +++ b/ij/process/FHT.java @@ -414,8 +414,10 @@ public ImageProcessor getPowerSpectrum () { base = row * maxN; for (int col=0; colmax) max = r; + if (rmax) + max = r; } } diff --git a/ij/process/FloatProcessor.java b/ij/process/FloatProcessor.java index 6bac0aefa..6a2166554 100644 --- a/ij/process/FloatProcessor.java +++ b/ij/process/FloatProcessor.java @@ -92,17 +92,26 @@ fixed min and max defined by setMinAndMax(), rather than the calculated min public void findMinAndMax() { if (fixedScale) return; - min = Float.MAX_VALUE; - max = -Float.MAX_VALUE; - for (int i=0; i < width*height; i++) { + float min = Float.MAX_VALUE; + float max = -Float.MAX_VALUE; + int i = 0; + for (; imax) + else if (value>max) max = value; } } + this.min = min; this.max = max; minMaxSet = true; } diff --git a/ij/process/FloatStatistics.java b/ij/process/FloatStatistics.java index 5e58f6b8a..360927832 100644 --- a/ij/process/FloatStatistics.java +++ b/ij/process/FloatStatistics.java @@ -67,8 +67,10 @@ void getStatistics(ImageProcessor ip, double minThreshold, double maxThreshold) if (mask==null || mask[mi++]!=0) { v = pixels[i]; if (v>=minThreshold && v<=maxThreshold) { - if (vroiMax) roiMax = v; + if (vroiMax) + roiMax = v; } } i++; @@ -79,8 +81,10 @@ void getStatistics(ImageProcessor ip, double minThreshold, double maxThreshold) histMin = min; histMax = max; } else { - if (minhistMax) max = histMax; + if (minhistMax) + max = histMax; } binSize = (histMax-histMin)/nBins; diff --git a/ij/process/IntProcessor.java b/ij/process/IntProcessor.java index fd1c6f8b2..2dcea1899 100644 --- a/ij/process/IntProcessor.java +++ b/ij/process/IntProcessor.java @@ -132,15 +132,17 @@ public int getNChannels() { public void findMinAndMax() { int size = width*height; int value; - min = Integer.MAX_VALUE; - max = -Integer.MAX_VALUE; - for (int i=0; imax) + else if (value>max) max = value; } + this.min = min; + this.max = max; minMaxSet = true; } diff --git a/ij/process/ShortProcessor.java b/ij/process/ShortProcessor.java index 84be7ee32..449d2f812 100644 --- a/ij/process/ShortProcessor.java +++ b/ij/process/ShortProcessor.java @@ -72,15 +72,17 @@ public void findMinAndMax() { return; int size = width*height; int value; - min = 65535; - max = 0; - for (int i=0; imax) + else if (value>max) max = value; } + this.min = min; + this.max = max; minMaxSet = true; } diff --git a/ij/process/ShortStatistics.java b/ij/process/ShortStatistics.java index 1b38cc331..ab647a92a 100644 --- a/ij/process/ShortStatistics.java +++ b/ij/process/ShortStatistics.java @@ -213,8 +213,10 @@ void getCalibratedMinAndMax(int[] hist, int minValue, int maxValue, float[] cTab for (int i=minValue; i<=maxValue; i++) { if (hist[i]>0) { v = cTable[i]; - if (vmax) max = v; + if (vmax) + max = v; } } } diff --git a/ij/process/StackConverter.java b/ij/process/StackConverter.java index 8dacd7083..2ab0fb575 100644 --- a/ij/process/StackConverter.java +++ b/ij/process/StackConverter.java @@ -173,6 +173,8 @@ public void convertToGray32() { /** Converts the Stack to RGB. */ public void convertToRGB() { + int z = imp.getNSlices(); + int t = imp.getNFrames(); if (imp.isComposite()) { RGBStackConverter.convertToRGB(imp); return; @@ -201,6 +203,7 @@ public void convertToRGB() { } IJ.showProgress(1.0); imp.setStack(null, stack2); + imp.setDimensions(1, z, t); imp.setCalibration(imp.getCalibration()); //update calibration } diff --git a/ij/process/StackStatistics.java b/ij/process/StackStatistics.java index 9eb06caa8..1e6dccc04 100644 --- a/ij/process/StackStatistics.java +++ b/ij/process/StackStatistics.java @@ -91,8 +91,10 @@ void doCalculations(ImagePlus imp, int bins, double histogramMin, double histog if (mask==null || mask[mi++]!=0) { v = ip.getPixelValue(x,y); if (v>=minThreshold && v<=maxThreshold) { - if (vroiMax) roiMax = v; + if (vroiMax) + roiMax = v; } } i++; diff --git a/ij/text/TextCanvas.java b/ij/text/TextCanvas.java index 7cf66a93b..9325756e0 100644 --- a/ij/text/TextCanvas.java +++ b/ij/text/TextCanvas.java @@ -63,7 +63,8 @@ public void paint(Graphics g) { for (;y=tp.iColWidth.length) break; + int w = tp.iColWidth[i]; Color b=Color.white,t=Color.black; if (j>=tp.selStart && j<=tp.selEnd) { int w2 = w; diff --git a/ij/text/TextPanel.java b/ij/text/TextPanel.java index 38a915f37..0c72e32df 100644 --- a/ij/text/TextPanel.java +++ b/ij/text/TextPanel.java @@ -97,7 +97,8 @@ public TextPanel(String title) { } void addPopupMenu() { - pm=new PopupMenu(); + pm = new PopupMenu(); + GUI.scalePopupMenu(pm); addPopupItem("Save As..."); pm.addSeparator(); addPopupItem("Cut"); diff --git a/ij/util/Tools.java b/ij/util/Tools.java index f5e5f74f1..c925bc69d 100644 --- a/ij/util/Tools.java +++ b/ij/util/Tools.java @@ -55,14 +55,14 @@ public static ImageStatistics getStatistics(double[] a) { } public static double[] getMinMax(double[] a) { - double min = Double.MAX_VALUE; - double max = -Double.MAX_VALUE; + double min = a[0]; + double max = a[0]; double value; - for (int i=0; imax) + else if (value>max) max = value; } double[] minAndMax = new double[2]; @@ -72,14 +72,14 @@ public static double[] getMinMax(double[] a) { } public static double[] getMinMax(float[] a) { - double min = Double.MAX_VALUE; - double max = -Double.MAX_VALUE; + double min = a[0]; + double max = a[0]; double value; - for (int i=0; imax) + else if (value>max) max = value; } double[] minAndMax = new double[2]; diff --git a/release-notes.html b/release-notes.html index 8eb21e9b3..a6fff5673 100644 --- a/release-notes.html +++ b/release-notes.html @@ -5,6 +5,98 @@ +
    • 1.53m 27 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