我一直在使用 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)我设法通过将修改后的图像添加到组对象中来显示它,如下所示:
root.getChildren().add(iv);
但是它只在屏幕左上角显示图像,我无法移动它或对其执行任何操作。
我更喜欢(如果可能的话)用更像第一个结果所呈现的方法来解决这个问题。提前说一下,我知道还有另一篇文章 similar to this atm,但我无法从中得到任何有用的东西。
最佳答案
ImageView
,顾名思义,只是数据的 View (在本例中为图像)。对 View 的所有修改仅影响 View 而不影响数据。有两种通用方法可以实现您想要实现的目标。
使用场景图和
ImageView
对象。在 View 上执行所有可视操作。这是首选方式,因为数据保持不变,这意味着您可以轻松地使用原始图像创建一个新的ImageView
,并根据需要以不同的方式对其进行修改。如果父对象是Pane
,那么您可以通过调用setTranslateX/Y
轻松移动对象。如果您绝对需要使用
Canvas
,那么您将需要修改数据本身或创建数据的副本并修改它。您可以通过使用以下组合来执行此操作:PixelWriter和 PixelReader
示例 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);
关于java - 显示 ImageView 对象的修改后的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32284592/