Login  Register

Resetting focus of Open Next

Posted by Bob Loushin on Mar 04, 2010; 12:10am
URL: http://imagej.273.s1.nabble.com/Resetting-focus-of-Open-Next-tp3689114.html

I am writing a plugin which needs to process all of the image files in a folder. To save myself having to manage filenames, I'm using Open next, so my code looks something like this:

<User opens an image>
<User starts the plugin>
<User uses plugin to change image>

//At this point, I need to save the changed image without overwriting the initial data.
//I'm trying to do something like:
FileInfo fileInfo = Image.getOriginalFileInfo();
IJ.save(image, fileInfo.directory + "Processed versions\\" + fileInfo.fileName);

//Now I move on to the next image in the folder, using the line
IJ.run("Open Next");

<User uses plugin to change next image>
<Continue until I get back to the first image>

The problem is, the IJ.save resets the current folder, so when the Open Next runs, it is now pointing at the wrong folder.

I can see several possible solutions: Save the processed images in the same folder as the originals (but then the Open Next will start picking them up and presenting them to the user!). Find a way to save which doesn't reset the current folder (looked around, but didn't see one. Anybody know of one?). Reset the current folder somehow so that the Open Next will find the correct next file. Or scrap this approach and try another, probably going through the hassle of reading the folder, building a list of files in it, figuring out which ones are actually images, and then opening the next one myself (seems a shame to do all this when Open Next is out there).

I found a promising looking function in the ImageJ API documention. IJ.getDirectory will tell me where I am. Unfortunately, there seems to be no corresponding IJ.setDirectory which would allow me to reset it in the program. Several other approaches all caused dialog boxes to pop up. If I knew what variable IJ.getDirectory was reading, I might be able to reset it directly, but I haven't managed to find that in the documentation, either.

I suspect there are others who've done something like this, and I'm missing an easier way. Thanks to anyone who can offer any suggestions.