Development



Development
Topics
Overview
Philosophy
Architecture
Source code
Project management
Coding style
Debugging
Tools
GitHub
Git
Maven
IDEs
Jenkins
Travis
Dotfiles
Guides
Writing plugins
ImageJ Ops
Contributing to a plugin
Distributing your plugins
Development lifecycle
Building a POM
Developing with Eclipse
Hands-on debugging
Adding new ops
Adding new formats
Using native libraries
Tips for developers
Tips for C++ developers
ImageJ 1.x plugins
Versioning
Logging
Uber-JARs

This page provides an overview of ImageJ from the perspective of software development: how to use it from your programs, as well as how to modify or extend its capabilities via plugins.

What is ImageJ?

An end-user software application
Imagej-app.png
Reusable software libraries
public void loadAndDisplay(File file) {
	ImageJ ij = new ImageJ();
	Object data = ij.io().open(file);
	ij.ui().show(data);
}
An extensible collection of plugins and services
Scijava-logo.png
"Write once, run anywhere" image processing routines
Write-once-run-anywhere.png

Project structure

ImageJ is divided into three parts:

Imagej2-icon.pngImageJ
Image-specific components
Imglib2-icon.pngImgLib2 Scijava-logo.png
Core image data model
  • Extensible pixel types – not just uint8, uint16, float32
  • Extensible data sources – not just files on disk
  • Extensible sample organizations – not just arrays
  • Extensible dimensionality – not just X, Y, Z and time
  • Interface-driven design
More general than images
  • Application container
  • Plugin framework
  • Module framework
  • Display and UI frameworks
  • Scripting framework and plugins

For full details on the technical structure of ImageJ, see the Architecture page.

Key developer tools

There are four indispensable software development tools on which ImageJ relies:

Octocat.png GitHub A website which hosts all of ImageJ's source code and issue trackers.

GitHub is ImageJ's nexus of online collaboration (i.e., "social coding").

Git-icon.png Git A first-class distributed version control system.

Git saves "snapshots" of the source code, keeping a history of changes.

Maven-icon.png Maven A build automation tool with great dependency management.

Maven converts source code into program binaries, and much more.

Eclipse-luna-icon.png Eclipse An integrated development environment (IDE) used by many ImageJ developers.

Eclipse makes it much easier to explore and edit the source code.
Although: ImageJ can be developed using any IDE which supports Maven.

See the Project management page for further details.

Source code

ImageJ and related SciJava software projects are open source. The code is organized into well-separated projects.

See the source code page for further details.

Tutorials

Learning the ImageJ API ImageJ plugins The Fiji distribution of ImageJ