如何让我的代码正确覆盖我的所有图像组而不会引发 NullPointerException?

How do I get my code to overlay all of my groups of images correctly without throwing a NullPointerException?

提问人:ItsErtHere 提问时间:11/6/2023 最后编辑:ItsErtHere 更新时间:11/6/2023 访问量:42

问:

我正在叠加多个图像并赋予它们自己的文件名。我将每个底部图像(在名为 bottom 的文件夹中,有 12 张图像)与每个顶部图像(在名为 top 的文件夹中,有 10 张图像)叠加在一起。我的命名过程有效,我的覆盖过程也有效,但是由于某种原因,我的代码只遍历了顶部文件夹中的前 3 个图像,并返回了 NullPointerExeption,同时遍历了所有底部图像。如何让它遍历我的所有图像?

我尝试的代码是:

package images;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
public class overlay_images {
    public static void main(String[] args) throws IOException,NullPointerException {
        File bottom = new File("C:\\Users\\mymsa\\Documents\\Mathmatical Docs\\Java Math\\images\\all_img\\bottom");
        File top = new File("C:\\Users\\mymsa\\Documents\\Mathmatical Docs\\Java Math\\images\\all_img\\top_lantern_blocks");
        int x = bottom.listFiles().length;
        int y = top.listFiles().length;
        BufferedImage[][] imgs = new BufferedImage[x*y][2];
        BufferedImage[] newImgs = new BufferedImage[x*y];
        String newFileName = "";
        for(int n=0;n<x*y;n++) {
            imgs[n] = new BufferedImage[] {ImageIO.read(bottom.listFiles()[n%x]),
                ImageIO.read(top.listFiles()[n/x])};
            newImgs[n] = new BufferedImage(16,16,BufferedImage.TYPE_4BYTE_ABGR);
            for(int i=0;i<16;i++) {
                for(int j=0;j<16;j++) {
                    int ptop = ImageIO.read(top.listFiles()[n/x]).getRGB(i,j);
                    int pbttm = ImageIO.read(bottom.listFiles()[n%x]).getRGB(i,j);
                    if(ptop/(2^24)==0) {newImgs[n].setRGB(i,j,pbttm);} else {newImgs[n].setRGB(i,j,ptop);}
                }
            }
            newImgs[n].setRGB(8,15,imgs[n%x][0].getRGB(8,15));
            newFileName = "C:\\Users\\mymsa\\Documents\\Mathmatical Docs\\Java Math\\images\\all_img\\lantern_blocks\\";
            newFileName+= top.listFiles()[n/x].getName().replace(".png","") + "_";
            newFileName+= bottom.listFiles()[n%x].getName();
            newFileName = newFileName.replace("bulb", "lantern");
            newFileName = newFileName.replace("_off", "_block");
            ImageIO.write(newImgs[n],"png",new File(newFileName));
        }
    }
}

VSCode 显示第 21 行导致错误:如何修复此错误? 我只是重做了代码以直接遍历文件而不是通过数字,并且在第 17 行遇到了相同的错误:int ptop = ImageIO.read(top.listFiles()[n/x]).getRGB(i,j);

package images;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
public class overlay_images {
    public static void main(String[] args) throws IOException,NullPointerException {
        File bottom = new File("C:\\Users\\mymsa\\Documents\\Mathmatical Docs\\Java Math\\images\\all_img\\bottom");
        File top = new File("C:\\Users\\mymsa\\Documents\\Mathmatical Docs\\Java Math\\images\\all_img\\top_lantern_blocks");
        BufferedImage newImg = new BufferedImage(16,16,BufferedImage.TYPE_4BYTE_ABGR);
        String newFileName = "";
        for(File m:bottom.listFiles()) {
            for(File n:top.listFiles()) {
                newImg=new BufferedImage(16,16,BufferedImage.TYPE_4BYTE_ABGR);
                for(int i=0;i<16;i++) {
                    for(int j=0;j<16;j++) {
                        int ptop = ImageIO.read(n).getRGB(i,j);
                        int pbttm = ImageIO.read(m).getRGB(i,j);
                        if(ptop/(2^24)==0) {newImg.setRGB(i,j,pbttm);} else {newImg.setRGB(i,j,ptop);}
                }
            }
            newImg.setRGB(8,15,ImageIO.read(m).getRGB(8,15));
            newFileName = "C:\\Users\\mymsa\\Documents\\Mathmatical Docs\\Java Math\\images\\all_img\\lantern_blocks\\";
            newFileName+= n.getName().replace(".png","") + "_";
            newFileName+= m.getName();
            newFileName = newFileName.replace("bulb", "lantern");
            newFileName = newFileName.replace("_off", "_block");
            ImageIO.write(newImg,"png",new File(newFileName));
            }
        }
    }
}
Java 映像 NullPointerException

评论


答: 暂无答案