0

以下のメソッドを拡張Canvasして実装するクラスがあります。問題は、私が呼び出すたびにexportImage、空白の白い画像しか得られないことです。画像には図面が必要です。

/**
  * Paint the graphics
  */
public void paint(Graphics g) {
    rows = sim.sp.getRows();
    columns = sim.sp.getColumns();
    createBufferStrategy(1);
    // Use a bufferstrategy to remove that annoying flickering of the display
    // when rendering
    bf = getBufferStrategy();
    g = null;
    try{
        g = bf.getDrawGraphics();
        render(g);
    } finally {
        g.dispose();
    }
    bf.show();
    Toolkit.getDefaultToolkit().sync();    
}

/**
 * Render the cells in the frame with a neat border around each cell
 * @param g
 */
private Graphics render(Graphics g) {
    // Paint the simulation onto the graphics...

}

/**
  * Export the the display area to a file
  * @param imageName the image to save the file to
  */
public void exportImage(String imageName) {
    BufferedImage image = new  BufferedImage(getWidth(), getHeight(),BufferedImage.TYPE_INT_RGB);
    Graphics2D graphics = image.createGraphics();
    paintAll(graphics);
    graphics.dispose();
    try {
        System.out.println("Exporting image: "+imageName);
        FileOutputStream out = new FileOutputStream(imageName);
        ImageIO.write(image, "png", out);
        out.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }    
}
4

3 に答える 3

0

私はあなたのpaint方法を以下のように単純化して、エクスポートはうまく機能しています。ただし、次paintComponentではなくオーバーライドすることをお勧めしますpaint

public void paint(Graphics g) {
    g.setColor(Color.BLUE);
    g.drawRect(10, 10, getWidth() - 20, getHeight() - 20);
}
于 2012-09-16T11:03:02.210 に答える
0

グラフィックを画像に印刷するメソッドのrender代わりに使用しました。私が使っていたものに問題があったようです。paintexportImagebufferStrategy

于 2012-09-18T14:13:38.350 に答える
0

paint代わりにメソッドを使用してみてくださいpaintAll

public void exportImage(String imageName) {
    BufferedImage image = new  BufferedImage(getWidth(), getHeight(),BufferedImage.TYPE_INT_RGB);
    Graphics2D graphics = image.createGraphics();
    paint(graphics);
    graphics.dispose();
    try {
        System.out.println("Exporting image: "+imageName);
        FileOutputStream out = new FileOutputStream(imageName);
        ImageIO.write(image, "png", out);
        out.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }    

}

于 2012-09-16T15:20:14.360 に答える