是否可以添加图像(png)作为Java类的属性?

时间:2015-12-03 17:07:59

标签: java

我还没有真正探索过Java的这一部分。我可以创建一个班级,比如学生,除了那个之外还有他/她的所有详细信息,除此之外,我还可以将他们的照片存储为数据成员吗?

基本上,每当我创建一个Student对象时,我都会传递一张图片作为其中一个参数?

所以,问题是,处理此类图像对象的最标准和最佳(在您看来)的方式是什么?

我对Java Swing类感到满意,所以如果可以使用它完成,那就太棒了。

4 个答案:

答案 0 :(得分:2)

为了便于使用,我建议使用BufferedImage

有两个选项,一个是由HRgiger提供的,你从不存储图像,而是每次加载它,另一个是直接将它存储在Student实例中。

而不是将其存储为byte[] picture;,因为您将来可能需要一些功能来保存图像。哪个BufferedImage有,或者您可以轻松添加。

如你所说,你对Swing很满意,它很容易处理。请注意,我不会让学生自己渲染图像。只需为图像提供一个吸气剂,然后从相关方法中进行渲染。

一个简短的例子。

<强> Student.java

public class Student {
    private String name;
    private BufferedImage image;

    public Student (String name) {
        this.name = name;
        this.image = ImageIO.read(new File(name + ".png"));
    }

    public getName () {
        return name;
    }

    public getImage () {
        return image;
    }
}

在绘制Student.image的地方有些绘画方法

private final List<Student> students = new ArrayList<>();

...

@override
public void paintComponent(Graphics g) {
    super.paintComponent(g);

    for (Student s : students) {
        g.drawImage (s.getImage(), x, y, null);
    }
}

paintComponent需要以某种方式访问​​List<Student>。你当然也可以画一个学生。

答案 1 :(得分:1)

如果您只想存储图像,而不对其进行任何操作,最好的选择是使用字节数组。

E.g。

byte[] picture;

以下是将文件转换为byte []的方法: http://www.mkyong.com/java/how-to-convert-file-into-an-array-of-bytes/

这是相反的转换: http://www.mkyong.com/java/how-to-convert-array-of-bytes-into-file/

答案 2 :(得分:1)

学生对象中将 filePath 用作String。这将是最便宜的内存消费者之一。当你需要调用类似的实用方法时:

public static BufferedImage getStudentImage(Student student) throws IOException{
 return ImageIO.read(new File(student.getImagePath()));
}

答案 3 :(得分:0)

你可以有一个图像或字节[]或代表学生图片的东西,但这是一个大型数据成员,你每次引用学生时都可能不需要。更好的方法是对存储在数据库或文件系统中的图片进行id引用,然后仅在您希望显示图像时根据需要加载图像。