【问题标题】:ImageJ zoom doesn't refresh the imageImageJ 缩放不刷新图像
【发布时间】:2014-05-23 15:34:16
【问题描述】:

下面的代码显示了当打开图像时,用户应该能够使用箭头键放大和缩小图像。但是当我放大时,我得到以下图片:

我希望有人能在我移动框架时看到我哪里出错了(有点像刷新),那么图片就可以了,但如果你不移动它,那么这就是你所看到的。我想解决这个问题,所以即使你不移动框架,图片仍然可以。提前致谢。

这是包含对 imageJ 缩放类的调用的主类:

    zoom = new JMenu("Zoom");
    zoom.setEnabled(false);

    JMenuItem in = new JMenuItem("Zoom In");
    in.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, ActionEvent.ALT_MASK));
    in.addActionListener(new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent arg0) {
            // TODO Auto-generated method stub

            MyInternalFrame selectedFrame = (MyInternalFrame) desktop.getSelectedFrame();
            Zoom z = new Zoom(selectedFrame.getImage());
            String args = "in";
            z.run(args);
        }

    });

    JMenuItem out = new JMenuItem("Zoom Out");
    out.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, ActionEvent.ALT_MASK));
    out.addActionListener(new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent arg0) {
            // TODO Auto-generated method stub
            MyInternalFrame selectedFrame = (MyInternalFrame) desktop.getSelectedFrame();
            Zoom z = new Zoom(selectedFrame.getImage());
            String args = "out";
            z.run(args);
        }

    });

    zoom.add(in);
    zoom.add(out);

我还必须为缩放添加一个构造函数,以便它获取我的自定义 GUI 打开的图像(这是在缩放类中):

    ImagePlus imp;
public Zoom (ImagePlus img){
    imp = img;
}

在打开图像的自定义窗口类中,我有一个组件侦听器,它可以调整图像大小以适应帧大小并且效果很好(我不知道这是不是问题):

            @Override
    public void componentResized(ComponentEvent arg0) {
        // TODO Auto-generated method stub
        Rectangle rect = desktop.getSelectedFrame().getBounds();
        MyInternalFrame f = (MyInternalFrame) desktop.getSelectedFrame();
        f.getImage().getCanvas().fitToWindow(rect);
        System.out.println("resized- the real one");
    }

在同一个类中,图像被添加到框架中:

           JPanel panel = new JPanel();

        ImageCanvas c = new ImageCanvas(image);
        c.getImage();

        //panel2.add(new JLabel(new ImageIcon(c.getImage())));
         m = new ImageWindow(image);

        Image n = new Image();
        //frame = new MyInternalFrame(title, img, save,m);
        //ImageCanvas c = m.getCanvas();
        ImagePlus im = new ImagePlus();
        im.setImage(image);

        String [] array = title.split("/");
        //System.out.println("in manager: "+array[5]);
        //image.setTitle(path);
        frame = new MyInternalFrame(image.getTitle(), image, save, title);

        m.centerNextImage();
        //image.getCanvas().setScaleToFit(true);

        panel.add(m.getCanvas());
        panel.setBackground(Color.white);
        frame.add(panel);
        frames.add(frame);

        frame.setVisible(true); 
        frame.setAutoscrolls(true);
        frame.setAutoscrolls(true);
        //frame.setOpaque(true);
        frame.setResizable(true);
        desktop.add(frame);

【问题讨论】:

    标签: java swing user-interface imagej


    【解决方案1】:

    我不了解您如何定义 MyInternalFrame 类和 ImageCanvas 的背景。

    我建议你检查代码:

    f.getImage().getCanvas().fitToWindow(rect);
    

    调整面板或其他组件上的图像大小:

    step1:你可以重写paintComponent()方法,并使用图形对象的scale()和translate()方法来调整图像的大小。

    第二步:调用面板的repaint()方法更新面板。

    这确实有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多