gpt4 book ai didi

java - 创建大型 BufferedImage 的更快方法

转载 作者:行者123 更新时间:2023-12-01 11:35:57 24 4
gpt4 key购买 nike

我正在寻找一种更快的方法来创建大型 (12291x12291) BufferedImages。我使用 Graphics2D g2d = image.createGraphics() 在其上绘图,将其保存到文件中,然后使用 g.drawImage(image, 0, 0, null);加载它。我正在保存文件,以便稍后加载特定图像。截至目前,创建图像大约需要 45 秒到一分钟。有什么方法可以更快地创建这些图像吗?

我正在创建其中两个图像。

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++;
}

最佳答案

我会将Colors c = new Colors();移到所有循环之外。每次创建并垃圾收集该对象都会减慢速度,至少在 JIT 发现它可以优化之前是这样。

由于磁盘访问比计算慢得多,您可以尝试通过将质量设置为零来最大化 PNG 的压缩:

try (ImageOutputStream out = ImageIO.createImageOutputStream(tiles1file)) {
ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next();
writer.setOutput(out);

ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0);

writer.write(null, new IIOImage(tiles1, null, null), param);
}

关于java - 创建大型 BufferedImage 的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29991137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com