(链接到提到的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的意义上问这个人时,人们因为它太宽泛而对我大吼大叫,所以我想我会把它包括在内。
答案 0 :(得分:0)
所以,这里的根本问题。
File path = new File("mymod:"); // base path of the images
"mymod:overlay2.png"
不是文件路径,而是资源位置。也就是说,它是一个神奇的字符串,Minecraft内部用来弄清楚如何引用可能位于以下几个可能位置之一的文件:jar文件或任意数量的资源包zip文件之一。 不 File
路径。
如果您想从jar文件中的文件中读取数据,则无法使用标准文件IO执行此操作,您需要使用getResourceAsStream()
中所述的this answer。