放大时不显示模糊/抖动显示JavaFX图像

时间:2016-11-03 09:00:51

标签: javafx

我正在尝试创建一个图像编辑器工具,我有X轴和Y轴。现在我希望通过在放大时查看每个像素来支持用户,以便它们可以更精确地工作。相比之下,你应该看看paint.net,你可以在放大时看到像素。 我将给你一个代码片段,也许你可能会有一个提示,我应该深入研究(API或代码示例)。我在JAVAFX API文档中找不到任何相似内容。我想使用ImageView实例,但不是Canvas。

ScrollPane scrollPane = new ScrollPane ();
BorderPane borderPane = new BorderPane();

Group group = new Group();
DoubleProperty zoomProperty = new SimpleDoubleProperty(1);

Scale scaleTransformation = new Scale();
scaleTransformation.xProperty().bind(zoomProperty);
scaleTransformation.yProperty().bind(zoomProperty);

ImageView viewer = new ImageView(getBackgroundImage());
viewer.setFitWidth(600);
viewer.setPreserveRatio(true);
viewer.setDisable(true);
viewer.setSmooth(false);

group.getChildren().add(viewer);

this.addEventFilter(ScrollEvent.SCROLL, new EventHandler<ScrollEvent>(){
  @Override
  public void handle(ScrollEvent se) {
    if (se.isControlDown() && se.getDeltaY() > 0) {
      double value = zoomProperty.get() * 1.1;
      zoomProperty.set(value);
      se.consume();
    } else if (se.isControlDown() && se.getDeltaY() < 0) {
      double value = zoomProperty.get() / 1.1;
      zoomProperty.set(value);
      se.consume();
    }
  }
});

borderPane.setCenter(group);

scrollPane.setHbarPolicy(ScrollBarPolicy.ALWAYS);
scrollPane.setVbarPolicy(ScrollBarPolicy.ALWAYS);
scrollPane setContent(new Group(borderPane));

谢谢你的帮助。

EDIT 相关问题及其答案并未解决我的问题(transaction)。解决方案1-4不起作用。只有黑客做到了。我想我可能与我使用的节点结构有关。我调整了我的代码。

1 个答案:

答案 0 :(得分:0)

我找到了一种解决方案(指可能的重复项),并使用了方法1的一种变体。

在我的图像构造函数中,我将请求的大小设置为较大的值-因此,对于我知道的大约1000像素宽的图像,我要求一个10000像素宽的图像:

Partial View

我不确定这是否能提供像素的真实视图,或者是否在非常低的水平上进行平滑处理……但是它可以满足我的需求。