小编Uma*_*hir的帖子

将JavaFX Image对象转换为字节数组

我们可以使用创建FX Image对象

byte [] bytes = ------; //valid image in bytes
javafx.scene.image.Image image = new Image(new ByteArrayInputStream(bytes));
Run Code Online (Sandbox Code Playgroud)

这可以设置为ImageView.

我需要相反而不首先将其转换为BufferedImage(SwingFXUtils.fromFXImage(image,null)).

这样我就可以直接将字节写入文件.

我尝试过以下方法:

PixelReader pixelReader = image.getPixelReader();
    int width = (int)image.getWidth();
    int height = (int)image.getHeight();
    byte[] buffer = new byte[width * height * 4];
    pixelReader.getPixels(
            0,
            0,
            width,
            height,
            PixelFormat.getByteBgraInstance(),
            buffer,
            0,
            width * 4
    );
Run Code Online (Sandbox Code Playgroud)

但是通过写byte []缓冲区生成的文件不是有效图像.

有什么见解吗?

编辑:如何从javafx imageView获取byte []的解决方案不能应用于我的问题.正如我已经清楚地提到过,我不想使用SwingFXUtils将其转换为BufferedImage.此外,我想将其转换为字节数组,以便可以将其写入图像文件.

javafx image bytearray

5
推荐指数
1
解决办法
2802
查看次数

为什么 JavaFX table.getItems().clear() 也会清除 ObservableList

我有一个 JavaFX 表定义为:

TableView<Person> table = new TableView<>;
//Person Class contains firstName,lastName & email properties
//table has three columns First Name, Last Name & Email
Run Code Online (Sandbox Code Playgroud)

一个ObservableListPerson小号

ObservableList<Person> persons = FXCollections.observableArrayList();
Run Code Online (Sandbox Code Playgroud)

后台服务,其任务是通过将条目(Person对象)添加到ObservableList persons.

表绑定为:

table.itemsProperty().bind(service.valueProperty());
Run Code Online (Sandbox Code Playgroud)

一切正常......但我最近发现,如果我清除表格项目

table.getItems().clear();
Run Code Online (Sandbox Code Playgroud)

它不仅会清除表格,还会清除ObservableList persons. 我想知道这是否是双向绑定?即使我在调用getItems().clear()表之前解除绑定,它也会产生相同的结果。有人可以解释一下我没有到达这里的意义吗?

java data-binding javafx tableview observablelist

2
推荐指数
1
解决办法
2405
查看次数