ImageJ zoom不刷新图像

时间:2014-05-23 15:34:16

标签: java swing user-interface imagej

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

enter image description here

我希望有人可以看到我出错的原因,因为当我移动框架时(有点像清爽),然后图片没问题但是如果你不移动它然后这就是你所看到的。我想解决这个问题,即使你不移动框架,图片仍然没问题。提前谢谢。

这是包含对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);

1 个答案:

答案 0 :(得分:0)

我没有了解如何定义MyInternalFrame类和ImageCanvas的背景。

我建议您查看代码:

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

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

步骤1:您可以覆盖paintComponent()方法,并使用图形对象的scale()和translate()方法来调整图像大小。

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

这确实有用。