2016-09-01 10 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

JavaでのCMYKからRGBへの変換が良好です。完全な解決方法については、この[回答](http://stackoverflow.com/a/12132630/413337)を参照してください。 – Codo

答えて

1

は、なぜあなたは私があなたの「ピンクのものは」別の何かである理由を疑う?RGB変換にはいくつかのCMYK起こっがあることだと思います。見つけるための最も簡単な方法は、PNGにJPEGから出力形式を変更することですそれが違いを生むかどうかを確認してください。

あなたはこのバグに襲われた多くの人の一人だと思いますhttps://bugs.openjdk.java.net/browse/JDK-8119048は、修正するのに十分な重要性は考慮されていません。あなたがその中のコメントを読んだら、あなたは仕事の場を見つけるでしょう。基本的には、変換後の画像をアルファチャンネルのない新しい画像にコピーすることです。 このバグが最終的に修正されるまで十分な注意を払うまで、さらに多くの人が時間を無駄にしなければならないことを本当に知りたいです。

+0

ありがとうございます。私はpngとしてファイルをアップロードし、それが問題を解決した、私は唯一の疑いがあります。 'ImageIO.write()'を使ってpngにjpgをアップロードしても、落とし穴があるかもしれません。 。 。 –

+0

PNGの使用は、私の仮定が正しかったかどうかを確認するための簡単なテストとしての意味に過ぎませんでした。あなたがする必要がある場合は、JPGに固執することができますが、上記のリンクされたバグレポートのコメントの1つに記載されている回避策に従わなければなりません。 – mipa

+0

ありがとう@ミパ、あなたは最高です。すべてが解決されます。私はあなたの答えがより多くの票を得ることを望みます –

関連する問題