2015-03-27 2 views
0

После траления через интернет, в поисках графических методов для основного движка игрового цикла, я натолкнулся на приведенный ниже код и мало знаю, как это работает.Почему этот метод визуализации BufferImage работает?

public class Game extends Canvas { 

    private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 
    private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer().getDataBuffer()).getData(); 

    private void tick() { 
     for (int i = 0; i < pixels.length; i++) { 
      pixels[i] = i; 
     } 
    } 

    private void render() { 
     BufferStrategy bs = getBufferStrategy(); 
     Graphics g = bs.getDrawGraphics(); 
     g.drawImage(image, 0, 0, getWidth(), getHeight(), null); 
     g.dispose(); 
     bs.show(); 
    } 
} 

Есть две вещи, которые я не понимаю в этом коде:

1) В методе визуализации, вы установите г в bs.getDrawGraphics(), а затем использовать графику, и распоряжаться графикой объект. Если вы не изменяете bs из этого, а устанавливаете g из bs, то не должно ли изображение быть уничтожено с помощью g?

2) Вы задаете переменную изображения, а затем - массив пикселей из изображения. Если вы не изменяете напрямую переменную изображения, то как вы можете изменить значение изображения через матрицу пикселей без установки его после изменения массива пикселей?

Большое спасибо.

+0

Graphics # dispose выпускает любые собственные ресурсы, на которые может быть нанесен контекст Graphics, но не влияет на что-либо, что действительно нарисовано. Массив пикселей имеет прямой доступ к базовым данным изображения, манипулирование массивом напрямую меняет основное изображение ... – MadProgrammer

ответ

1
  1. выбрасывание графического контекста, любые изменения, сделанные до не страдает от этого, так как Graphics не является объект, который содержит фактические данные пикселя.

  2. Массив pixels является прямой ссылкой на растре BufferedImage. Они - одно и то же, поэтому нет необходимости делать какую-либо магию, чтобы «сбросить» пиксели обратно к изображению.

Смежные вопросы