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