省型旧形国電の残影を求めて

戦前型旧形国電および鉄道と変褪色フィルム写真を中心とした写真補正編集の話題を扱います。他のサイトでは得られない、筆者独自開発の写真補正ツールや補正技法についても情報提供しています。写真補正技法への質問はコメント欄へどうぞ

ImageJ / Python プログラミング Tips: 開いたウィンドウを取得する

 今まで、ImageJ上で、画像を表示させたウィンドウを一番前に表示させるために、        IJ.selectWindow というのを使っていました。これは、

        IJ.selectWindow("ウィンドウタイトル")

を指定すると、指定したウィンドウをアクティブにして一番前に表示させるというコマンドです(なお、頭に、 from ij import IJ による IJ のインポートが必要です)。

IJ (ImageJ API)

 ところが Linux 上でうまく働いてくれません。アクティブにはなるのですが、一番前に表示してくれません。

 他に何かコマンドはないかと探すと、WindowsManager にあるようです( WindowManager (ImageJ API) ) 。setWindow というメソッドです。しかし、引数が、java.awt.Frame win もしくは java.awt.Window win とあります。しかしどうやって  java.awt.Window 形式の引数を取得すればいいのか... と困りました。探してみると、ImagePlus に getWindow というメソッドがあることが分かりました(  ImagePlus (ImageJ API) )。"Returns the ImageWindow that is being used to display this image." とあります。どうもこれで行けそうです。つまりImagePlus に対し、それが対応するウィンドウを getWindow で取得すれば良さそうです。結果的に次のようなコードを使いました。

from ij import IJ, ImagePlus
from ij import WindowManager as WM

    :

        WM.setWindow(imp.getWindow())

 

 ところで、これで指定しても、Linux 上では、アクティブになっても前に来てくれません。どうもこれは Linux 上の JRE 自体において、Windowの順番指定が無効であるようです。

 どうも、Java (ImageJ) が一番確実に動くのが Windows、 次が Mac OS X で、Linux はその次になるようです。マルチプラットフォームで開発しようとする場合、そのあたりを頭に置いておく必要がありそうです。