我的问题:每次我从缓冲图像创建图形然后将另一个缓冲图像绘制到图形时,我都会得到一个空白图像。
我的代码如下。
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 x 2048 图像。我将整个图像打印出来,得到 (0, 0, 0),但如果我打印出任何要绘制到图集的图像,我会得到类似 (72, 32, 283) 的图像。
我不太确定我做错了什么,但我的这个项目的整个源代码在这里:https ://github.com/gemurdock/jTextureAtlas我正在处理的分支在这里:https ://github.com /gemurdock/jTextureAtlas/tree/alpha。
您必须查看 alpha 分支才能看到我的代码