Java Passing 2D Graphic as a Parameter

前端 未结 2 887
無奈伤痛
無奈伤痛 2021-01-27 09:02

I have a function that is drawing an image and then saving it immediately after but the problem is that it seems to be drawing it twice, once for the view on the screen and then

2条回答
  •  感动是毒
    2021-01-27 09:42

    Change the place where you create the graphics2D object and reuse it.

    Try this out.

    public class myFrame {
    
        public static void main(String[] args) {
    
            JFrame lv_frame = new JFrame();
            // setup jframe here
    
            lv_frame.add(new image());
    
            lv_frame.setVisible(true);
    
        }
    
    }
    
    class image extends JPanel {
    
        public void paintComponent(Graphics graphic) {
    
            super.paintComponent(graphic);
    
            // Image and graphics are now created here
            BufferedImage image = new BufferedImage(250, 250, BufferedImage.TYPE_4BYTE_ABGR_PRE);
            Graphics2D graphic2D = image.createGraphics();
    
            draw(graphic2D);
            save(image);
        }
    
        public void draw(Graphics graphic) {
    
            Graphics2D graphic2D = (Graphics2D) graphic;
            graphic2D.fillArc(0, 0, 250, 250, 0, 90);
    
        }
    
        public void save(BufferedImage image) {
            try {
                File output = new File("file.png");
                ImageIO.write(image, "png", output);
            } catch(IOException log) {
                System.out.println(log);
            }
    
        }
    
    }
    


    EDIT

    I have found the answer in another post. It is not a bad idea to make the drawing twice. What you are doing is, like @Hovercraft says in this post, separating the screen drawing from the writing to files so that you don't see your graphics drawing performance hurt.

    I have tried to make the drawing only once but you have no easy method to store the drawing Graphics object. Probably, it is implemented to prevent this. If you see the way the method works, you are given the Graphics object with the only purpose to draw on it. Using it in other ways could impact the performance.

提交回复
热议问题