如果我使用斐济应用程序打开图像,那么图像将显示在一个窗口中,我可以使用+和 - 键放大和缩小,我也可以按住空格键并用鼠标拖动缩放图像滚动浏览它。
我想使用ImageJ API在java应用程序中实现相同的功能。如果我使用以下代码(取自here)打开图像,则图像显示在与斐济案例相同类型的窗口中,但缩放和拖动以滚动要素在窗口中无效。
Opener opener = new Opener();
ImagePlus imp = opener.openImage("/path/to/image.tif");
imp.show();
有人可以建议如何激活这两个功能吗?对我来说,它们看起来像每个人都使用的标准功能,所以我希望通过ImageJ API可以轻松获得它们的激活。但是我在API specs中找不到任何提示。
据我了解,上述代码中的电话imp.show();
等同于以下内容:
ImageWindow imageWindow = new ImageWindow(imp);
imageWindow.setVisible(true);
如果是这样,这个ImageWindow
类应该有一些方法可以确保激活缩放和拖动滚动。有没有人有线索?
或者,也许有人可以共享指向斐济源代码的直接链接,其中实现了这些确切的功能?应该是here吗?如果是,那么到底在哪里?
答案 0 :(得分:1)
也许您应该更多地关注ImageJ source code。我假设这是针对ImageJ1的。我的猜测是当主要gui加载到ImageJ
类
下载了imagej1源代码并执行grep
缩放后,我找到了
./IJ_Props.txt:zoom01="In [+]",ij.plugin.Zoom("in")
./IJ_Props.txt:zoom02="Out [-]",ij.plugin.Zoom("out")
./IJ_Props.txt:zoom03="Original Scale[4]",ij.plugin.Zoom("orig")
./IJ_Props.txt:zoom04="View 100%[5]",ij.plugin.Zoom("100%")
./IJ_Props.txt:zoom05="To Selection",ij.plugin.Zoom("to")
./IJ_Props.txt:zoom06="Scale to Fit",ij.plugin.Zoom("scale")
./IJ_Props.txt:zoom07="Set... ",ij.plugin.Zoom("set")
尝试使用ImageJ
类启动主GUI。或者,查看如何在该类中设置密钥监听器。
您感兴趣的ImageJ
代码中有多个位置。例如,第388行是KeyPressed
方法的开头。
在这些操作之后,doCommand
methdod会调用相应的插件。
答案 1 :(得分:0)
我解决了。正如我所料,有一种简单的方法可以激活缩放和拖动以在Java程序中滚动ImageJ的功能。
正如我现在看到的,ImageJ的大多数功能都是作为ij.plugin.*
下的插件实现的。
要在Java程序中激活所需的ImageJ功能,您需要(1)找到与ij.plugin.*
包中的功能对应的插件,(2)在您的代码中调用插件,以及(3)将从标准ImageJ分发中获取的IJ_Props.txt
文件放到运行java .jar
可执行文件的目录中(IJ_Props.txt
文件似乎包含许多可用ImageJ插件使用的设置)。
因此,在我们的例子中,我们需要在java代码中激活ij.plugin.Zoom
插件:
//Launch ImageJ in NO_SHOW mode: Run embedded and invisible in another application.
ImageJ imageJApplication = new ImageJ(2);
Opener opener = new Opener();
String imageFilePath = "path/to/your/image.png";
ImagePlus imp = opener.openImage(imageFilePath);
imp.show();
IJ.runPlugIn("ij.plugin.Zoom", null);
执行此代码时,我们会激活ij.plugin.Zoom
插件,并且两个所需的功能(缩放和拖动以滚动)将在显示图像的窗口中起作用。我们还获得了窗口左上角显示图像区域的传统ImageJ缩略图视图。