2017-09-30 4 views
0

(Link zu den Q/A erwähnt: Merging two images) (Entschuldigung, wenn das klingt ein bisschen komisch, wurde es ursprünglich unter "Antwort" als ich unsicher war, wie eine Frage zu einer Antwort wann zu behandeln Ich konnte nicht kommentieren, es wurde aber jetzt behoben)Zusammenfügen Bilder Fehler

Ich benutze die erste Antwort/Vorschlag, die das Beispiel Bit des Codes enthält und über 100 Stimmen/Likes/was auch immer es ist auf Stackoverflow und alles, was ImageIO wirft verweist eine IOException. Ich bin ganz ehrlich ziemlich neu in der Codierung, ich habe es getan für ... 7 Jahre glaube ich mit den ersten 4 als etwas genannt Scratch, die eine einfache Block-Programmiersprache ähnlich wie Legosteine ​​ist, außer es macht ein digitales Programm statt Roboter. Wie auch immer, vor 3 Jahren habe ich mich endlich mit dem Moden von Minecraft in Java vertieft. Ich habe noch nicht zu weit in Java bekommen :(und bin nicht ganz sicher, welche Ausnahmen sind trotz versuchen, sie zu suchen.

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"); 
} 

Es ist der Code. Die Ausnahmen sind unter den BufferedImage Dinge, und die ImageIO. write method, sie sagen ausdrücklich "Unhandled exception type IOException" Ich bin mir nicht sicher, ob es Minecraft-Angelegenheiten sind, aber wenn ich allgemein im Sinne von Java nach diesem Typ fragte, haben die Leute mich angeschrien, weil es zu breit sei ich dachte, ich würde es gehören.

Antwort

0

So grundsätzliches Problem hier.

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

"mymod:overlay2.png" ist kein Dateipfad, sondern ein Ressourcenspeicherort. Das heißt, es ist eine magische Zeichenfolge, die von den internen Mitarbeitern von Minecraft verwendet wird, um herauszufinden, wie eine Datei referenziert werden kann, die sich an einer von mehreren möglichen Stellen befindet: eine JAR-Datei oder eine beliebige Anzahl von ZIP-Dateien. Es ist nicht ein File Pfad.

Wenn Sie Daten aus Dateien in einer JAR-Datei lesen möchten, können Sie dies nicht mit Standard-Datei-IO tun. Sie müssen getResourceAsStream() verwenden, wie in this answer erläutert.