Using Bio-Formats Importer and Javascript

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Using Bio-Formats Importer and Javascript

Jan Eglinger-3
Dear all,

what is the easiest way to use the Bio-Formats Importer in a thread-safe
way within Javascript? I would like to have something like the following
macro, but save the ImagePlus in a variable imp for further processing.
So I'm looking for the equivalent of imp = IJ.openImage() for Bio-Formats.

See the code examples for details.

Thanks for your help,
Jan


// ImageJ macro code

dir1 = getDirectory("Choose Source Directory ");
dir2 = getDirectory("Choose Destination Directory ");
list = getFileList(dir);

for (i=0; i<list.length; i++) {
  if (endsWith(list[i], ".zvi")) {
    run("Bio-Formats Importer", "open=" + dir1 + list[i] + "autoscale
color_mode=Default view=Hyperstack stack_order=XYCZT");
    // process the image
    saveAs("TIFF", dir2+list[i]);
    close();
  }
}


I would have Javascript like:

// Javascript code
var dir1 = IJ.getDirectory("Choose Source Directory ");
var dir2 = IJ.getDirectory("Choose Destination Directory ");
var list = array(); // how do I get the file list of a directory in JS?

for (var i=0; i<list.length; i++) {
  // var imp = IJ.openImage(dir1 + list[i]);
  // here, instead of openImage, use Bio-Formats
  IJ.run("Bio-Formats Importer", "open=" + dir1 + list[i] + "autoscale
color_mode=Default view=Hyperstack stack_order=XYCZT");
  var imp = WindowManager.getCurrentImage();
  // process the image by using IJ.run(imp, "command");
  IJ.save(imp, dir2 + list[i] + ".tif");
}
Reply | Threaded
Open this post in threaded view
|

Re: Using Bio-Formats Importer and Javascript

ctrueden
Hi Jan,

what is the easiest way to use the Bio-Formats Importer in a thread-safe
> way within Javascript? I would like to have something like the following
> macro, but save the ImagePlus in a variable imp for further processing.
> So I'm looking for the equivalent of imp = IJ.openImage() for Bio-Formats.
>

The Bio-Formats Importer now has a high-level Java API (and hence Javascript
API) for invoking it.

Try this:

String id = "/path/to/myFile.ext";
ImagePlus[] imps = BF.openImagePlus(id);

This imports the file with the last-used importer options. If you need more
control over the options, you can instead write:

String id = "/path/to/myFile.ext";
ImporterOptions options = new ImporterOptions();
options.setId(id);
options.setAutoscale(true);
options.setCrop(true);
options.setCropRegion(0, new Region(x, y, w. h));
options.setColorMode(ImporterOptions.COLOR_MODE_COMPOSITE);
//...etc.
ImagePlus[] imps = BF.openImagePlus(options);

This code should be adaptable to Javascript with minimal modifications.

As for thread safety, we have not heavily tested it in a multi-threaded
context, but I don't know of any obvious roadblocks to it working. Let us
know how it goes!

Regards,
Curtis

On Mon, May 16, 2011 at 9:59 AM, Jan Eglinger
<[hidden email]>wrote:

> Dear all,
>
> what is the easiest way to use the Bio-Formats Importer in a thread-safe
> way within Javascript? I would like to have something like the following
> macro, but save the ImagePlus in a variable imp for further processing.
> So I'm looking for the equivalent of imp = IJ.openImage() for Bio-Formats.
>
> See the code examples for details.
>
> Thanks for your help,
> Jan
>
>
> // ImageJ macro code
>
> dir1 = getDirectory("Choose Source Directory ");
> dir2 = getDirectory("Choose Destination Directory ");
> list = getFileList(dir);
>
> for (i=0; i<list.length; i++) {
>  if (endsWith(list[i], ".zvi")) {
>    run("Bio-Formats Importer", "open=" + dir1 + list[i] + "autoscale
> color_mode=Default view=Hyperstack stack_order=XYCZT");
>    // process the image
>    saveAs("TIFF", dir2+list[i]);
>    close();
>  }
> }
>
>
> I would have Javascript like:
>
> // Javascript code
> var dir1 = IJ.getDirectory("Choose Source Directory ");
> var dir2 = IJ.getDirectory("Choose Destination Directory ");
> var list = array(); // how do I get the file list of a directory in JS?
>
> for (var i=0; i<list.length; i++) {
>  // var imp = IJ.openImage(dir1 + list[i]);
>  // here, instead of openImage, use Bio-Formats
>  IJ.run("Bio-Formats Importer", "open=" + dir1 + list[i] + "autoscale
> color_mode=Default view=Hyperstack stack_order=XYCZT");
>  var imp = WindowManager.getCurrentImage();
>  // process the image by using IJ.run(imp, "command");
>  IJ.save(imp, dir2 + list[i] + ".tif");
> }
>