【发布时间】:2015-02-27 00:08:30
【问题描述】:
我有一个关于调整从 swingx 库加载到 jXImageView 的图像的对比度、饱和度和色调的问题。
我有 ColorAdjust 方法。
ColorAdjust colorAdjust = new ColorAdjust();
colorAdjust.setContrast(0.3);
colorAdjust.setHue(-0.03);
colorAdjust.setBrightness(0.2);
colorAdjust.setSaturation(0.2);
当用户单击“增强”按钮时,图像应该会发生一些变化,但如何做到这一点?记住:我使用的是 jXImageView。
我已经通过使用此代码增加了对比度:
float brightenFactor = 1.5f;
BufferedImage imagem = (BufferedImage) jXImageView2.getImage();
RescaleOp op = new RescaleOp(brightenFactor, 0, null);
imagem = op.filter(imagem, imagem);
jXImageView2.updateUI();
编辑
我试过了:
BufferedImage imagem = (BufferedImage) jXImageView2.getImage();
Image image = SwingFXUtils.toFXImage(imagem, null);//<--ERROR on that line (incompatible types: writable image cannot be converted to Image)
ColorAdjust colorAdjust = new ColorAdjust();
colorAdjust.setContrast(0.3);
colorAdjust.setHue(-0.03);
colorAdjust.setBrightness(0.2);
colorAdjust.setSaturation(0.2);
ImageView imageView = new ImageView(image);//<--ERROR on taht line no suitable constructor for ImageView(java.awt.Image)
imageView.setFitWidth(imagem.getWidth());
imageView.setPreserveRatio(true);
imagem = SwingFXUtils.fromFXImage(imageView.snapshot(null, null), null);
jXImageView2.setImage(imagem);
...但没有成功。
【问题讨论】:
-
虽然您可以将
BufferedImage与Image相互转换,但我不知道ImageView是否会将ColorAdjust值直接应用于底层Image只是使用它们来改变它的绘制方式。您可以先查看SwingFXUtils,了解如何在两种图像格式之间进行转换 -
啊,试试this!
-
" 你是用
java.awt.Image还是javafx.scene.image.Image? -
现在我已经尝试使用
javafx.scene.image.Image -
点击按钮时显示错误:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Not on FX application thread; currentThread = AWT-EventQueue-0似乎在这一行:imagem = SwingFXUtils.fromFXImage(imageView.snapshot(null, null), null);
标签: java image-processing netbeans javafx swingx