я взглянуть на код Notch от Ludum осмелится (minicraft) и я заметил, что он использует:BufferedImage производительность
private BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
Так я сделал простую тестовую программу, и я заметил, что мой Perfomance понижает на много, когда по сравнению с методом, который ранее использовался. С помощью этого метода, просто рисуя полностью белый экран, я получаю 800 кадров в секунду, и когда я рисую тестовое изображение, я получаю больше 1200, что кажется немного странным. Даже если я не объявлю ничего на pixels[]
и просто оставлю по умолчанию, он по-прежнему составляет 800 кадров в секунду. Интересно, может ли кто-нибудь объяснить мне причину этого. Это тестовый код я написал, и я использовал Fraps, чтобы получить мой фпс:
public class Test extends Canvas implements Runnable{
private static final long serialVersionUID = 1L;
private boolean running = false;
public final int HEIGHT = 300;
public final int WIDTH = 360;
private final int SCALE = 3;
private BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
private BufferedImage testImage;
private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
JFrame frame;
public Test(){
Dimension size = new Dimension(WIDTH*SCALE, HEIGHT*SCALE);
frame = new JFrame();
this.frame.setResizable(false);
this.setPreferredSize(size);
this.setMaximumSize(size);
this.setMinimumSize(size);
this.frame.add(this);
this.frame.pack();
this.frame.setLocationRelativeTo(null);
this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setFocusable(true);
this.frame.setVisible(true);
try {
testImage = ImageIO.read(new File("res/test.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
for(int i = 0; i < pixels.length; i++){
pixels[i] = 0xffffff;
}
running = true;
}
public void run() {
while(running){
render();
}
}
private void render() {
BufferStrategy bs = getBufferStrategy();
if(bs == null){
createBufferStrategy(3);
return;
}
Graphics g = bs.getDrawGraphics();
//Draw stuff
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(testImage, 0, 0, getWidth(), getHeight(), null);
g.dispose();
bs.show();
}
public static void main(String args[]){
Test test = new Test();
test.run();
}
}
Я просто заменить testImage
на image
. Спасибо всем и счастливым праздникам
Редактировать: Я заметил, что просто вызов int [] пикселей = ((DataBufferInt) image.getRaster(). GetDataBuffer()). GetData(); замедляет приложение множеством. Может кто-нибудь, пожалуйста, объясните мне, почему это так? мне нужно избавиться от пикселей или чего-то еще? спасибо