Как записать буферизованное изображение в Java в outputtream (System.out), чтобы другая программа могла читать (через Pipe |)? - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь построить конвейерную архитектуру с использованием 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, но получающееся изображение всегда будет нулевым.

...