2015-09-27 1 views
0

Я использую приведенный ниже код, чтобы объединить два PNG вместе, хотя я получаю синтаксическую ошибку на обеих строках, которые начинаются с g.drawImage. Это происходит из примера на Merging two images, но я не могу прокомментировать его, потому что я только что подписался здесь.Ошибка синтаксиса с использованием графики

package imageEditor; 

import java.awt.Graphics; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import javax.imageio.ImageIO; 

public class ImageEditor15092703 { 
    File path = new File("C:/Users/Colton/Desktop/JavaImageEditor/"); // base path of the images 

    // load source images 
    BufferedImage image = ImageIO.read(new File(path, "image.png")); 
    BufferedImage overlay = ImageIO.read(new File(path, "overlay.png")); 

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

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

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

Благодаря

EDIT

я получил дальше с помощью до сих пор делает метод и исключения. Теперь он компилируется и запускается, хотя он не создает новый файл png. Я чувствую, что есть исключения, которые останавливают программу от того, что она должна делать.

import java.awt.Graphics; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 

public class ImageEditor15092705{ 

    public void ImageEditor15092705() throws IOException{ 
     File path = new File("C:/Users/Colton/Desktop/JavaImageEditor/"); // base path of the images 

     // load source images 
     BufferedImage image = ImageIO.read(new File(path, "image.png")); 
     BufferedImage overlay = ImageIO.read(new File(path, "overlay.png")); 

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

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

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

    public static void main (String[] args) 
    { 
    ImageEditor15092705 foo = new ImageEditor15092705(); 
    }//end main 

} //end image editor class 
+0

Вам следует добавить сообщение об ошибке в сообщение. – Renzo

ответ

0

Синтаксис кода выглядит совершенно нормально. Я не понимаю, почему он дает вам ошибки, что именно ошибка, которую вы получаете? PS: Я буду запускать код на моем компьютере, и я буду следовать в ближайшее время с редактированием

EDIT: ИТАК были 2 проблемы,

  1. код не был в конструктор/функция, так что это путало IDE (я добавил конструктор в примере, но вы должны поместить код в функцию для лучшей практики)
  2. Там были некоторые необработанные IOExceptions, вы можете исправить это двумя способами: состоит в том, чтобы сделать конструктор (или функцию) выбросить исключение IOException или, альтернативно, окружить ImageIO.write() d ImageIO.read() функции с блоком TRY/поймать

вот что работает для меня: пакета imageEditor;

import java.awt.Graphics; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 

public class ImageEditor15092703{ 

    public ImageEditor15092703() throws IOException{ 
     File path = new File("C:/Users/Colton/Desktop/JavaImageEditor/"); // base path of the images 

     // load source images 
     BufferedImage image = ImageIO.read(new File(path, "image.png")); 
     BufferedImage overlay = ImageIO.read(new File(path, "overlay.png")); 

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

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

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

} 

как я уже говорил, этот код код должен работать, но НЕ лучше практики использовать альтернативные варианты, которые я указывал выше

+0

@Sweeper просто ответил, это ответ, пока вы это делаете –

+0

Вы не должны публиковать ответ, говорящий OP, что вы собираетесь добавить ответ. Просто ответьте, когда вы знаете ответ – Sweeper

+0

Я знаю, но я хочу следить за сообщением, и у меня недостаточно комментариев, чтобы комментировать. Я знаю, что я мог бы использовать любимую, но тогда мне это не нравилось, на самом деле это не имеет значения теперь делает это? –

1

У вас есть эта ошибка, потому что вы должны писать заявления в методы, а не класс. Вы видите, вы создали класс, и вы сразу же записываете инструкции в класс. Вы должны написать инструкции в методе, а некоторые инструкции выставляют исключение, поэтому вы должны добавить throw IOException, например:

public static void mergeImage (String p_basePath, String p_image, String p_overlay) throws IOException { 
    File path = new File(p_basePath); // base path of the images 

    // load source images 
    BufferedImage image = ImageIO.read(new File(path, p_image)); 
    BufferedImage overlay = ImageIO.read(new File(path, p_overlay)); 

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

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

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

В качестве альтернативы вы можете добавить параметры:

public static void mergeImage() throws IOException { 
    File path = new File("C:/Users/Colton/Desktop/JavaImageEditor/"); // base path of the images 

    // load source images 
    BufferedImage image = ImageIO.read(new File(path, "image.png")); 
    BufferedImage overlay = ImageIO.read(new File(path, "overlay.png")); 

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

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

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

В следующий раз, просто помните, всегда пишут заявления в методах или конструкторами и быть в курсе возможных исключений, что некоторые методы будут бросать.

Смежные вопросы