2016-05-11 12 views
0

javafxでは、画像を読み取るときにPixelFormatがrgbで、フィルタを適用したいと思います。writableImage.pixelWriterを使用してピクセルの色を設定しますが、PixelFormatはrgbaです。javafxでPIxelFormatをrgbに設定する方法は?

私はImageIO.write()を使用しています。これは.pngで動作しますが、変更した画像を.jpgまたは.jpegで保存しようとすると色が変わります。 rgbaがjpgで動作しないためですが、このPixelFormatの変更方法はわかりません。

rgbでrgba形式を変更する方法はありますか? javafxイメージを.jpg/.jpegとして保存する別の方法をご存知ですか?

編集:私は、ファイルを保存する方法(それはPNGの作品)私は、読者のPixelFormatプロパティを取得すると、それはrgbのだがために、画像(例)

Image currentImage = modifiedImage.getImage(); 
WritableImage writableImage = new WritableImage((int) currentImage.getWidth(), (int) currentImage.getHeight()); 
PixelReader pixelReader = currentImage.getPixelReader(); 
PixelWriter pixelWriter = writableImage.getPixelWriter(); 

for (int i = 0; i < (int) currentImage.getWidth(); i++) { 
     for (int j = 0; j < (int) currentImage.getHeight(); j++) {  
      pixelWriter.setColor(i, j, new Color(0,0,0,1)); 
     } 
} 
modifiedImage.setImage(writableImage); 

を変更する方法

fileChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("JPG Files", "*.jpg")); 
File outputFile = fileChooser.showSaveDialog(null); 
BufferedImage bImage = SwingFXUtils.fromFXImage(modifiedImage.getImage(), null); // getImage() return a javafx.scene.image.Image; 
try { 
      ImageIO.write(bImage, "jpg", outputFile); 
} catch (IOException e) { 
      throw new RuntimeException(e); 
} 

作家はrgbaです。私は画像を変更せずに保存するといいですが、フィルタを適用して画像をjpgとして保存すると、色が変わります。

私のアプリでは色は良いですが、外にjpgファイルを開いた場合、それらは表示されません。 pngファイルでは問題ありません。私はpngとしてのみ保存することができますが、私が選ぶことができれば良いでしょう。

ソリューション:

BufferedImage bImage = SwingFXUtils.fromFXImage(modifiedImage.getImage(), null); 
BufferedImage bImage2 = new BufferedImage(bImage.getWidth(), bImage.getHeight(), BufferedImage.TYPE_3BYTE_BGR); 
bImage2.getGraphics().drawImage(bImage, 0, 0, null); 
try { 
    ImageIO.write(bImage2, "jpg", outputFile); 
} catch (IOException e) { 
    throw new RuntimeException(e); 
} 
+0

ImageIOを使用してピクセルを書き込む方法をいくつか記述できますか?基本的に、rgba 'a'の 'a'はアルファチャンネルです。あなたはrgbをしたい場合は、単に 'r'、 'g'と 'b'チャンネルを使い、アルファチャンネルをスキップしてください。私はあなたの質問を正しく理解したかどうかは分かりません。 – Markus

答えて

2

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

+0

リンクありがとうございます、今すぐ動作しています。 – Masttest

関連する問題