【问题标题】:Adding BufferedImage objects into a Vector将 BufferedImage 对象添加到向量中
【发布时间】:2017-06-26 11:00:32
【问题描述】:

我对 BufferedImage 对象的向量有疑问。我正在尝试将 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();
}

【问题讨论】:

    标签: java vector bufferedimage javax.imageio


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答,但问题不存在。
    【解决方案2】:

    您使用 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的链接。

    【讨论】:

    • 事实上,我只是想在不参考原件的情况下进行复制,这就是我创建矢量的原因。我想显示图像的所有副本并以不同的方式操作它们,但是每次我更改最后一个的像素颜色时,它也会以相同的颜色更改为其他图像。除了对图像的每个副本,而不是同时对所有图像进行操作之外,如何操作所有更改?不得不说我是初学者。
    • 将图像添加到 Vector 时,会将图像的指针添加到 Vector 中。 Java 中的一切都是指针。我用克隆方法的链接编辑了我的答案。但是看看我上面写的,这也是你程序的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多