我的问题:每次我从缓冲的图像创建图形,然后将另一个缓冲的图像绘制到图形时,我得到一个空白的图像。
我的代码如下。
Graphics2D g2d = atlas.createGraphics();
// images[i] is a buffered image read the fileio
g2d.drawImage(images[i], null, x, y); // Image is not blank, been tested
g2d.dispose();
// then save image
具有讽刺意味的是,在尝试创建一个自包含的示例后,如下所示......它有效。我不太确定我在代码中做错了什么,我想知道是否因为图像不是静态的,图像或其他不静态的变量会影响我的绘图吗?
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.imageio.ImageIO;
public class Main {
public static void main(String[] args) {
String FOLDER_LOCATION = "./Images/";
BufferedImage atlas = new BufferedImage(2048, 2048, BufferedImage.TYPE_INT_ARGB);
BufferedImage redSquare = readImage(FOLDER_LOCATION + "red.png");
Graphics2D g2d = atlas.createGraphics();
g2d.drawImage(redSquare, null, 0, 0);
g2d.dispose();
writeImage(atlas, FOLDER_LOCATION + "atlas.png");
}
public static BufferedImage readImage(String location) {
BufferedImage img = null;
InputStream is = null;
try {
is = new FileInputStream(location);
img = ImageIO.read(is);
} catch(Exception e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch(Exception e) {
e.printStackTrace();
}
}
return img;
}
public static void writeImage(BufferedImage bi, String location) {
try {
File file = new File(location);
ImageIO.write(bi, "png", file);
} catch(Exception e) {
e.printStackTrace();
}
}
}
保存图像后,我看到2048年的2048图像空白。我打印出整个图像,然后得到(0,0,0),但是如果我打印出任何我正在绘制图册的图像,我会得到类似的东西(72,32,283)。
我不太确定我做错了什么,但我这个项目的完整源代码在这里:https://github.com/gemurdock/jTextureAtlas我正在处理的分支在这里:https://github.com/gemurdock/jTextureAtlas/tree/alpha。
您必须查看alpha分支以查看我的代码