CINXE.COM

Groovy Scripting

<!DOCTYPE html> <html> <head> <title>Groovy Scripting</title> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=3" /> <meta content="ImageJ Wiki" property="og:site_name"> <meta content="Groovy Scripting" property="og:title"> <meta content="article" property="og:type"> <meta content="The ImageJ wiki is a community-edited knowledge base on topics relating to ImageJ, a public domain program for processing and analyzing scientific images, and its ecosystem of derivatives and variants, including ImageJ2, Fiji, and others." property="og:description"> <meta content="https://imagej.github.io/scripting/groovy/index" property="og:url"> <meta content="https://imagej.github.io/media/icons/imagej2.png" property="og:image"> <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"> <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> <link rel="manifest" href="/site.webmanifest"> <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"> <meta name="msapplication-TileColor" content="#da532c"> <meta name="theme-color" content="#ffffff"> <link rel="stylesheet" href="/assets/css/lightbox.min.css" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.css@7/themes/algolia-min.css"/> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/dygraphs@2.1.0/dist/dygraph.min.js"></script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/dygraphs@2.1.0/dist/dygraph.min.css" /> <link rel="stylesheet" href="/assets/css/main.css" /> <link rel="stylesheet" href="/assets/css/layout.css"/> <link rel="stylesheet" href="/assets/css/includes.css" /> <link rel="stylesheet" href="/assets/css/dock.css"/> <noscript><link rel="stylesheet" href="/assets/css/noscript.css" /></noscript> <link rel="stylesheet" href="/assets/css/page.css" /> </head> <body class="is-preload"> <!-- Top bar --> <section id="top-bar"> <a href="/"><img id="site-logo" src="/media/icons/imagej2.png"></a> <div id="search-panel"> <div id="search-box"></div> </div> </section> <!-- Page-info --> <div class="page-info"> <a href="https://github.com/imagej/imagej.github.io/commits/main/_pages/scripting/groovy/index.md">Page history</a> <a href="https://github.com/imagej/imagej.github.io/edit/main/_pages/scripting/groovy/index.md">Edit this page</a> <a href="/editing">How do I edit this website?</a></div> <section id="left-column" class="sidebar dock"> <!-- Menu --> <div class="menu dockable"> <div class="drag-handle"></div><h3>ImageJ Docs</h3> <ul> <li><a href="/downloads">Download</a></li> <li><details><summary>Learn</summary><ul> <li><details><summary><a href="/learn">ImageJ Basics</a></summary><ul> <li><a href="/tutorials">Tutorials</a></li> <li><a href="/learn/user-guides">User Guides</a></li> <li><a href="/learn/keyboard-shortcuts">Keyboard Shortcuts</a></li> <li><a href="/learn/tips-and-tricks">Tips and Tricks</a></li> <li><a href="/learn/troubleshooting">Troubleshooting</a></li> <li><a href="/learn/faq">Frequently Asked Questions</a></li> <li><details><summary><a href="/platforms">Supported Platforms</a></summary><ul> <li><a href="/platforms/windows">Windows</a></li> <li><a href="/platforms/macos">MacOS</a></li> <li><a href="/platforms/linux">Linux</a></li> <li><a href="/platforms/pi">Raspberry Pi</a></li> <li><a href="/platforms/android">Android</a></li> </ul></details></li> <!-- Learn/ImageJ Basics/Supported Platforms --> <li><details><summary><a href="/formats">File Formats</a></summary><ul> <li><a href="/formats/bio-formats">Bio-Formats</a></li> <li><a href="/formats/video">Video formats</a></li> <li><a href="/formats/quicktime">QuickTime</a></li> <li><a href="/formats/tiff">TIFF</a></li> <li><a href="/formats/pdf">PDF</a></li> <li><a href="/formats/dicom">DICOM</a></li> <li><a href="/formats/lsm">Zeiss LSM</a></li> <li><a href="/formats/olympus">Olympus VSI</a></li> <li><a href="/formats/lurawave">Opera Flex</a></li> <li><a href="/formats/fib-sem">FIB-SEM</a></li> </ul></details></li> <!-- Learn/ImageJ Basics/File Formats --> </ul></details></li> <!-- Learn/ImageJ --> <li><details><summary><a href="/imaging">Scientific Imaging</a></summary><ul> <li><a href="/imaging/principles">Principles of Scientific Imaging</a></li> <li><a href="/imaging/annotating-images">Annotating Images</a></li> <li><a href="/imaging/colocalization-analysis">Colocalization</a></li> <li><a href="/imaging/color-image-processing">Color Image Processing</a></li> <li><a href="/imaging/deconvolution">Deconvolution</a></li> <li><a href="/imaging/image-intensity-processing">Image Intensity Processing</a></li> <li><a href="/imaging/particle-analysis">Particle Analysis</a></li> <li><a href="/imaging/registration">Registration</a></li> <li><a href="/imaging/segmentation">Segmentation</a></li> <li><a href="/imaging/stack-slice-manipulations">Stack-slice Manipulations</a></li> <li><a href="/imaging/t-functions">T-functions</a></li> <li><a href="/imaging/tracking">Tracking</a></li> <li><a href="/imaging/visualization">Visualization</a></li> <li><a href="/imaging/z-functions">Z-functions</a></li> </ul></details></li> <!-- Learn/Scientific Imaging --> </ul></details></li> <!-- Learn --> <li><details open><summary><a href="/plugins">Extend</a></summary><ul> <li><a href="/list-of-extensions">List of Extensions</a></li> <li><details><summary><a href="/update-sites">Update Sites</a></summary><ul> <li><a href="/list-of-update-sites">List of Update Sites</a></li> <li><a href="/update-sites/following">Following an Update Site</a></li> <li><a href="/update-sites/setup">Creating an Update Site</a></li> <li><a href="/update-sites/tos">Terms of Service</a></li> <li><a href="/update-sites/automatic-uploads">Automatic Upload</a></li> <li><a href="/update-sites/core-uploads">Uploading to Core Sites</a></li> <li><a href="/update-sites/faq">Update Sites FAQ</a></li> <li><a href="/update-sites/stats">Statistics</a></li> </ul></details></li> <!-- Extend/Update Sites --> <li><details open><summary><a href="/scripting">Scripting</a></summary><ul> <li><a href="/scripting/basics">Scripting Basics</a></li> <li><a href="/scripting/script-editor">Script Editor</a></li> <li><a href="/scripting/parameters">Parameters</a></li> <li><a href="/scripting/user-input">User Input</a></li> <li><a href="/scripting/auto-imports">Auto Import</a></li> <li><a href="/scripting/templates">Templates</a></li> <li><a href="/scripting/batch">Batch Processing</a></li> <li><a href="/scripting/headless">Running Headlessly</a></li> <li><a href="/scripting/comparisons">Scripting Comparisons</a></li> <li><a href="/scripting/toolbox">Toolbox</a></li> <li><details open><summary>Languages</summary><ul> <li><a href="/scripting/beanshell">BeanShell Scripting</a></li> <li><a class="current-page">Groovy Scripting</a></li> <li><a href="/scripting/macro">ImageJ Macro</a></li> <li><a href="/scripting/javascript">JavaScript</a></li> <li><a href="/scripting/clojure">Lisp (Clojure)</a></li> <li><a href="/scripting/matlab">MATLAB</a></li> <li><a href="/scripting/jython">Python (Jython)</a></li> <li><a href="/scripting/python">Python (native)</a></li> <li><a href="/scripting/renjin">R (Renjin)</a></li> <li><a href="/scripting/jruby">Ruby (JRuby)</a></li> <li><a href="/scripting/scala">Scala Scripting</a></li> </ul></details></li> <!-- Extend/Scripting/Languages --> </ul></details></li> <!-- Extend/Scripting --> <li><details><summary><a href="/develop">Development</a></summary><ul> <li><a href="/develop/philosophy">Philosophy</a></li> <li><a href="/develop/architecture">Architecture</a></li> <li><a href="/develop/source">Source code</a></li> <li><a href="/develop/project-management">Project management</a></li> <li><a href="/develop/coding-style">Coding style</a></li> <li><a href="/develop/javadoc">Using Javadoc</a></li> <li><a href="/develop/debugging">Debugging</a></li> <li><a href="/develop/wish-list">Wish list</a></li> <li><details><summary>Tools</summary><ul> <li><a href="/develop/github">GitHub</a></li> <li><a href="/develop/maven">Maven</a></li> <li><a href="/develop/ci">CI/CD</a></li> <li><a href="/develop/dotfiles">Dotfiles</a></li> <li><details><summary><a href="/develop/ides">IDEs</a></summary><ul> <li><a href="/develop/eclipse">Eclipse</a></li> <li><a href="/develop/netbeans">NetBeans</a></li> <li><a href="/develop/intellij">IntelliJ IDEA</a></li> <li><a href="/develop/command-line">Command Line</a></li> </ul></details></li> </ul></details></li> <!-- Extend/Development/Tools --> <li><details><summary>Guides</summary><ul> <li><a href="/develop/plugins">Writing plugins</a></li> <li><a href="/develop/improving-the-code">Contributing to a plugin</a></li> <li><a href="/develop/releasing">Development lifecycle</a></li> <li><a href="/develop/building-a-pom">Building a POM</a></li> <li><a href="/develop/debugging-exercises">Hands-on debugging</a></li> <li><a href="/develop/writing-ops">Adding new ops</a></li> <li><a href="/develop/formats">Adding new formats</a></li> <li><a href="/develop/native-libraries">Using native libraries</a></li> <li><a href="/develop/tips">Tips for developers</a></li> <li><a href="/develop/cpp-tips">Tips for C++ developers</a></li> <li><a href="/develop/ij1-plugins">ImageJ 1.x plugins</a></li> <li><a href="/develop/versioning">Versioning</a></li> <li><a href="/develop/logging">Logging</a></li> <li><a href="/develop/uber-jars">Uber-JARs</a></li> </ul></details></li> <!-- Extend/Development/Guides --> <li><details><summary><a href="/develop/git">Git</a></summary><ul> <li><a href="/develop/git/eclipse">Git in Eclipse (EGit)</a></li> <li><a href="/develop/git/mini-howto">Git mini howto</a></li> <li><a href="/develop/git/workshop">Git workshop</a></li> <li><a href="/develop/git/conflicts">Git conflicts</a></li> <li><a href="/develop/git/topic-branches">Git topic branches</a></li> <li><a href="/develop/git/notes">Git notes</a></li> <li><a href="/develop/git/reflogs">Git reflogs</a></li> <li><a href="/develop/git/submodules">Git submodules</a></li> <li><a href="/develop/git/pinpoint-regressions">How to pinpoint regressions</a></li> <li><a href="/develop/git/publish-a-repository">How to publish a git repository</a></li> <li><a href="/develop/git/extract-a-subproject">How to extract a subproject</a></li> </ul></details></li> <!-- Extend/Development/Git --> </ul></details></li> <!-- Extend/Development --> </ul></details></li> <!-- Extend --> <li><details><summary><a href="/contribute">Contribute</a></summary><ul> <li><a href="/contribute/citing">Citing</a></li> <li><a href="/people">Contributors</a></li> <li><a href="/orgs">Organizations</a></li> <li><a href="/contribute/governance">Governance</a></li> <li><a href="/contribute/funding">Funding</a></li> <li><a href="/contribute/fiji">Contributing to Fiji</a></li> <li><details><summary><a href="/licensing">Licensing</a></summary><ul> <li><details><summary><a href="/licensing/open-source">Open Source</a></summary><ul> <li><a href="/licensing/apache">Apache</a></li> <li><a href="/licensing/bsd">BSD</a></li> <li><a href="/licensing/epl">EPL</a></li> <li><a href="/licensing/gpl">GPL</a></li> <li><a href="/licensing/lgpl">LGPL</a></li> <li><a href="/licensing/mit">MIT</a></li> <li><a href="/licensing/public-domain">Public domain</a></li> <li><a href="/licensing/big">BIG</a></li> </ul></details></li> <!-- Contribute/Licensing/Open Source --> <li><a href="/licensing/closed-source">Proprietary</a></li> </ul></details></li> <!-- Contribute/Licensing --> <li><details><summary><a href="/editing">Editing the Wiki</a></summary><ul> <li><a href="/editing/advanced">Advanced Editing</a></li> <li><a href="/editing/buttons">Buttons</a></li> <li><a href="/editing/citations">Citations</a></li> <li><a href="/editing/code">Source Code</a></li> <li><a href="/editing/debugging">Debugging</a></li> <li><a href="/editing/headers">Headers</a></li> <li><a href="/editing/icons">Icons</a></li> <li><a href="/editing/images">Images</a></li> <li><a href="/editing/keys">Keyboard Shortcuts</a></li> <li><a href="/editing/linking">Linking</a></li> <li><a href="/editing/math">Math Expressions</a></li> <li><a href="/editing/menu-paths">Menu Paths</a></li> <li><a href="/editing/navigation">Navigation</a></li> <li><a href="/editing/notices">Notices</a></li> <li><a href="/editing/people">People</a></li> <li><a href="/editing/pitfalls">Pitfalls</a></li> <li><a href="/editing/quizzes">Quizzes</a></li> <li><a href="/editing/statbox">Statbox</a></li> <li><a href="/editing/symbols">Symbols</a></li> <li><a href="/editing/tables">Tables</a></li> <li><a href="/editing/tooltips">Tooltips</a></li> <li><a href="/editing/videos">Videos</a></li> <li><a href="/editing/whitespace">Whitespace</a></li> </ul></details></li> <!-- Contribute/Editing the Wiki --> </ul></details></li> <!-- Contribute --> <li><details><summary><a href="/discuss">Discuss</a></summary><ul> <li><a href="/discuss/bugs">Reporting Issues</a></li> <li><a href="/discuss/mailing-lists">Mailing Lists</a></li> <li><a href="/discuss/chat">Chat</a></li> </ul></details></li> <!-- Discuss --> <li><details><summary>Explore</summary><ul> <li><a href="/news">News</a></li> <li><details><summary><a href="/events">Events</a></summary><ul> <li><a href="/events/presentations">Presentations</a></li> <li><a href="/events/conferences">Conferences</a></li> <li><a href="/events/hackathons">Hackathons</a></li> <li><a href="/events">More...</a></li> </ul></details></li> <!-- Discuss/Events --> <li><details><summary><a href="/libs">Libraries</a></summary><ul> <li><a href="/libs/imagej-ops">ImageJ Ops</a></li> <li><a href="/libs/imagej-common">ImageJ Common</a></li> <li><a href="/libs/imagej-legacy">ImageJ Legacy</a></li> <li><a href="/libs/scijava">SciJava</a></li> <li><a href="/libs/scifio">SCIFIO</a></li> <li><details><summary><a href="/libs/imglib2">ImgLib2</a></summary><ul> <li><a href="/libs/imglib2/getting-started">Getting Started</a></li> <li><a href="/libs/imglib2/accessors">Accessors</a></li> <li><a href="/libs/imglib2/accessibles">Accessibles</a></li> <li><a href="/libs/imglib2/examples">Examples</a></li> <li><a href="/libs/imglib2/workshop-introductory">Introductory Workshop</a></li> <li><a href="/libs/imglib2/workshop-advanced">Advanced Workshop</a></li> <li><a href="/libs/imglib2/matlab">ImgLib2 images in MATLAB</a></li> <li><a href="/libs/imglib2/benchmarks">Benchmarks</a></li> <li><a href="/libs/imglib2/faq">FAQ</a></li> <li><a href="/libs/imglib2/developing">Developing ImgLib2</a></li> <li><a href="/libs/imglib2/discussion">ImgLib2 Discussion</a></li> </ul></details></li> <!-- Explore/Libraries/ImgLib2 --> <li><a href="/libs">More...</a></li> </ul></details></li> <!-- Explore/Libraries --> <li><details><summary><a href="/software">Software</a></summary><ul> <li><a href="/software/nih-image">NIH Image</a></li> <li><a href="/software/imagej">ImageJ</a></li> <li><a href="/software/imagej2">ImageJ2</a></li> <li><a href="/software/fiji">Fiji</a></li> <li><a href="/software">More...</a></li> </ul></details></li> <!-- Explore/Software --> </ul></details></li> <!-- Explore --> </ul> </div> </section> <section id="right-column" class="sidebar dock"> <!-- Vital stats --> <!-- Table of contents --> <div id="toc" class="toc menu dockable"> <div class="drag-handle"></div> <h3>Page contents</h3> <ul data-toc="#content" data-toc-headings="h1,h2,h3,h4,h5,h6"></ul> </div> </section> <!-- Page title --> <div class="container"> <header class="major special"> <a class="project-icon shadowed-box" href="/software/imagej2"><span class="tooltip"><img src="/media/icons/imagej2.png"><span class="tooltiptext" style="top: 80%; left: 25%; width: 20em">This page describes content relating to the ImageJ2 platform. Click the logo for details.</span></span></a> <h1>Groovy Scripting</h1> <span class="project-counterweight"> </span> </header> </div> <!-- Nav bar --> <div id="nav-bar"><ul class="shadowed-box"><li>Groovy&nbsp;Scripting</li><li><a href="/scripting/groovy/ides">Set&nbsp;up&nbsp;IDE&nbsp;for&nbsp;Groovy</a></li></ul></div> <!-- Main content --> <section id="page" class="main style1"> <div class="container"> <div class="box alt"></div> <div id="content" class="page-content"> <h2 id="introduction">Introduction</h2> <p><a href="http://groovy-lang.org/">Groovy</a> is an agile and dynamic language for the Java Virtual Machine. It builds upon the strengths of <a href="/develop/plugins">Java</a> but has additional power features inspired by languages like <a href="/scripting/python">Python</a>, <a href="/scripting/jruby">Ruby</a> and Smalltalk.</p> <h2 id="quickstart">Quickstart</h2> <ul> <li>Press <kbd class="key">[</kbd> to bring up the <a href="/scripting/script-editor">Script Editor</a>.</li> <li>Select an example Groovy script from the <span class="bc"><span>Templates</span> › <span>[by language]</span> › <span>Groovy</span></span> menu.</li> <li>Press <kbd class="key">&#8963; Ctrl</kbd> + <kbd class="key">R</kbd> to run the script!</li> </ul> <h2 id="tips-for-groovy-scripting-in-imagej">Tips for groovy scripting in ImageJ</h2> <div class="notice" style="font-size: 2; background: #ebf2f8; border-left: 10px solid #67a1fe"><div class="notice-icon"><img src="/media/icons/info.svg" width="32" /></div><div class="notice-content"><p>For an introduction in ImageJ scripting visit the page <a href="/scripting/basics">Scripting basics</a>.</p> </div> </div> <h3 id="introduction-1">Introduction</h3> <p>The aim of this page is not to teach how to program in Groovy. This purpose is much better fullfiled by the <a href="http://groovy-lang.org/documentation.html#gettingstarted">Groovy Quick Start</a>. The focus of this page is to show how to best use Groovy for scripting in ImageJ</p> <h3 id="use-an-ide-for-groovy-scripting">Use an IDE for Groovy scripting</h3> <p>As Groovy builds upon <a href="/develop/plugins">Java</a>, it can be use in a full fledged IDE with Fiji. If interested, follow this <a href="/scripting/groovy/ides">tutorial</a>.</p> <h2 id="when-to-use-groovy">When to use Groovy</h2> <p>The following list will help you to decide if Groovy is the right choice for you to create scripts for ImageJ:</p> <ul> <li> <p>If you have experience with Java, you can easily use Groovy for ImageJ scripting.</p> </li> <li> <p>If you want to be able to rapidly prototype something and make calls to external libraries, Groovy is a good choice.</p> </li> <li> <p>If you don’t have experience with Java, but would like to get some, then scripting with Groovy can be a good way to learn.</p> </li> <li> <p>If you have very little or no experience in programming, you may like to explore <a href="/scripting/jython">Jython</a> as it is an easy-to-read but feature-rich language.</p> </li> </ul> <h2 id="explanation">Explanation</h2> <p>At a basic level, Groovy is very similar to Java. As your familiarity with it grows, you will find it can do some things that Java can’t. Like Java, Groovy can access any class libraries that are present in the classpath. This allows you to to include 3rd party libraries which may not immediately be present in Fiji/ImageJ, but which you can download. Examples would include database connections, libraries for communication purposes, The list is long!</p> <h2 id="groovy-basics-for-imagej">Groovy basics for ImageJ</h2> <div class="notice" style="font-size: 2; background: #ebf2f8; border-left: 10px solid #67a1fe"><div class="notice-icon"><img src="/media/icons/info.svg" width="32" /></div><div class="notice-content"><p>For an introduction in ImageJ scripting visit the page <a href="/scripting/basics">Scripting basics</a>.</p> </div> </div> <h3 id="hello-world">Hello, World!</h3> <h4 id="--with-print--println">- With print / println</h4> <p>The print and println commands send output to the console, with the difference being that println always appends a newline character at the end</p> <div class="language-groovy highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">println</span> <span class="s2">"Hello, World!"</span> <span class="c1">// Let's show it handling numbers too</span> <span class="n">println</span> <span class="s2">"Result of 2 + 2: "</span> <span class="o">+</span> <span class="o">(</span><span class="mi">2</span><span class="o">+</span><span class="mi">2</span><span class="o">)</span> <span class="c1">// what happens if we don't use the parentheses?</span> <span class="n">print</span> <span class="s2">"Result of 2 + 2: "</span> <span class="o">+</span> <span class="mi">2</span><span class="o">+</span><span class="mi">2</span> </code></pre></div></div> <p>Note - <code class="language-plaintext highlighter-rouge">print</code> and <code class="language-plaintext highlighter-rouge">println</code> will send their output to the standalone console if it’s open. If not, it will go to the console of the Fiji Script Editor. Use cases would be where you want some sort of text output (to show values, progress etc), but you don’t want it popping up for the user.</p> <h4 id="--with-ijlog">- With IJ.log()</h4> <p><code class="language-plaintext highlighter-rouge">IJ.log()</code> is an example of an ImageJ java function (also called a method. It creates a window in ImageJ (if one isn’t already open) and writes text to it. Newline characters are always appended with each call.</p> <div class="language-groovy highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">ij.IJ</span> <span class="n">IJ</span><span class="o">.</span><span class="na">log</span><span class="o">(</span><span class="s2">"Hello, World!"</span><span class="o">)</span> <span class="c1">// Let's show it handling numbers too</span> <span class="n">IJ</span><span class="o">.</span><span class="na">log</span><span class="o">(</span><span class="s2">"Result of 2 + 2: "</span> <span class="o">+</span> <span class="o">(</span><span class="mi">2</span><span class="o">+</span><span class="mi">2</span><span class="o">))</span> <span class="c1">// what happens if we don't use the parentheses?</span> <span class="n">IJ</span><span class="o">.</span><span class="na">log</span><span class="o">(</span><span class="s2">"Result of 2 + 2: "</span> <span class="o">+</span> <span class="mi">2</span><span class="o">+</span><span class="mi">2</span><span class="o">)</span> </code></pre></div></div> <p>If you tried out both sets of examples, the lines containing (2+2) will have evaluated as <code class="language-plaintext highlighter-rouge">4</code>, whereas the lines that don’t have the brackets are treated as strings, giving <code class="language-plaintext highlighter-rouge">22</code></p> <p>Image selection using the GenericDialog class</p> <p>This example script will create up to 10 new images and create a GenericDialog to select 3 of them. Finally the names of the selected images are printed to the Log window. It is recommended to copy the code to the <a href="/scripting/script-editor">Script Editor</a> and run it by yourself.</p> <div class="language-groovy highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Import the classes that are needed. </span> <span class="kn">import</span> <span class="nn">ij.IJ</span> <span class="kn">import</span> <span class="nn">ij.WindowManager</span> <span class="kn">import</span> <span class="nn">ij.gui.GenericDialog</span> <span class="kn">import</span> <span class="nn">ij.plugin.frame.RoiManager</span> <span class="c1">// The IJ class contains a number of utilities. For this script, it provides the "log" functionality</span> <span class="c1">// A class which gives access to the window objects</span> <span class="c1">// A class which allows for creation of custom dialogs with relative ease.</span> <span class="c1">// The ROI Manager - useful for accessing ROIs.</span> <span class="c1">// next we'll define some functions. </span> <span class="c1">// Function to create a test image</span> <span class="kt">def</span> <span class="nf">createTestImage</span><span class="o">()</span> <span class="o">{</span> <span class="kt">int</span> <span class="n">imageWidth</span> <span class="o">=</span> <span class="mi">512</span> <span class="c1">// here, we're using explicit types - int holds an integer.</span> <span class="kt">int</span> <span class="n">imageHeight</span> <span class="o">=</span> <span class="mi">512</span> <span class="kt">int</span> <span class="n">boxWidth</span> <span class="o">=</span> <span class="mi">128</span> <span class="kt">int</span> <span class="n">boxHeight</span> <span class="o">=</span> <span class="mi">128</span> <span class="kt">int</span> <span class="n">offsetX</span> <span class="o">=</span> <span class="o">(</span><span class="kt">int</span><span class="o">)</span> <span class="mi">192</span> <span class="o">*</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">Math</span><span class="o">.</span><span class="na">random</span><span class="o">()</span> <span class="c1">// (int) causes the rest of the statement to be forced to an integer - no decimal places!</span> <span class="kt">int</span> <span class="n">offsetY</span> <span class="o">=</span> <span class="o">(</span><span class="kt">int</span><span class="o">)</span> <span class="mi">192</span> <span class="o">*</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">Math</span><span class="o">.</span><span class="na">random</span><span class="o">()</span> <span class="kt">int</span> <span class="n">counts</span> <span class="o">=</span> <span class="mi">64</span> <span class="kt">int</span> <span class="n">stdv</span> <span class="o">=</span> <span class="mi">16</span> <span class="c1">// The following are nested definitions. They are not available outside the "createTestImage" function.</span> <span class="c1">// the following line is called a closure. It's a short-hand way of creating a function.</span> <span class="c1">// This one returns a string: makeTitle("Testing", 1, 2) will give 'Testing: 1, 2' as the output.</span> <span class="kt">def</span> <span class="n">makeTitle</span> <span class="o">=</span> <span class="o">{</span> <span class="n">prefix</span><span class="o">,</span> <span class="n">x</span><span class="o">,</span> <span class="n">y</span> <span class="o">-&gt;</span> <span class="s2">"${prefix}: ${x}, ${y}"</span> <span class="o">}</span> <span class="c1">// we'll now call the makeTitle function and store the result in a variable called "title"</span> <span class="c1">// note that it's not a pre-defined type, instead the interpreter will decide what to use.</span> <span class="kt">def</span> <span class="n">title</span> <span class="o">=</span> <span class="n">makeTitle</span><span class="o">(</span><span class="s1">'TestImage'</span><span class="o">,</span> <span class="n">offsetX</span><span class="o">,</span> <span class="n">offsetY</span><span class="o">)</span> <span class="c1">// This closure looks a bit more like a java function. It's going to return either true or false.</span> <span class="kt">def</span> <span class="n">checkExistence</span> <span class="o">=</span> <span class="o">{</span> <span class="n">titleToCheck</span> <span class="o">-&gt;</span> <span class="kt">def</span> <span class="n">idList</span> <span class="o">=</span> <span class="n">WindowManager</span><span class="o">.</span><span class="na">getIDList</span><span class="o">()</span> <span class="c1">// get the list of open images</span> <span class="k">if</span> <span class="o">(</span><span class="n">idList</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="k">return</span> <span class="kc">false</span> <span class="c1">// if the list is empty, return false.</span> <span class="c1">// 'collect', in the next line, is a Groovy method that iterates through whatever it is attached to </span> <span class="c1">// and executes the code inside the curly brackets on each item it encounters.</span> <span class="c1">// In this case, it retrieves the title of each image into a list.</span> <span class="kt">def</span> <span class="n">imageTitles</span> <span class="o">=</span> <span class="n">idList</span><span class="o">.</span><span class="na">collect</span> <span class="o">{</span> <span class="n">WindowManager</span><span class="o">.</span><span class="na">getImage</span><span class="o">(</span><span class="n">it</span><span class="o">).</span><span class="na">getTitle</span><span class="o">()</span> <span class="o">}</span> <span class="k">return</span> <span class="n">imageTitles</span><span class="o">.</span><span class="na">contains</span><span class="o">(</span><span class="n">titleToCheck</span><span class="o">)</span> <span class="o">}</span> <span class="c1">// That's it for the nested definitions, now lets use them.</span> <span class="c1">// Check if the image *doesn't* exist..</span> <span class="k">if</span> <span class="o">(!</span><span class="n">checkExistence</span><span class="o">(</span><span class="n">title</span><span class="o">))</span> <span class="o">{</span> <span class="c1">// if not, create an ImagePlus with the title, and image dimensions given</span> <span class="kt">def</span> <span class="n">imp</span> <span class="o">=</span> <span class="n">IJ</span><span class="o">.</span><span class="na">createImage</span><span class="o">(</span><span class="n">title</span><span class="o">,</span> <span class="s2">"8-bit black"</span><span class="o">,</span> <span class="n">imageWidth</span><span class="o">,</span> <span class="n">imageHeight</span><span class="o">,</span> <span class="mi">1</span><span class="o">)</span> <span class="n">imp</span><span class="o">.</span><span class="na">show</span><span class="o">()</span> <span class="c1">// The following lines use calls to functionality that's already available - no need to reinvent the wheel.</span> <span class="c1">// Use the ImageJ mathematical function to add the value of "counts" to the current pixel values.</span> <span class="n">IJ</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">imp</span><span class="o">,</span> <span class="s2">"Add..."</span><span class="o">,</span> <span class="s2">"value=${counts}"</span><span class="o">)</span> <span class="c1">// Create a simple rectangular ROI</span> <span class="n">imp</span><span class="o">.</span><span class="na">setRoi</span><span class="o">(</span><span class="n">offsetX</span><span class="o">,</span> <span class="n">offsetY</span><span class="o">,</span> <span class="n">boxWidth</span><span class="o">,</span> <span class="n">boxHeight</span><span class="o">)</span> <span class="c1">// and use the Add function again. This will only apply to the ROI</span> <span class="n">IJ</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">imp</span><span class="o">,</span> <span class="s2">"Add..."</span><span class="o">,</span> <span class="s2">"value=${counts}"</span><span class="o">)</span> <span class="c1">// Select None removes the ROI - the whole image is now "active" </span> <span class="n">IJ</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="s2">"Select None"</span><span class="o">)</span> <span class="c1">// Add noise to the image</span> <span class="n">IJ</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">imp</span><span class="o">,</span> <span class="s2">"Add Specified Noise..."</span><span class="o">,</span> <span class="s2">"standard=${stdv}"</span><span class="o">)</span> <span class="c1">// That was a groovy-styled way of building the required parameter string</span> <span class="c1">// In Java, you would use "standard=" + stdv)</span> <span class="c1">// Tell ImageJ we're not interested in changes</span> <span class="n">imp</span><span class="o">.</span><span class="na">changes</span> <span class="o">=</span> <span class="kc">false</span> <span class="c1">// Display the image.</span> <span class="n">imp</span><span class="o">.</span><span class="na">show</span><span class="o">()</span> <span class="o">}</span> <span class="o">}</span> <span class="c1">// Another function to help us to build a dialog to show to the user. </span> <span class="c1">// It uses the GenericDialog class and takes 3 arguments: titles, defaults and a string for the dialog title.</span> <span class="kt">def</span> <span class="nf">createSelectionDialog</span><span class="o">(</span><span class="n">imageTitles</span><span class="o">,</span> <span class="n">defaults</span><span class="o">,</span> <span class="n">dialogTitle</span><span class="o">)</span> <span class="o">{</span> <span class="c1">// create a new instance of GenericDialog</span> <span class="kt">def</span> <span class="n">gd</span> <span class="o">=</span> <span class="k">new</span> <span class="n">GenericDialog</span><span class="o">(</span><span class="n">dialogTitle</span><span class="o">)</span> <span class="c1">// A quick way to loop through an object, adding choices as we go.</span> <span class="n">defaults</span><span class="o">.</span><span class="na">eachWithIndex</span> <span class="o">{</span> <span class="n">defVal</span><span class="o">,</span> <span class="n">index</span> <span class="o">-&gt;</span> <span class="n">gd</span><span class="o">.</span><span class="na">addChoice</span><span class="o">(</span><span class="s2">"Image_${index + 1}"</span><span class="o">,</span> <span class="n">imageTitles</span> <span class="k">as</span> <span class="n">String</span><span class="o">[],</span> <span class="n">imageTitles</span><span class="o">[</span><span class="n">defVal</span><span class="o">])</span> <span class="o">}</span> <span class="c1">// show the dialog to the user</span> <span class="n">gd</span><span class="o">.</span><span class="na">showDialog</span><span class="o">()</span> <span class="k">if</span> <span class="o">(</span><span class="n">gd</span><span class="o">.</span><span class="na">wasCanceled</span><span class="o">())</span> <span class="k">return</span> <span class="kc">null</span> <span class="c1">// if the user clicks cancel, return Null. </span> <span class="c1">// the next line won't execute if the previous one evaluated as true, because the return statement causes the function to terminate. </span> <span class="k">return</span> <span class="n">defaults</span><span class="o">.</span><span class="na">collect</span> <span class="o">{</span> <span class="n">gd</span><span class="o">.</span><span class="na">getNextChoiceIndex</span><span class="o">()</span> <span class="o">}</span> <span class="o">}</span> <span class="c1">// Main script execution</span> <span class="kt">def</span> <span class="nf">runScript</span><span class="o">()</span> <span class="o">{</span> <span class="k">while</span> <span class="o">(</span><span class="n">WindowManager</span><span class="o">.</span><span class="na">getImageCount</span><span class="o">()</span> <span class="o">&lt;</span> <span class="mi">10</span><span class="o">)</span> <span class="o">{</span> <span class="c1">// create a test image as long as the count is less than 10</span> <span class="n">createTestImage</span><span class="o">()</span> <span class="o">}</span> <span class="c1">// retrieve a list of the image titles using the WindowManager class.</span> <span class="kt">def</span> <span class="n">imageTitles</span> <span class="o">=</span> <span class="n">WindowManager</span><span class="o">.</span><span class="na">getIDList</span><span class="o">().</span><span class="na">collect</span> <span class="o">{</span> <span class="n">WindowManager</span><span class="o">.</span><span class="na">getImage</span><span class="o">(</span><span class="n">it</span><span class="o">).</span><span class="na">getTitle</span><span class="o">()</span> <span class="o">}</span> <span class="c1">// now we'll pass this to the createSelectionDialog function that was defined earlier.</span> <span class="kt">def</span> <span class="n">selectedIndices</span> <span class="o">=</span> <span class="n">createSelectionDialog</span><span class="o">(</span><span class="n">imageTitles</span><span class="o">,</span> <span class="o">[</span><span class="mi">0</span><span class="o">,</span> <span class="mi">1</span><span class="o">,</span> <span class="mi">2</span><span class="o">],</span> <span class="s1">'Select images for processing'</span><span class="o">)</span> <span class="k">if</span> <span class="o">(</span><span class="n">selectedIndices</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span> <span class="c1">// check if the user clicked cancel - see above!!</span> <span class="n">println</span> <span class="s2">"Script was canceled."</span> <span class="c1">// print this to the console (Not the log window)</span> <span class="k">return</span> <span class="c1">// return without a value</span> <span class="o">}</span> <span class="c1">// if selectedIndices wasn't null, the following code will execute</span> <span class="c1">// get a list of the avilable images (as ImagePlus objects)</span> <span class="kt">def</span> <span class="n">selectedImages</span> <span class="o">=</span> <span class="n">selectedIndices</span><span class="o">.</span><span class="na">collect</span> <span class="o">{</span> <span class="n">WindowManager</span><span class="o">.</span><span class="na">getImage</span><span class="o">(</span><span class="n">WindowManager</span><span class="o">.</span><span class="na">getIDList</span><span class="o">()[</span><span class="n">it</span><span class="o">])</span> <span class="o">}</span> <span class="c1">// Display info on the ImageJ log.</span> <span class="n">selectedImages</span><span class="o">.</span><span class="na">each</span> <span class="o">{</span> <span class="n">imp</span> <span class="o">-&gt;</span> <span class="n">IJ</span><span class="o">.</span><span class="na">log</span><span class="o">(</span><span class="s2">"The image '${imp.getTitle()}' has been selected."</span><span class="o">)</span> <span class="o">}</span> <span class="o">}</span> <span class="c1">// This is the only line of code that can actually be run - all the others have to be called.</span> <span class="c1">// So the "runScript" function is called, which subsequently calls other functions.</span> <span class="n">runScript</span><span class="o">()</span> </code></pre></div></div> <div class="notice" style="font-size: 2; background: #ebf2f8; border-left: 10px solid #67a1fe"><div class="notice-icon"><img src="/media/icons/info.svg" width="32" /></div><div class="notice-content"><p>This page is under construction. Check back for updates.</p> </div> </div> </div> </div> </section> <!-- Footer --> <section id="footer"> <ul class="icons"> <li><a href="https://forum.image.sc/tag/imagej" class="icon alt"><img src="/media/icons/image-sc.png" width="24" style="vertical-align: middle; margin-top: -10px"><span class="label">Forum</span></a></li> <li><a href="https://twitter.com/hashtag/ImageJ" class="icon brands alt fa-twitter"><span class="label">Twitter</span></a></li> <li><a href="https://github.com/imagej" class="icon brands alt fa-github"><span class="label">GitHub</span></a></li> </ul> <ul class="copyright"> <li>Design: <a href="http://html5up.net">HTML5 UP</a></li> </ul> </section> <!-- Hamburger menu --> <nav role="navigation"> <div id="ham-toggle"> <input type="checkbox" /> <span></span> <!-- top bun --> <span></span> <!-- hamburger --> <span></span> <!-- bottom bun --> <ul id="ham-menu"> <div class="menu"><h3>ImageJ Docs</h3> <ul> <li><a href="/downloads">Download</a></li> <li><details><summary>Learn</summary><ul> <li><details><summary><a href="/learn">ImageJ Basics</a></summary><ul> <li><a href="/tutorials">Tutorials</a></li> <li><a href="/learn/user-guides">User Guides</a></li> <li><a href="/learn/keyboard-shortcuts">Keyboard Shortcuts</a></li> <li><a href="/learn/tips-and-tricks">Tips and Tricks</a></li> <li><a href="/learn/troubleshooting">Troubleshooting</a></li> <li><a href="/learn/faq">Frequently Asked Questions</a></li> <li><details><summary><a href="/platforms">Supported Platforms</a></summary><ul> <li><a href="/platforms/windows">Windows</a></li> <li><a href="/platforms/macos">MacOS</a></li> <li><a href="/platforms/linux">Linux</a></li> <li><a href="/platforms/pi">Raspberry Pi</a></li> <li><a href="/platforms/android">Android</a></li> </ul></details></li> <!-- Learn/ImageJ Basics/Supported Platforms --> <li><details><summary><a href="/formats">File Formats</a></summary><ul> <li><a href="/formats/bio-formats">Bio-Formats</a></li> <li><a href="/formats/video">Video formats</a></li> <li><a href="/formats/quicktime">QuickTime</a></li> <li><a href="/formats/tiff">TIFF</a></li> <li><a href="/formats/pdf">PDF</a></li> <li><a href="/formats/dicom">DICOM</a></li> <li><a href="/formats/lsm">Zeiss LSM</a></li> <li><a href="/formats/olympus">Olympus VSI</a></li> <li><a href="/formats/lurawave">Opera Flex</a></li> <li><a href="/formats/fib-sem">FIB-SEM</a></li> </ul></details></li> <!-- Learn/ImageJ Basics/File Formats --> </ul></details></li> <!-- Learn/ImageJ --> <li><details><summary><a href="/imaging">Scientific Imaging</a></summary><ul> <li><a href="/imaging/principles">Principles of Scientific Imaging</a></li> <li><a href="/imaging/annotating-images">Annotating Images</a></li> <li><a href="/imaging/colocalization-analysis">Colocalization</a></li> <li><a href="/imaging/color-image-processing">Color Image Processing</a></li> <li><a href="/imaging/deconvolution">Deconvolution</a></li> <li><a href="/imaging/image-intensity-processing">Image Intensity Processing</a></li> <li><a href="/imaging/particle-analysis">Particle Analysis</a></li> <li><a href="/imaging/registration">Registration</a></li> <li><a href="/imaging/segmentation">Segmentation</a></li> <li><a href="/imaging/stack-slice-manipulations">Stack-slice Manipulations</a></li> <li><a href="/imaging/t-functions">T-functions</a></li> <li><a href="/imaging/tracking">Tracking</a></li> <li><a href="/imaging/visualization">Visualization</a></li> <li><a href="/imaging/z-functions">Z-functions</a></li> </ul></details></li> <!-- Learn/Scientific Imaging --> </ul></details></li> <!-- Learn --> <li><details open><summary><a href="/plugins">Extend</a></summary><ul> <li><a href="/list-of-extensions">List of Extensions</a></li> <li><details><summary><a href="/update-sites">Update Sites</a></summary><ul> <li><a href="/list-of-update-sites">List of Update Sites</a></li> <li><a href="/update-sites/following">Following an Update Site</a></li> <li><a href="/update-sites/setup">Creating an Update Site</a></li> <li><a href="/update-sites/tos">Terms of Service</a></li> <li><a href="/update-sites/automatic-uploads">Automatic Upload</a></li> <li><a href="/update-sites/core-uploads">Uploading to Core Sites</a></li> <li><a href="/update-sites/faq">Update Sites FAQ</a></li> <li><a href="/update-sites/stats">Statistics</a></li> </ul></details></li> <!-- Extend/Update Sites --> <li><details open><summary><a href="/scripting">Scripting</a></summary><ul> <li><a href="/scripting/basics">Scripting Basics</a></li> <li><a href="/scripting/script-editor">Script Editor</a></li> <li><a href="/scripting/parameters">Parameters</a></li> <li><a href="/scripting/user-input">User Input</a></li> <li><a href="/scripting/auto-imports">Auto Import</a></li> <li><a href="/scripting/templates">Templates</a></li> <li><a href="/scripting/batch">Batch Processing</a></li> <li><a href="/scripting/headless">Running Headlessly</a></li> <li><a href="/scripting/comparisons">Scripting Comparisons</a></li> <li><a href="/scripting/toolbox">Toolbox</a></li> <li><details open><summary>Languages</summary><ul> <li><a href="/scripting/beanshell">BeanShell Scripting</a></li> <li><a class="current-page">Groovy Scripting</a></li> <li><a href="/scripting/macro">ImageJ Macro</a></li> <li><a href="/scripting/javascript">JavaScript</a></li> <li><a href="/scripting/clojure">Lisp (Clojure)</a></li> <li><a href="/scripting/matlab">MATLAB</a></li> <li><a href="/scripting/jython">Python (Jython)</a></li> <li><a href="/scripting/python">Python (native)</a></li> <li><a href="/scripting/renjin">R (Renjin)</a></li> <li><a href="/scripting/jruby">Ruby (JRuby)</a></li> <li><a href="/scripting/scala">Scala Scripting</a></li> </ul></details></li> <!-- Extend/Scripting/Languages --> </ul></details></li> <!-- Extend/Scripting --> <li><details><summary><a href="/develop">Development</a></summary><ul> <li><a href="/develop/philosophy">Philosophy</a></li> <li><a href="/develop/architecture">Architecture</a></li> <li><a href="/develop/source">Source code</a></li> <li><a href="/develop/project-management">Project management</a></li> <li><a href="/develop/coding-style">Coding style</a></li> <li><a href="/develop/javadoc">Using Javadoc</a></li> <li><a href="/develop/debugging">Debugging</a></li> <li><a href="/develop/wish-list">Wish list</a></li> <li><details><summary>Tools</summary><ul> <li><a href="/develop/github">GitHub</a></li> <li><a href="/develop/maven">Maven</a></li> <li><a href="/develop/ci">CI/CD</a></li> <li><a href="/develop/dotfiles">Dotfiles</a></li> <li><details><summary><a href="/develop/ides">IDEs</a></summary><ul> <li><a href="/develop/eclipse">Eclipse</a></li> <li><a href="/develop/netbeans">NetBeans</a></li> <li><a href="/develop/intellij">IntelliJ IDEA</a></li> <li><a href="/develop/command-line">Command Line</a></li> </ul></details></li> </ul></details></li> <!-- Extend/Development/Tools --> <li><details><summary>Guides</summary><ul> <li><a href="/develop/plugins">Writing plugins</a></li> <li><a href="/develop/improving-the-code">Contributing to a plugin</a></li> <li><a href="/develop/releasing">Development lifecycle</a></li> <li><a href="/develop/building-a-pom">Building a POM</a></li> <li><a href="/develop/debugging-exercises">Hands-on debugging</a></li> <li><a href="/develop/writing-ops">Adding new ops</a></li> <li><a href="/develop/formats">Adding new formats</a></li> <li><a href="/develop/native-libraries">Using native libraries</a></li> <li><a href="/develop/tips">Tips for developers</a></li> <li><a href="/develop/cpp-tips">Tips for C++ developers</a></li> <li><a href="/develop/ij1-plugins">ImageJ 1.x plugins</a></li> <li><a href="/develop/versioning">Versioning</a></li> <li><a href="/develop/logging">Logging</a></li> <li><a href="/develop/uber-jars">Uber-JARs</a></li> </ul></details></li> <!-- Extend/Development/Guides --> <li><details><summary><a href="/develop/git">Git</a></summary><ul> <li><a href="/develop/git/eclipse">Git in Eclipse (EGit)</a></li> <li><a href="/develop/git/mini-howto">Git mini howto</a></li> <li><a href="/develop/git/workshop">Git workshop</a></li> <li><a href="/develop/git/conflicts">Git conflicts</a></li> <li><a href="/develop/git/topic-branches">Git topic branches</a></li> <li><a href="/develop/git/notes">Git notes</a></li> <li><a href="/develop/git/reflogs">Git reflogs</a></li> <li><a href="/develop/git/submodules">Git submodules</a></li> <li><a href="/develop/git/pinpoint-regressions">How to pinpoint regressions</a></li> <li><a href="/develop/git/publish-a-repository">How to publish a git repository</a></li> <li><a href="/develop/git/extract-a-subproject">How to extract a subproject</a></li> </ul></details></li> <!-- Extend/Development/Git --> </ul></details></li> <!-- Extend/Development --> </ul></details></li> <!-- Extend --> <li><details><summary><a href="/contribute">Contribute</a></summary><ul> <li><a href="/contribute/citing">Citing</a></li> <li><a href="/people">Contributors</a></li> <li><a href="/orgs">Organizations</a></li> <li><a href="/contribute/governance">Governance</a></li> <li><a href="/contribute/funding">Funding</a></li> <li><a href="/contribute/fiji">Contributing to Fiji</a></li> <li><details><summary><a href="/licensing">Licensing</a></summary><ul> <li><details><summary><a href="/licensing/open-source">Open Source</a></summary><ul> <li><a href="/licensing/apache">Apache</a></li> <li><a href="/licensing/bsd">BSD</a></li> <li><a href="/licensing/epl">EPL</a></li> <li><a href="/licensing/gpl">GPL</a></li> <li><a href="/licensing/lgpl">LGPL</a></li> <li><a href="/licensing/mit">MIT</a></li> <li><a href="/licensing/public-domain">Public domain</a></li> <li><a href="/licensing/big">BIG</a></li> </ul></details></li> <!-- Contribute/Licensing/Open Source --> <li><a href="/licensing/closed-source">Proprietary</a></li> </ul></details></li> <!-- Contribute/Licensing --> <li><details><summary><a href="/editing">Editing the Wiki</a></summary><ul> <li><a href="/editing/advanced">Advanced Editing</a></li> <li><a href="/editing/buttons">Buttons</a></li> <li><a href="/editing/citations">Citations</a></li> <li><a href="/editing/code">Source Code</a></li> <li><a href="/editing/debugging">Debugging</a></li> <li><a href="/editing/headers">Headers</a></li> <li><a href="/editing/icons">Icons</a></li> <li><a href="/editing/images">Images</a></li> <li><a href="/editing/keys">Keyboard Shortcuts</a></li> <li><a href="/editing/linking">Linking</a></li> <li><a href="/editing/math">Math Expressions</a></li> <li><a href="/editing/menu-paths">Menu Paths</a></li> <li><a href="/editing/navigation">Navigation</a></li> <li><a href="/editing/notices">Notices</a></li> <li><a href="/editing/people">People</a></li> <li><a href="/editing/pitfalls">Pitfalls</a></li> <li><a href="/editing/quizzes">Quizzes</a></li> <li><a href="/editing/statbox">Statbox</a></li> <li><a href="/editing/symbols">Symbols</a></li> <li><a href="/editing/tables">Tables</a></li> <li><a href="/editing/tooltips">Tooltips</a></li> <li><a href="/editing/videos">Videos</a></li> <li><a href="/editing/whitespace">Whitespace</a></li> </ul></details></li> <!-- Contribute/Editing the Wiki --> </ul></details></li> <!-- Contribute --> <li><details><summary><a href="/discuss">Discuss</a></summary><ul> <li><a href="/discuss/bugs">Reporting Issues</a></li> <li><a href="/discuss/mailing-lists">Mailing Lists</a></li> <li><a href="/discuss/chat">Chat</a></li> </ul></details></li> <!-- Discuss --> <li><details><summary>Explore</summary><ul> <li><a href="/news">News</a></li> <li><details><summary><a href="/events">Events</a></summary><ul> <li><a href="/events/presentations">Presentations</a></li> <li><a href="/events/conferences">Conferences</a></li> <li><a href="/events/hackathons">Hackathons</a></li> <li><a href="/events">More...</a></li> </ul></details></li> <!-- Discuss/Events --> <li><details><summary><a href="/libs">Libraries</a></summary><ul> <li><a href="/libs/imagej-ops">ImageJ Ops</a></li> <li><a href="/libs/imagej-common">ImageJ Common</a></li> <li><a href="/libs/imagej-legacy">ImageJ Legacy</a></li> <li><a href="/libs/scijava">SciJava</a></li> <li><a href="/libs/scifio">SCIFIO</a></li> <li><details><summary><a href="/libs/imglib2">ImgLib2</a></summary><ul> <li><a href="/libs/imglib2/getting-started">Getting Started</a></li> <li><a href="/libs/imglib2/accessors">Accessors</a></li> <li><a href="/libs/imglib2/accessibles">Accessibles</a></li> <li><a href="/libs/imglib2/examples">Examples</a></li> <li><a href="/libs/imglib2/workshop-introductory">Introductory Workshop</a></li> <li><a href="/libs/imglib2/workshop-advanced">Advanced Workshop</a></li> <li><a href="/libs/imglib2/matlab">ImgLib2 images in MATLAB</a></li> <li><a href="/libs/imglib2/benchmarks">Benchmarks</a></li> <li><a href="/libs/imglib2/faq">FAQ</a></li> <li><a href="/libs/imglib2/developing">Developing ImgLib2</a></li> <li><a href="/libs/imglib2/discussion">ImgLib2 Discussion</a></li> </ul></details></li> <!-- Explore/Libraries/ImgLib2 --> <li><a href="/libs">More...</a></li> </ul></details></li> <!-- Explore/Libraries --> <li><details><summary><a href="/software">Software</a></summary><ul> <li><a href="/software/nih-image">NIH Image</a></li> <li><a href="/software/imagej">ImageJ</a></li> <li><a href="/software/imagej2">ImageJ2</a></li> <li><a href="/software/fiji">Fiji</a></li> <li><a href="/software">More...</a></li> </ul></details></li> <!-- Explore/Software --> </ul></details></li> <!-- Explore --> </ul> </div> </ul> </div> </nav> <div id="dock-overlay-left" class="dock-overlay" data-dock-target="left-column"></div> <div id="dock-overlay-right" class="dock-overlay" data-dock-target="right-column"></div> <!-- Search results --> <div id="search-results"> <div id="search-hits"></div> <div id="pagination"></div> </div> <!-- Scripts --> <!-- Libraries --> <script src="/assets/js/jquery.min.js"></script> <script src="/assets/js/jquery.scrolly.min.js"></script> <script src="/assets/js/browser.min.js"></script> <script src="/assets/js/breakpoints.min.js"></script> <script src="/assets/js/util.js"></script> <script src="/assets/js/jquery.toc.js"></script> <script src="/assets/js/lightbox.min.js"></script> <!-- Extensions --> <!-- Site code --> <script src="/assets/js/main.js"></script> <script src="/assets/js/dock.js"></script> <script src="/assets/js/code.js"></script> <!-- Anchors --> <script src="https://cdn.jsdelivr.net/npm/anchor-js/anchor.min.js"></script> <script>anchors.add('#page h1, #page h2, #page h3, #page h4, #page h5, #page h6');</script> <!-- Citations --> <script src="https://cdn.jsdelivr.net/npm/citation-js@0.4.0-9"></script> <script src="/assets/js/cite.js"></script> <!-- Search --> <script src="https://cdn.jsdelivr.net/npm/algoliasearch@4.13.0/dist/algoliasearch-lite.umd.js"></script> <script src="https://cdn.jsdelivr.net/npm/instantsearch.js@4.40.3/dist/instantsearch.production.min.js"></script> <script src="/assets/js/search.js"></script> <script src="/assets/js/search-tweaks.js"></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10