2017-06-26 43 views
-1

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

这里是我的代码的一部分:

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(); 
} 

回答

0

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

+0

谢谢你的回答,但问题不在那里。 – kazrak

0

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

我的确认为你的问题在changeColorPixelLabel(imagePixelLabelBuffered.get(labelClassesCount-1),labelClassesCount-1),更具体地说是labelClassesCount-1。这个变量永远不会被更新,而且它毫无用处。您可以使用下面的行:

changeColorPixelLabel(img, imagePixelLabelBuffered.size()-1); 
  • 在Java中,列表中包含了一个method size返回列表中的元素的数量。
  • 此外,您从不修改变量img,所以它仍然是您添加到Vector的BufferedImage上的指针。
  • 如果您不执行并行(多线程)操作,请使用ArrayList而不是Vector。 Vector是一个ArrayList,其中​​操作较慢。

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

[编辑]这是BufferedImage cloning的链接。

+0

事实上,我只是试图做一个没有参考原始的副本,所以这就是为什么我创建了一个向量。我想显示图像的所有副本并以不同方式操作它们,但每次更改最后一个图像的像素颜色时,它都会随着其他图像的相同颜色而变化。怎样才能操纵所有的变化,而不是每个图像副本,而不是在同一时间对所有变化进行操作? 不得不说我是个初学者。 – kazrak

+0

将图像添加到矢量中时,可以将图像的指针添加到矢量中。一切都是Java中的指针。我已经编辑了一个链接到克隆方法的答案。但看看我上面写的是什么,这在你的程序中也是一个错误。 – FiReTiTi