Я пытаюсь построить конвейерную архитектуру с использованием Java (в настоящее время работаю с NetBeans 8.2, Windows 10, платформа 64 бит, jdk 8.0).Одна программа предназначена для открытия изображения jpg, его внутреннего хранения как BufferedImage и передачи его следующей программе (через System.out), которая, как предполагается, получает байты из входного потока System.in, конвертирует их обратно в BufferedImageи применить некоторые фильтры, чтобы он мог снова передать изображение в выходной поток System.out.Команды, которые я должен выполнить в оболочке Windows:
java -jar OpenImage.jar "lenna.jpg" | java -jar ApplyBlur.jar 10 | java -jar SaveImage.jar "result.jpg" ... (and so on)
Я уже попробовал метод ImageIO.write, чтобы записать в поток System.out и снова прочитать его с помощью ImageIO.read,но созданный BufferedImage всегда нулевой.Я также пытался преобразовать изображение в байтовый массив (как рекомендовано здесь https://www.tutorialspoint.com/How-to-convert-Byte-Array-to-Image-in-java),, передать его через ByteArrayOutputStream и, наконец, в System.out, но изображение по-прежнему равно нулю.
// The OpenImage program:
image = ImageIO.read(new File("lenna.jpg"));
if(image == null) {
System.err.println("Image is null!");
}
ImageIO.write(image, "jpg", System.out);
// The SaveImage program:
BufferedImage image = ImageIO.read(System.in);
Я ожидаю, что метод ImageIO.read (InputStream) будет успешно считан из System.in, но получающееся изображение всегда будет нулевым.