gpt4 book ai didi

javafx-8 - 如何将字节数组转换为javaFX图像?

转载 作者:行者123 更新时间:2023-12-02 22:02:43 25 4
gpt4 key购买 nike

我正在重写我的问题,因为我很难找到这个解决方案。我制作了一个简单的表格来注册您知道的学生的一些基本信息,如姓名等。它还具有通过文件选择器类选择照片的选项,以从文件系统中查找图片。

让我们看一下这段代码。

@FXML
public void onBrowserPhoto() throws IOException {
File file = fileChooser.showOpenDialog(stage);
if (file != null) {
is = new FileInputStream(file);
Image image = new Image(is);
imageView.setImage(image);
}

}

此时,当用户单击按钮时,他们将选择一张图片我创建了一个新的 fileInputStream 并引用 is 变量,它是一个 inputream 对象。

private void businessOnSave() {
if (currentStudent.getId() == 0) {
try {
currentStudent.setIs(is);
currentStudent
.setGenger(buttonMale.isSelected() == true ? buttonMale.getText() : buttonFemale.getText());
if (!checkStudent(currentStudent)) {
service.saveStudent(currentStudent);
studentUnBind(currentStudent);
sweep();
listView.getItems().add(currentStudent.getNickname());
buttonNew.disableProperty().setValue(false);
is.close();
} else {
return;
}

} catch (ServiceException | IOException e) {
e.printStackTrace();
}
}

当用户单击保存按钮时,将调用此方法,并且 currentStudent 变量接收该 inputream (is) 接下来它将执行一些操作,然后我将其与服务对象一起保存。一切都很完美,学生对象已保存。

这是保存新学生的方法

@Override
public void save(Student t) throws SQLException {
try (PreparedStatement ps = con.prepareStatement(INSERT)) {
ps.setString(1, t.getNickname());
ps.setString(2, t.getLastName());
ps.setString(3, t.getEmail());
ps.setString(4, t.getPhone());
ps.setString(5, t.getGenger());
ps.setDate(6, Date.valueOf(t.getBirthDate()));
ps.setBinaryStream(7, t.getIs());
ps.executeUpdate();
}
}

正如您所看到的,我正在将该输入流变量传递给一个preparedStatement对象,这是可以的,我确认数据库中的数据在那里。但是当我从数据库中获取此记录时,它不会在用户界面上显示图像。

这是从该库返回学生记录的方法。

public Student getStudentByName(String name) throws SQLException {
Student student = new Student();
try (PreparedStatement ps = con.prepareStatement(GET_STUDENT_BY_NAME)) {
ps.setString(1, name);
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
student.setId(rs.getInt("student_id"));
student.setNickname(rs.getString("nickname"));
student.setLastName(rs.getString("lastname"));
student.setEmail(rs.getString("email"));
student.setPhone(rs.getString("phone"));
student.setGenger(rs.getString("genger"));
student.setBirthDate(rs.getDate("birthdate").toLocalDate());

try(InputStream is = rs.getBinaryStream("photo")){

BufferedImage bg = ImageIO.read(is);

if(bg != null){
Image image = SwingFXUtils.toFXImage(bg, null);
student.setPhoto(image);
}

} catch (IOException e) {
e.printStackTrace(); }

}

}

}

return student;
}

bg objec 为空,我不知道为什么,因为在数据库中图像字节就在那里。我采用了另一种方法来获取字节,然后处理学生对象的创建位置,但效果不佳。如果有人知道这个问题的解决方案,我会很高兴。感谢您花时间阅读这个问题。

最佳答案

要绘制图像,首先使用以下代码将字节数组转换为图像:

Image img = new Image(new ByteArrayInputStream(buffer));

然后使用graphicsContextdrawImage方法:

graphicsContext.drawImage(img, x, y, width, heighth);

所以我的建议是不要将 Image 存储在学生对象中。

您可以使用字节数组属性,并在显示学生记录时将其转换为图像,如上所示。

关于javafx-8 - 如何将字节数组转换为javaFX图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44140386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com