在JPanel上绘制然后保存到文件,但保存的文件全是白色

时间:2012-04-04 22:34:06

标签: java swing awt jpanel bufferedimage

我是stackoverflow的新海报,但我总是阅读帖子以获取灵感,我很高兴成为社区的一员。

我正在将图像绘制到JPanel,然后我希望将该图像保存到文件中。 JPanel上的绘画很好,但是当我看到图像时,它要么全是白色,要么全是黑色。我不知道为什么图像不能保存它在JPanel上的样子。我想在将图像绘制到缓冲区并保存时,我可能无法正确引用Panel?它几乎像bufferedImage一样空白。我没有很多经验,所以我觉得我犯了一个非常愚蠢的错误。

我只覆盖了paintComponent()方法一次,并在其中我做了我的绘图(在JPanel上完美显示)然后在它的底部我调用saveImage()方法,它应该保存图像到一个文件。但正如我之前提到的,它总是一个空白的图像。我在构造函数中使用了repaint()方法。

我不会用整个代码来破坏这篇文章。它是一个非常简单的代码,下面是相关的部分。

class drawingBarcode extends JPanel 

    public drawingBarcode(){
        repaint();
        try{
            Thread.sleep(999);

        }catch(InterruptedException e){
            e.printStackTrace();
        }

public void saveImage() {
    BufferedImage bi = new BufferedImage(350, 150, BufferedImage.TYPE_INT_RGB);    

      Graphics2D g2 = bi.createGraphics();//creates and returns a graphics 2d for drawing into buffer

     //  g2.setColor(color1);
       super.paintComponent(g2);

        g2.dispose();
       try
       {
            ImageIO.write(bi, "jpg", new File("test.jpg\\"));        
       }
       catch(IOException ioe)
       {
        System.out.println("Something went wrong");
            ioe.printStackTrace();
        }

public void paintComponent(Graphics g){
        Graphics2D g2D = (Graphics2D) g;

        super.paintComponent(g2D);

        setStrokeWithPen1(g2D);
        drawAsterix(g2D);//draw asterix(start digit) always

/* some drawing takes place here using g2D. */

        g2D.dispose();
        saveImage();
        }
}

任何可以提供的帮助或建议都会非常感激!

1 个答案:

答案 0 :(得分:1)

您的保存图像例程调用super.paintComponent,在绘制到图像图形时错过了所有自定义绘制代码! 我会重构您的代码 - 您不希望每次UI绘制时都保存文件吗?