Is it a good idea to avoid creating a new BufferedImage every time an image is refreshed to avoid java garbage collection, and if so, is it a good idea to have a blank image or blank raster to reset the image to when you want to redraw it? Is there a better way? What I have is this.
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
/**
* @author Scott
*
*/
public class ScreenManager
{
private BufferedImage bi;
private Raster blank;
private BufferStrategy bs;
private int width;
private int height;
public ScreenManager(int width, int height)
{
JFrame screenFrame = new JFrame(String.format("%dx%d", width, height));
screenFrame.setSize(width+6, height+24);
screenFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
screenFrame.setResizable(false);
screenFrame.setVisible(true);
this.width = width;
this.height = height;
screenFrame.createBufferStrategy(2);
bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
blank = bi.getData();
bs = screenFrame.getBufferStrategy();
}
public void drawPixel(int x, int y, Color c)
{
bi.setData(blank);
//bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
bi.setRGB(x,y,c.getRGB());
}
public void refresh()
{
render(bs.getDrawGraphics(), bi);
bs.show();
}
public void render(Graphics g, Image i)
{
g.drawImage(i, 3, 21, null);
}
}
and
import java.awt.*;
/**
* @author Scott
*
*/
public class Main
{
private int pixelX;
private int pixelY;
public static void main(String[] args)
{
ScreenManager sm = new ScreenManager(320, 240);
for(int i = 0;i < 320; i++)
{
if(i == 319) i = 0;
for(int j = 0;j < 240;j++)
{
if(j == 240) j = 0;
sm.drawPixel(i, j, Color.WHITE);
sm.refresh();
}
}
sm.refresh();
}
}