# Plugins Menu

> - Introduction
> - Macros>
> - Shortcuts>
> - Utilities>
> - New...
> - Edit...
> - Compile and Run...

> ### Introduction

> Plugins and macros are loadable code modules that extend the capabilities of ImageJ. Plugins are written in the Java programming language and compiled to .class files. Macros, written in ImageJ's Java-like macro language, are stored in .txt files. Plugins run faster and are more flexible but macros are easier to write and debug. Plugins and macros in the plugins folder, with an underscore in their name, are listed at the bottom of this menu. Plugins and macros in subfolders of the plugins folder are listed in submenus. Use Shortcuts>Create Shortcut to assign a keyboard shortcut to a plugin or a macro.

> Use the Record command to record a series of commands and to convert them to a macro. Use the New command to create a new macro or plugin and Edit to make changes to an existing one. More than 100 plugins are available on the ImageJ Web site as well as more than 80 macros. A tutorial for plugin writers is available at http://mtd.fh-hagenberg.at/depot/imaging/imagej/. Information about macros is available on the ImageJ Web site.

> ### Internal Plugins

> Most commands in ImageJ are implemented as plugins but these internal plugins are located in the ij.jar file, not in the plugins folder. ij.jar also contains the properties file (IJ_Props.txt) that ImageJ uses to install internal plugins in menus. A JAR file (Java ARchive) is formatted the same as a ZIP file, so you can use a ZIP utility to look at the contents of ij.jar.

> You can convert an internal plugin to a user plugin by copying the source to the plugins folder, adding an underscore to the file name and class name, and changing the package statement to an import statement. For example, to change the RoiManager (Analyze/Tools/ROI Manager) to a user plugin:

> 1. Download the ImageJ source code.
> 2. Copy ij/plugin/frame/RoiManager.java to the plugins folder.
> 3. Change the file name to Roi_Manager.java.
> 4. Open Roi_Manager.java using Plugins>Edit and change all instances (4) of "RoiManager" to "Roi_Manager".
> 5. Change the first line from "package ij.plugin.frame;" to "import ij.plugin.frame.*;".
> 6. Run the new plugin using the editor's File>Compile and Run command.
> There will be a new Roi Manager command in the Plugins menu the next time you restart ImageJ.

> ### Changing Location of Plugins Directory

> The "plugins.dir" property specifies the location of the parent of the plugins directory. This property can be set from either the command line or from within a Java program that starts ImageJ. For example, if you run ImageJ with the command

> > java -Dplugins.dir=/Users/wayne -cp ij.jar ij.ImageJ

> it will look for the plugins folder in the /Users/wayne/ directory. This property can also be set in a program that launches ImageJ:

> > System.getProperties().setProperty("plugins.dir", "/users/wayne");
> > new ImageJ(null);

> ## Macros Submenu

> This submenu contains commands for installing, running and recording macros, as well as any macro commands added by Plugins>Macros>Install. Macros contained in a file named "StartupMacros.txt", in the macros folder, are automatically added to this submenu when ImageJ starts up.

> > ### Install...

> > Adds one or more macros contained in a file to the bottom of this submenu. To install a set of macros, and at the same time view their source code, open the macro file with File>Open and use the editor's Macros>Install Macros command. Macros in the file ImageJ/macros/StartupMacros.txt are automatically installed when ImageJ starts up.

> > ### Run...

> > Loads and runs a macro without opening it in the ImageJ editor. To run a macro, and at the same time view its source code, open it with File>Open and use the editor's File>Run Macro command.

> > ### Record...

> > Opens the ImageJ command recorder. To create a macro, open the recorder, use one or more ImageJ commands, then click "Create". When the recorder is open, each menu command you use generates a macro run() function call. The run() function has one or two string arguments. The first is the command name. The optional second argument contains dialog box parameters.

> > Create a rectangular, oval or line selection and the recorder will generate a makeRectangle(), makeOval() or makeLine() function call. Click on "Auto" or "Set" in the Image>Adjust>Threshold window to generate a setThresold() call, and on "Reset" to generate a resetThresold() call. Select an image from the Window menu to generate a selectWindow() call. Click in the Image>Color>Color Picker window to generate setForegroundColor() and setBackgroundColor() calls.

> ## Shortcuts Submenu

> This submenu contains commands for creating keyboard shortcuts and for installing and removing plugins.

> > ### Create Shortcut...

