Как загрузить изображение в консольное приложение Java? (без апплета)

#java #awt

#java #awt

Вопрос:

Я создаю консольное приложение Java, которое выводит серию файлов изображений, и я хочу нарисовать файл изображения как часть выходных данных. Однако getImage, похоже, не работает, для этого нужен инструментарий или что-то в этом роде.

 Image cover = getImage("cover.png");
  

Есть какие-нибудь идеи?

Редактировать: Программа не отображает изображения, она генерирует их и сохраняет в виде серии файлов. Я разобрался, как сохранить изображения, и рисование базовой геометрии работает, но не изображений по какой-либо причине.

Комментарии:

1. Вы хотите нарисовать изображение в консоли?

Ответ №1:

Другим способом работы с различными форматами изображений является класс ImageIO. Следующий пример преобразует jpg в png и рисует крест.

 public class ImageReaderExample {

    public static void main(String[] args) {
     try{
          BufferedImage image = ImageIO.read(new File("/tmp/input.jpg"));

          image.getGraphics().drawLine(1, 1, image.getWidth()-1, image.getHeight()-1);
          image.getGraphics().drawLine(1, image.getHeight()-1, image.getWidth()-1, 1);

          ImageIO.write(image, "png", new File("/tmp/output.png"));
     }
     catch (IOException e){
         e.printStackTrace();
     }
    }
}
  

Комментарии:

1. Не могу поверить, что я не подумал об этом, я использовал ImageIO для написания изображения!

Ответ №2:

Если вы на самом деле не пытаетесь нарисовать изображение, а просто пытаетесь использовать классы awt, вам нужно указать awt запускаться в безголовом режиме, установив java.awt.headless системное свойство. Вы можете либо сделать это в своей программе до загрузки awt:

 System.setProperty("java.awt.headless", "true"); 
  

или установив свойство в командной строке при запуске вашей программы:

 java -Djava.awt.headless=true Program
  

Комментарии:

1. Так что, мне сделать свою программу апплетом и просто настроить, чтобы она ничего не отображала?

2. @nkorth Вы действительно хотите отобразить изображение? Я никогда не был уверен в этом. Если нет, вам не обязательно делать это апплетом. Установка свойства headless позволяет использовать классы из AWT api без необходимости отображения.

3. Нет, мне не нужно отображать изображение. Мне было интересно, нужно ли мне структурировать мою программу как апплет (с init() , paint() и т.д.), Потому что я бы действительно предпочел просто использовать простую main() структуру.

Ответ №3:

Где вы хотите его нарисовать? Видя, что вам нужен какой-то вывод, это может помочь, предполагая bmps (но объясняются другие форматы):

http://java.sun.com/products/java-media/jai/forDevelopers/jai1_0_1guide-unc/Encode.doc.html

  // Define the source and destination file names.
 String inputFile = /images/FarmHouse.tif
 String outputFile = /images/FarmHouse.bmp

 // Load the input image.
 RenderedOp src = JAI.create("fileload", inputFile);

 // Encode the file as a BMP image.
 FileOutputStream stream =
     new FileOutputStream(outputFile);
 JAI.create("encode", src, stream, BMP, null);

 // Store the image in the BMP format.
 JAI.create("filestore", src, outputFile, BMP, null);
  

Считывает и записывает BMP-файл.

Комментарии:

1. Вероятно, мне следовало уточнить, что я уже выяснил, как выводить файлы изображений (на самом деле PNG). В любом случае спасибо!