Я хочу добавить в игру функцию скриншота.
int width = 320;
int height = width / 4*3;
пикселей - это int [], содержащее 76800 значений RGB int, соответствующих каждому пикселю, присутствующему на экране в любое время
public static void buildBitmap() {
File f = new File("C:/scr/game_name" + LocalDate.now().toString() +".bmp");
try(FileOutputStream fos = new FileOutputStream(f)){
fos.write(66);
fos.write(77);
fos.write(230428); //width * height * 3
fos.write(0);
fos.write(0);
fos.write(0);
fos.write(0);
fos.write(0);
fos.write(0);
fos.write(0);
fos.write(26);
fos.write(0);
fos.write(0);
fos.write(0);
fos.write(12);
fos.write(0);
fos.write(0);
fos.write(0);
fos.write(320);
fos.write(0);
fos.write(240);
fos.write(0);
fos.write(1);
fos.write(0);
fos.write(24);
fos.write(0);
for(int y = height-1; y > 0; y--) {
for(int x = 0; x < width-1; x++){
fos.write(pixels[x + y * width] & 0xFF); //blue
fos.write((pixels[x + y * width] >> 8) & 0xFF); //green
fos.write((pixels[x + y * width] >> 16) & 0xFF); //red
}
}
fos.write(0);
fos.write(0);
}catch(IOException e) {
e.printStackTrace();
}
System.out.println("Screenshot saved to " + f);
}
Вложенный цикл, который должен заполнить запись в файл фактическими данными изображения, выполняется для перебора массива снизу вверх: слева направо, для преобразования значения RGB int в отдельный синий, зеленый, красный и записи их в файл. (в таком порядке).
Это математически чистый звук, и получающееся изображение, хотя и искаженное и изуродованное, по крайней мере, узнаваемо из игры. Что не так с моим кодом?
Кроме того, выходное изображение имеет ширину 64, почему это так?