首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何复制bufferedImage

如何复制bufferedImage
EN

Stack Overflow用户
提问于 2016-02-14 14:16:40
回答 4查看 973关注 0票数 0

我已经写了下面的例子来给出一些我正在处理的问题。当您按下按钮时,controlWhichImage切换到2,问题是当它从原始图像切换到副本时,图像就消失了。

代码语言:javascript
复制
public class PainterDemo01 extends JPanel implements ActionListener {
    BufferedImage createdImage;
    BufferedImage img;
    int controlWhichImage;
    JFrame mainFrame;
    JButton changePicture;

    public PainterDemo01(){
        changePicture = new JButton("Press");
        changePicture.addActionListener(this);
        controlWhichImage = 1;
        mainFrame = new JFrame();
        mainFrame.add(this);
        this.add(changePicture);
        mainFrame.setPreferredSize(new Dimension(600,600));
        mainFrame.setVisible(true);
        mainFrame.pack();
       img = loadImage();       
    }

    public BufferedImage loadImage(){
        img = null;
        try {
            img = ImageIO.read(new File("/home/gerry/Desktop/100_0647.JPG"));
        } catch (IOException e){
            System.out.println("no file here");
        }
        return img;
    }

    @Override
    protected void paintComponent(Graphics g){
        super.paintComponent(g);        

      loadImage();  
        if (createdImage == null){
            this.createdImage = new BufferedImage(this.getWidth(),this.getHeight(), BufferedImage.TYPE_INT_ARGB);
        }

        Graphics g2 = this.createdImage.getGraphics();      

        if (controlWhichImage == 1){
                g2.drawImage(img,0,0,img.getWidth(),img.getHeight(),null);
                g.drawImage(img, 0,0,img.getWidth(),img.getHeight(),null);       
                g2.dispose();
            }
        if (controlWhichImage == 2){
                //Draw bufferedImage on to to JPanel
                g.drawImage(this.createdImage,this.createdImage.getWidth(),this.createdImage.getHeight(),null);
        }               
    }
    @Override
    public void actionPerformed(ActionEvent e){
        controlWhichImage = 2;
        repaint();
    }

    public static void main(String[] args) {
        // TODO code application logic here
             java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new PainterDemo01().setVisible(true);
            }
        });
    }    
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-02-14 17:19:57

当然了!你得去给郊外的人画一幅画。请用这个

代码语言:javascript
复制
g.drawImage(this.createdImage, 0, 0, this.createdImage.getWidth(),this.createdImage.getHeight(),null);
票数 0
EN

Stack Overflow用户

发布于 2016-02-14 14:25:35

如果您想知道如何复制BufferedImage:How to copy BufferedImage,请参阅此问题

票数 1
EN

Stack Overflow用户

发布于 2016-02-14 15:15:52

问题是getGraphics (或者更好的名称为createGraphics)在if语句之外被调用,也是针对2调用的,因此,这两种方法都会导致资源泄漏(因为没有调用g2.dispose ),也会导致干净的板子。

代码语言:javascript
复制
    if (controlWhichImage == 1) {
        Graphics g2 = createdImage.getGraphics();      
        g2.drawImage(img,0,0,img.getWidth(),img.getHeight(),null);
        g2.dispose();
    }

还可以像在油漆代码之外加载图像这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35392800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档