Posted by
Bob Loushin on
Mar 04, 2010; 10:43pm
URL: http://imagej.273.s1.nabble.com/Resetting-focus-of-Open-Next-tp3689114p3689115.html
Michael,
Thanks for your suggestion. Unfortunately, it isn't a fix, but in trying it I realized what is actually happening . It turns out that Open Next isn't using the DefaultDirectory, as I thought. It's actually looking at the top open image, and using the FileInfo directly from that instead. When I resave the modified file in a different directory, its path changes, and Open Next looks in its new directory. Once I figured that out I realized it wasn't going to work the way I hoped. Instead, I managed to dig the code for Open Next out of the browsable source and hack a version of it which accepts FileInfo (saved from the original file, before the file was modified and resaved) passed into it instead of extracting it from the top open image. This lives inside my class, and will work fine, although it isn't ideal from a code maintanence standpoint.
So I got it working. I'm still wondering if/how others have solved this problem in a more elegant way within the more common paths of ImageJ (my way is definitely inelegant and off the beaten path).
Bob
----- Original Message -----
From: "Michael Schmid" <
[hidden email]>
To:
[hidden email]
Sent: Thursday, March 4, 2010 11:52:13 AM GMT -06:00 US/Canada Central
Subject: Re: Resetting focus of Open Next
Hi Bob,
ij.io.OpenDialog has public static getDefaultDirectory() and
setDefaultDirectory(String defaultDir) methods.
You can use these (even in a macro, by the 'call' command).
Michael
________________________________________________________________
On 4 Mar 2010, at 01:10, Bob Loushin wrote:
> 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.