以前、以下の記事でImageJ用画像読み込みテンプレートを公開しました。
ところが、plugin メニューのコントロールパネルからプラグインとして起動すると、問題が起こることに気が付きました*1。というのは、コントロールパネルを開くとそれもウィンドウとして認識されます。するとすでに画像が開かれているものと錯覚してエラーになってしまうことに気づきました。
開かれているウィンドウがあるかどうかですでに画像があるかどうかを判断していたので、コントロールパネルと画像を区別できないためです。
そこで、すでに開いているウィンドウがあるかどうかで判断するのではなく、開いている画像があるかどうかで判断するようコードを改定してみました。今回は、WindowManager の getCurrentImage() メソッドを使っています。
-----------------------------------------------
1 |from ij import IJ, ImagePlus
2 |from ij import WindowManager as WM
3 |from ij.io import DirectoryChooser, OpenDialog
4 |from loci.plugins import BF
5 |import os
6 |from org.python.core import codecs
7 |codecs.setDefaultEncoding('utf-8')
8 |
9 |
10|imgCurrent = WM.getCurrentImage()
11|if not imgCurrent:
12| od = OpenDialog("Choose a file")
13| folder = od.getDirectory()
14| filename = od.getFileName()
15| if filename:
16| path = folder + filename
17| IJ.log(path)
18| IJ.log(folder)
19| IJ.log(filename)
20|# Always Open file with Bio-format Plugin
21| imps = BF.openImagePlus(folder + filename)
22| imp0 = imps[0] #imp0: Original Image
23| imp0.show()
24| else:
25| IJ.showMessage("File is not selected.")
26|else: # target image is already open
27| imp0 = imgCurrent
28| imagename = imp0.getTitle()
29| try:
30| folder = imp0.getOriginalFileInfo().directory
31| except:
32| folder = IJ.getDirectory("Output_directory")
-----------------------------------------------
なお、このコードでは、読み込まれた画像は imp0 (ImagePlus) に、画像が保存されているディレクトリ(フォルダ) 名は folder に、ファイル名は、filename に、画像名は imagename に取得されます。前と同じようにすでに開いた画像がある場合はその画像をimp0 として取得し、開いた画像がない場合は、新に bioformat importer を通して、新しいファイルを読み込み、それを imp0 として取得します。