将BufferedImage对象添加到Vector中

时间:2017-06-26 11:00:33

标签: java vector bufferedimage javax.imageio

我遇到了BufferedImage对象的Vector问题。我试图将BufferedImage对象添加到Vector中,但Vector始终为空。 ImageIo.read(input1)似乎不起作用,但我不明白为什么。

这是我的代码的一部分:

private void drawPixel(int index,String name) throws IOException {
    File input1 = new File("pince.png");
    BufferedImage img = ImageIO.read(input1);
    Graphics g = this.imagePoints.getGraphics();
    imagePixelLabelBuffered.add(img);
    input1.delete();
    changeColorPixelLabel(imagePixelLabelBuffered.get(labelClassesCount-1),labelClassesCount-1);
    File output = new File("pince.png");
    //ImageIO.write(imagePixelLabelBuffered.get(labelClassesCount-1), "PNG", output);
    int x = (index % this.width);
    int y = (index / this.width);
    g.drawImage(imagePixelLabelBuffered.get(labelClassesCount-1),x-20, y-31,100,100, null);
    repaint();
}

2 个答案:

答案 0 :(得分:0)

我的猜测是文件“pince.png”不在当前目录中。我建议你把你的图像放在类路径中,然后通过Class.getResource()或getResourceAsStream()加载它们。

答案 1 :(得分:0)

使用imagePixelLabelBuffered.add(img)将BufferedImage添加到向量中,并且永远不会修改变量img,因此您的问题不在于向量或BufferedImage。

我确实认为您的问题在changeColorPixelLabel(imagePixelLabelBuffered.get(labelClassesCount-1),labelClassesCount-1)行,尤其是labelClassesCount-1。这个变量永远不会更新,而且根本没用。您可以使用以下行:

changeColorPixelLabel(img, imagePixelLabelBuffered.size()-1);
  • 在Java中,List有一个method size,它返回列表中的元素数。
  • 此外,您永远不会修改变量img,因此它仍然是您添加到Vector的BufferedImage上的指针。
  • 如果您不进行并行化(多线程)操作,请使用ArrayList而不是Vector。 Vector是一个具有synchronized操作的ArrayList,速度较慢。

与行g.drawImage(imagePixelLabelBuffered.get(labelClassesCount-1),x-20, y-31,100,100, null)相同,您可以使用变量img

[编辑]以下是BufferedImage cloning的链接。