我们可以使用创建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 表定义为:
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)
一个ObservableList
的Person
小号
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()
表之前解除绑定,它也会产生相同的结果。有人可以解释一下我没有到达这里的意义吗?