2016-09-01 22 views
1

Что я хочу сделать, это прочитать изображение из FileChooser и записать его в файл. Мне нужно было сохранить изображение в файле javafx.scene.image.Image, чтобы я мог его отображать и закрепить внутри круга. У меня есть небольшая проблема с попыткой написать изображение, которое я получил от javafx.scene.image.Image к файлу. Процесс конвертации не является текучим, конвертируется из CMYK в RGB (поэтому, превращая мою картинку в какую-то розовую вещь.javafx читать javafx.scene.image.Image to ImageIO.write(), от CMYK до RGB

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

FileChooser fileChooser = new FileChooser(); 
File selectedFile = fileChooser.showOpenDialog(parent); 

// get Image from selectedFile 
Image userImg = = new Image(selectedFile.toURI().toURL().toString()); 

if (userImg != null) { 

     String format = "jpg"; 
     String filename = "d:\\pictureName."+ format; 
     File file = new File(filename); 

     // convert Image to BufferedImage 
     BufferedImage bufferedImage = SwingFXUtils.fromFXImage(userImg, null); 

     try { 

      // this is where i want to convert the color mode 
      // from cmyk to rgb, before i write it to file 
      ImageIO.write(bufferedImage, format, file); 

     } catch (IOException e) { 

      System.out.println("Exception :: "+ e.getMessage()); 
     } 
    } 
+0

Хорошее преобразование CMYK в RGB в Java - задача. См. Это [ответ] (http://stackoverflow.com/a/12132630/413337) для полного решения. – Codo

ответ

1

Почему вы думаете, что есть некоторые CMYK для преобразования RGB происходит? Я подозреваю, что причина для «розовой вещи» это что-то другое. Самый простой способ узнать это, чтобы изменить формат вывода из JPEG в PNG и выясните, имеет ли это значение.

Я думаю, что вы снова являетесь одним из многих людей, пострадавших от этой ошибки https://bugs.openjdk.java.net/browse/JDK-8119048, который не считается достаточно важным для исправления. Если вы прочтете комментарии там, вы найдете рабочий стол. В основном идея состоит в том, чтобы скопировать изображение после преобразования в новое изображение без альфа-канала. Мне бы очень хотелось узнать, сколько еще людей должно тратить свое время, пока эта ошибка, наконец, не получит достаточного внимания, чтобы быть исправленной.

+0

Большое спасибо за ваш ответ. Я загрузил файл как png, и это решило проблему, у меня остались только сомнения. Я не знаю, может ли загружать jpg в png с помощью 'ImageIO.write()' могут быть любые подводные камни. , , –

+0

Использование PNG было просто предназначено как быстрый тест, чтобы убедиться, что мое предположение было правильным, что, кажется, так. Если вам нужно, вы можете придерживаться JPG, но затем вам нужно следовать за рабочим столом, который указан в одном из комментариев в вышеупомянутом отчете об ошибке. – mipa

+0

Большое спасибо @mipa, ты лучший. Все разрешено. Надеюсь, ваш ответ получит больше голосов. –