Я ищу более быстрый способ создания больших (12291x12291) BufferedImages. Я использую Graphics2D g2d = image.createGraphics() для рисования на нем, сохранения его в файл, затем с помощью g.drawImage (image, 0, 0, null); для его загрузки. Я сохраняю файл, чтобы позже загрузить определенный образ. На данный момент для создания изображения требуется около 45 секунд до одной минуты. Есть ли способ создать эти изображения быстрее?Ускоренный способ создания больших BufferedImages
Я создаю два из этих изображений.
public void drawTiles() {
Graphics2D g2d = tiles1.createGraphics();
left = 0;
top = 0;
//The drawing takes around 10 to 20 seconds
Colors c = new Colors();
for (double[] row : data) {
for (double d : row) {
int v = (int) (20 - d/500);
if (v < 0) {
v = 0;
} else if (v > 20) {
v = 20;
}
color = v;
g2d.setColor(c.colors[color]);
g2d.fillRect(left, top, sizeX, sizeY);
left += sizeX;
if (left == size * sizeX) {
left = 0;
top += sizeY;
}
}
}
g2d.dispose();
//The creation of the file takes little time for an image of this size
try {
File tiles1file = new File("path/to/map" + id + ".bmp");
ImageIO.write(tiles1, "bmp", tiles1file);
} catch (Exception ex) {
ex.printStackTrace();
}
id++;
}
Вы уверены, что «создание образа» является частью принимая долго время? Не могли бы вы показать свой код? –
Сжатие и распаковка PNG (который использует DEFLATE) не так быстро по сравнению с созданием изображения с нуля полностью в памяти. – Nayuki
Однако, как насчет файлов BMP? Они несжаты и в основном ограничены скоростью диска (~ 100 МБ/с). Ваше изображение 12291 × 12291 займет около 450 МБ. – Nayuki