> > Assigns a keyboard shortcut to an ImageJ menu command and lists the shortcut in the Shortcuts submenu.

> > Select the command from the popup menu and enter the shortcut in the text field. A shortcut can be a lower or uppercase letter or "F1" through "F12". Use Plugins>Utilities>List Shortcuts to get a list of shortcuts that are already being used.

> > ### Install Plugin...

> > Installs a plugin in a user-specified submenu. Plugins with a showAbout() method are also automatically added to the Help>About Plugins submenu.

> > Use the first popup menu to select the plugin and the second to select the submenu it is to installed in. The command must be different from any existing ImageJ command. Shortcut (optional) must be a single letter or "F1" through "F12". Argument (optional) is the string that will passed to the plugin's run method.

> > ### Remove...

> > Removes commands added to the Shortcuts submenu by Create Shortcuts. Also removes commands added by Install Plugin and removes plugins installed in the Plugins menu. The menus are not updated until ImageJ is restarted.

> ## Utilities Submenu

> > ### Control Panel...

> > This command opens a window containing ImageJ commands in a hierarchical tree structure. Click on a leaf node to launch the corresponding ImageJ command (or plugin). Double-click on a tree branch node (folder) to expand or collapse it. Click and drag on a tree branch node (folder) to display its descendants in a separate (child) window. In a child window, click on "Show Parent"to re-open the parent window. The Control Panel was contributed to the ImageJ project by Cezar M. Tigaret.

> > ### Benchmark

> > Runs 62 image processing operations on the current image and displays the elapsed time in the ImageJ status bar. The fastest sysems (as of early 2007) run this test on a 512x512 RGB image (e.g., File>Open Samples>Mandrill) in about one second. Additional benchmarks, test results, and souce code are available in the Benchmarks package of plugins.

> > ### Monitor Memory...

> > Displays a continuously updated graph of ImageJ's memory utilization, which can be useful for detecting memory leaks. Ideally you should be able to open a several images, process them, close them, and the amount of memory used will be the same as when you started. Clicking on ImageJ's status bar, which forces the Java garbage collector run, may help reclaim unused memory. Start the memory monitor with the alt key down to have it use a 640x480 window that simulates how a frame grabber plugin would work.

> > ### Capture Screen

> > Copies the the screen to an RGB image and displays that image a new window. Pressing control-shift-g will capture the screen while a modal dialog box is active if the dialog is based on ImageJ's GenericDialog class. Requires Java 1.3 or later and ImageJ 1.32e or later.

> ### New...

> Opens a new text window containing a prototype (as Java source code) for one of the three types of plugins supported by ImageJ.

> > PlugIn: Opens, captures or generates images. Implements the PlugIn interface. The prototype displays "Hello world!" in the ImageJ window. Another example is the Step Maker plugin at http://rsb.info.nih.gov/ij/plugins/steps.html.

> > PlugInFilter: Processes the active image. Implements the PlugInFilter interface. The prototype inverts the active image twice. Another example is the Image Inverter plugin at http://rsb.info.nih.gov/ij/plugins/inverter.html.

> > PlugInFrame: Displays a nonimage window containing controls such as buttons and sliders. Extends the PlugInFrame class. The prototype opens a window containing a text area. Another example is the IP Demo plugin at http://rsb.info.nih.gov/ij/plugins/ip-demo.html.

> The text window created by this command has two menus: File and Edit. Use Compile and Run in the File menu to compile and run the plugin. The Edit menu does not contain Cut/Copy/Paste but the keyboard shortcuts for these function can be used. Note that the name you choose for the plugin must include at least one underscore.

> ### Edit...

> Opens a text window that allows you to edit, compile and run plugins. Like the the Compile and Run command, it requires that ImageJ be running on a Java Virtual Machine that includes the javac compiler.

> ### Compile and Run...

> Compiles and runs a plugin. Runs a plugin if the name of the selected file ends in ".class". Requires that ImageJ be running on a Java Virtual Machine that includes the javac compiler, which is contained in the tools.jar archive. Tools.jar is included with the Windows and Linux versions of ImageJ bundled with Java, and it is pre-installed on Mac OSX. Troubleshooting information can be found under "Compiling Plugins" in the Linux and Windows release notes.

> Hold down the alt key while running this command to have the javac compiler generate the debugging information required for monitoring variables using debuggers such as NetBeans and Eclipse.