为什么大图像的getSubImage可以修复空白像素?

我有一个程序,可以从图像文件夹创建子画面。这是代码:

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();

这大部分有效,但是第二到最后一行的一半以及整个最后一行被保存为棕褐色像素的纯色画布。为了查看是否将单个图像转换为Sprite工作表,我在将图像绘制到工作表后立即添加了以下代码:

BufferedImage current = sheet.getSubimage((i%100)*1280/3,1280/3,720/3);
render(current);

和render方法是:

public void render(BufferedImage image) {
    BufferStrategy bs = getBufferStrategy();
    if (bs == null) {
        createBufferStrategy(3);
        return;
    }
    Graphics g = bs.getDrawGraphics();
    g.drawImage(image,width,height,null);
    g.dispose();
    bs.show();
}

在添加此代码后,图纸被完全绘制,没有任何棕褐色的像素。为什么在书写时获得工作表的子图像似乎可以解决此问题?

编辑:好的,因此此问题尚未完全解决。有时它仍将底行绘制为棕褐色像素。如果我再次运行该程序,它通常会修复它。有时是第一次,有时是第二次,有时需要3次跑步...

zjy99 回答:为什么大图像的getSubImage可以修复空白像素?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3128070.html

大家都在问