收藏 分享(赏)

开发基于PlugInFrame的ImageJ插件.doc

上传人:fmgc7290 文档编号:4715739 上传时间:2019-01-08 格式:DOC 页数:7 大小:47KB
下载 相关 举报
开发基于PlugInFrame的ImageJ插件.doc_第1页
第1页 / 共7页
开发基于PlugInFrame的ImageJ插件.doc_第2页
第2页 / 共7页
开发基于PlugInFrame的ImageJ插件.doc_第3页
第3页 / 共7页
开发基于PlugInFrame的ImageJ插件.doc_第4页
第4页 / 共7页
开发基于PlugInFrame的ImageJ插件.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、开发一个基于 PluginFrame 的 ImageJ 插件PlugInFrame 是一个继承 PlugIn 接口的 AWT 的 Frame 类的子类。用户自己开发的Frame 插件类必须是 PluginFrame 的子类。其构造函数如下:PlugInFrame(java.lang.String title)参数是窗体的名称。用户在自己的插件类的构造函数里调用 super(窗体名称)即可。用户的 Frame 插件类可以实现和覆盖 Plugin 接口里的方法:void run(java.lang.String arg)当然 java.awt.Frame 及其子类声明的方法都可以重写。本例子是仿照

2、ij.plugin.frame.ContrastAdjuster插件做的一个简化版本。原来的代码有一千多行,代码庞杂,处理各种控件的逻辑比较多且混杂,反而影响了对程序框架原理的理解。现在在保留一个滚动条、两个标签的情况下,演示通过滑动条改变图象对比度。代码中增加了大量的中文注释。处理上遵循MVC模型,即在控件的响应函数里处理数据,即Model;线程作为控制器(Controller),根据数据(Model)变化,更新相应的图象,即View。代码如下:import java.awt.*;import java.awt.event.*;import java.awt.image.*;import i

3、j.*;import ij.plugin.*;import ij.process.*;import ij.gui.*;import ij.measure.*;import ij.plugin.frame.*;public class MyFrame extends PlugInFrame implements Runnable,ActionListener, AdjustmentListener, ItemListener/ 本身线程Thread thread;/ 主窗口ImageJ ij;/ 当前 Frame 的实例static Frame instance;/ 滚动条Scrollbar c

4、ontrastSlider;/ 标签Label valNote ;Label valLabel ;/ 滑动最大值int sliderRange=200 ;/ 滑块对应的值int contrastValue = sliderRange/2 ;/ 图象最大值最小值double min, max, org_min, org_max ;/ 退出标志boolean done = false ;GridBagLayout gridbag ; / 布局管理器GridBagConstraints c; / 布局管理器常量变量类Panel pan1, pan2, pan3 ; / 容器public MyFram

5、e()super(“B/*覆盖该方法实现初始化操作。界面控件的创建与部署。*/public void run(String arg)/ 设置标题setTitle(“Contrast /*注册当前类到一个向量里,防止当前 Frame 对象被垃圾收集器收集,老的 Java 虚拟机可能有这个问题,添加到窗口管理器进行窗口的统一管理。*/instance = this;IJ.register(MyFrame.class);WindowManager.addWindow(this); / 添加到窗口管理器中/ 获得 ImageJ Frame 的实例的引用ij = IJ.getInstance(); /*

6、 同一使用 GridBagLayout 布局管理器对控件进行部署。Grid 下 x 表示在列,y 表示行,y+,表示在下一行。控件使用容器 panel 包装,使的控件可以放缩到一致的大小,否则 ScrollBar 始终非常小,标签也难以对齐。*/gridbag = new GridBagLayout(); / 布局管理器c = new GridBagConstraints(); / 布局管理器常量变量类setLayout(gridbag); / 设置布局管理器c.gridx = 0;int y = 0; / 组件的上边缘与网格顶部之间的距离c.gridy = y+;c.anchor = Gri

7、dBagConstraints.CENTER;c.fill = GridBagConstraints.BOTH;/ 标签 1,设置标签的布局valNote = new Label (“ 对比度滚动条 “, Label.CENTER) ; c.insets = new Insets(20, 10, 10, 10);pan1=new Panel();pan1.setLayout(new BorderLayout(); pan1.add( valNote ) ;gridbag.setConstraints(pan1, c);add ( pan1 ) ;/ 对比度滑块contrastSlider =

8、new Scrollbar(Scrollbar.HORIZONTAL, sliderRange / 2, 1, 0, sliderRange );contrastSlider.addAdjustmentListener(this);contrastSlider.addKeyListener(ij);contrastSlider.setUnitIncrement(1);contrastSlider.setFocusable(false);c.insets = new Insets(10, 10, 10, 10);c.gridy = y+;pan2=new Panel();pan2.setLayo

9、ut(new BorderLayout(); /设置这个,ScrollBar 才能变得较大pan2.add(contrastSlider) ;gridbag.setConstraints(pan2, c);add (pan2 ) ;/ 标签 2valLabel = new Label (“1.00“, Label.CENTER ) ;c.insets = new Insets(2, 10, 20, 10);c.gridy = y+;pan3=new Panel();pan3.setLayout(new BorderLayout(); pan3.add( valLabel) ;gridbag.s

10、etConstraints(pan3, c);add ( pan3 ) ;pack();GUI.center(this);if (IJ.isMacOSX()setResizable(false);show();/*在线程里调用 run()实现对改变的 min 和 max 的响应,体现在对图象的处理上*/thread = new Thread(this, “MyFrame“);thread.start();/*初始的图象及数值设置*/setup();void setup()ImagePlus imp = WindowManager.getCurrentImage();if (imp != nul

11、l)setup(imp);this.setMinAndMax(imp, min, max) ;imp.updateAndDraw();/* Overrides close() in PlugInFrame. */public void close()super.close();instance = null;done = true; / 设置成 true,以便线程退出循环synchronized (this)notify();ImageProcessor setup(ImagePlus imp)Roi roi = imp.getRoi();if (roi != null)roi.endPast

12、e();ImageProcessor ip = imp.getProcessor();org_min = ip.getMin() ;org_max = ip.getMax() ;min = org_min ;max = org_max ;return ip;/ 线程执行函数public void run()while (!done)synchronized (this)trywait();catch (InterruptedException e)doUpdate();/ 线程对图象的设置和处理void doUpdate()ImagePlus imp;imp = WindowManager.g

13、etCurrentImage();if (imp = null)IJ.beep();IJ.showStatus(“No image“);return;setMinAndMax(imp, min, max) ;imp.updateAndDraw();/ 设置图象像素最小最大取值范围void setMinAndMax(ImagePlus imp, double min, double max)imp.setDisplayRange(min, max);imp.getProcessor().setSnapshotPixels(null); / disable undo/ 滑动条事件处理函数publi

14、c synchronized void adjustmentValueChanged(AdjustmentEvent e)Object source = e.getSource();if (source = contrastSlider)contrastValue = contrastSlider.getValue();min = org_min*(contrastValue/100.0 );max = org_max*(contrastValue/100.0 );valLabel.setText( IJ.d2s(contrastValue/100.0, 2) ;notify();public synchronized void actionPerformed(ActionEvent e)/ TODO Auto-generated method stubpublic void itemStateChanged(ItemEvent arg0)/ TODO Auto-generated method stub

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报