2

我的问题:每次我从缓冲图像创建图形然后将另一个缓冲图像绘制到图形时,我都会得到一个空白图像。

我的代码如下。

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 分支才能看到我的代码

4

0 回答 0