合并图像错误

时间:2017-09-30 14:30:51

标签: java image minecraft

(链接到提到的Q / A:Merging two images)(对不起,如果这听起来有点奇怪,它最初发布在"答案"因为我不确定如何处理当我无法发表评论时答案的问题,现在虽然已修好了)

我正在使用包含代码示例的第一个答案/建议,并且在stackoverflow上有超过100票/喜欢/无论它是什么,并且引用ImageIO的所有内容都会引发IOException。我老实说相当新的编码,我已经做了... 7年我相信前4个是一个叫做scratch的东西,这是一个类似lego mindstorms的简单块编程语言,除了它制作一个数字程序而不是机器人。无论如何,从3年前开始,我终于深入研究了使用moding minecraft的java。我仍然没有深入了解java :(并且尽管试图查找它们,我还不完全确定有什么例外。

public void registerIcons(IconRegister iconRegister)
{
    File path = new File("mymod:"); // base path of the images

    // load source images
    BufferedImage core = ImageIO.read(new File(path, "cores/CoreOak.png"));
    BufferedImage cap = ImageIO.read(new File(path, "caps/CapGold.png"));
    BufferedImage gem = ImageIO.read(new File(path, "overlay2.png"));

    // create the new image, canvas size is the max. of both image sizes
    int w = Math.max(core.getWidth(), cap.getWidth());
    w = Math.max(w, gem.getWidth());
    int h = Math.max(core.getHeight(), cap.getHeight());
    h = Math.max(h, gem.getHeight());
    BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

    // paint both images, preserving the alpha channels
    Graphics g = combined.getGraphics();
    g.drawImage(core, 0, 0, null);
    g.drawImage(cap, 0, 0, null);
    g.drawImage(gem, 0, 0, null);

    // Save as new image
    ImageIO.write(combined, "PNG", new File(path, "wand/combined.png"));

    this.itemIcon = iconRegister.registerIcon(texturePath + "combined");
} 

有代码。例外情况是在bufferedImage事物和ImageIO.write方法下,他们具体说"未处理的异常类型IOException"我不确定这是不是很重要,但是当我在java的意义上问这个人时,人们因为它太宽泛而对我大吼大叫,所以我想我会把它包括在内。

1 个答案:

答案 0 :(得分:0)

所以,这里的根本问题。

File path = new File("mymod:"); // base path of the images

"mymod:overlay2.png"不是文件路径,而是资源位置。也就是说,它是一个神奇的字符串,Minecraft内部用来弄清楚如何引用可能位于以下几个可能位置之一的文件:jar文件或任意数量的资源包zip文件之一。 File路径。

如果您想从jar文件中的文件中读取数据,则无法使用标准文件IO执行此操作,您需要使用getResourceAsStream()中所述的this answer