java - 显示 ImageView 对象的修改后的图像

标签 java image javafx

我一直在使用 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 而不影响数据。有两种通用方法可以实现您想要实现的目标。

  1. 使用场景图和ImageView对象。在 View 上执行所有可视操作。这是首选方式,因为数据保持不变,这意味着您可以轻松地使用原始图像创建一个新的 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);

关于java - 显示 ImageView 对象的修改后的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32284592/

相关文章:

php - 在我的 PHP 留言板中,如何输出与相应帖子相对应的图像?

java - 无法从 StringProperty 转换为 ObservableValue<SimpleStringProperty> java/javafx

java - 打印出映射的键和值

java - Spring MVC 中的模型填充 @ExceptionHandler

java - 在创建可执行 jar 时指定 JVM 参数(而不是在执行 jar 时)

java - 如何在java中显示由JFileChooser选择的图像(所有主要格式)

html - 如何将图像放置在偶数位置

java - 图形上下文不绘制形状/不可见

java - 尝试使用 lucene 获得更多匹配

JAVAH 找不到类(android ndk)