【问题标题】:Display the modified image of an ImageView object显示 ImageView 对象的修改图像
【发布时间】:2015-08-29 20:06:13
【问题描述】:

我一直在使用 ImageView 对象来尝试修改图像然后绘制它。但是我只能使以下两个结果发生:

1) ImageView 被修改后,我尝试使用 getImage() 从中获取图像以显示,但它只显示了我最初拥有的原始图像。

示例代码:

sheet = new Image("file:sprite_sheet.png"); 

        ImageView iv = new ImageView();
        iv.setImage(sheet);
        iv.setViewport(new Rectangle2D(0, 0, 32, 32));

        g.drawImage(iv.getImage(), 100, 100);//'g' is GraphicsContext2D

2) 我设法通过将修改后的图像添加到 Group obj 中来显示它,如下所示:

root.getChildren().add(iv);

然后它只在屏幕的左上角显示图像,我无法移动它或对其进行任何操作。

我更喜欢(如果可能的话)用一种更像第一个结果所呈现的方法来解决这个问题。只是提前说一下,我知道还有另一个帖子similar to this atm,但我无法从中得到任何有用的信息。

【问题讨论】:

  • 我很不清楚你在问什么。也许是How show specific part of an image in javafx
  • 给定的答案对于给定的案例场景来说太长而且具体,无法在这里帮助我。我要问的就是我上面所说的:“修改图像然后绘制它”我想知道如何使用 ImageView 对象修改图像(f.e 裁剪它),然后将修改后的 Image obj 取出以便我可以在其上使用 GraphicsContext2D.draw 方法并将其放在屏幕上我想要的位置。
  • 对不起,我不太明白你的问题。 ImageView 不修改图像,它提供它们的视图。也许您想要做的就是使用 GraphicsContext drawImage function 在画布上的给定位置绘制图像、裁剪并缩放到请求的大小。

标签: java image javafx


【解决方案1】:

ImageView,顾名思义,只是数据的视图(本例中为图像)。对视图的所有修改只影响视图而不影响数据。您想要实现的目标有两种通用方法。

  1. 使用场景图和ImageView 对象。对视图执行所有可视化操作。这是首选方式,因为数据保持不变,这意味着您可以使用原始图像轻松创建新的ImageView,并根据需要以不同的方式对其进行修改。如果父对象是Pane,那么您可以通过调用setTranslateX/Y 轻松移动对象。

  2. 如果您绝对需要使用Canvas,那么您将需要修改数据本身或创建数据的副本并进行修改。您可以通过使用以下组合来做到这一点:PixelWriterPixelReader

1. 的示例:

ImageView view = new ImageView(image);
// create root with dimension 800x600
Pane root = new Pane();
root.setPrefSize(800, 600);

// attach view to root so it can be displayed
root.getChildren().add(view);

// translate view to 100, 100
// on the screen this means the image will move 100 in X and 100 in Y
view.setTranslateX(100);
view.setTranslateY(100);

【讨论】:

  • 有机会快速演示一下吗?
  • 我试过你提到的第一种方法:root.getChildren().add(iv); root.getChildren().get(1).setTranslateX(500);虽然它有效,但我真的怀疑这就是它的用途?至少可以说真的很可疑 :P 所以如果可能的话,我希望你的答案更详细一点,否则,tyvm 会帮助我解决这个问题:)
猜你喜欢
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多