У меня есть программа, которая создает спрайт-лист из папки изображений. Вот код:
int length = 1000;
BufferedImage sheet = new BufferedImage(1280*length/3, 720/3,
BufferedImage.TYPE_INT_RGB);
for(int i = 0; i < length; i++) {
String path = i+".jpg";
try {
load = ImageIO.read(getClass().getResourceAsStream(path));
sheet.getGraphics().drawImage(load, (i%100)*1280/3, (i/100)*720/3, null);
}catch (IOException e) {
System.out.println("Failed to load "+path);
e.printStackTrace();
}
}
try {
ImageIO.write(sheet, "jpg", new File("spriteSheet"));
} catch (IOException e) {
System.out.println("Failed to write spriteSheet.");
e.printStackTrace();
}
this.stop();
В основном это работало, но половина второго и последнего ряда и вся последняя строка сохранялись в виде сплошного холста пикселей коричневого цвета. Чтобы увидеть, были ли отдельные изображения, преобразованные в спрайт-лист, проблемой, я добавил этот код сразу после рисования изображения на листе:
BufferedImage current = sheet.getSubimage((i%100)*1280/3, (i/100)*720/3, 1280/3, 720/3);
render(current);
и метод рендеринга:
public void render(BufferedImage image) {
BufferStrategy bs = getBufferStrategy();
if (bs == null) {
createBufferStrategy(3);
return;
}
Graphics g = bs.getDrawGraphics();
g.drawImage(image, 0, 0, width, height, null);
g.dispose();
bs.show();
}
И после того, как этот код был добавлен, лист полностью прорисовывался без каких-либо пикселей коричневого цветаПочему получение вспомогательного изображения листа во время записи, похоже, решает эту проблему?
Редактировать: Хорошо, проблема не полностью устранена. Иногда он по-прежнему рисует нижний ряд в виде пикселей коричневого цвета. Если я снова запускаю программу, она обычно исправит это. Иногда он делает это 1-й раз, иногда 2-й, иногда требуется 3 пробега ...