So kopieren Sie bufferedImage

Ich habe das folgende Beispiel geschrieben, um ein Problem zu beschreiben, das ich habe. Wenn Sie die Taste drücken, wechselt das controlWhichImage auf 2. Das Problem ist, dass das Bild verschwindet, wenn vom Originalbild auf eine Kopie umgeschaltet wird.

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);
            }
        });
    }    
}

Antworten auf die Frage(8)

Ihre Antwort auf die Frage