【问题标题】:Image actualization in JAVA after pixels are changed像素改变后在 JAVA 中的图像实现
【发布时间】:2016-02-17 14:03:51
【问题描述】:

我有这样的问题:我在JAVA程序中准备了应该从图片中保存一些数据并将它们保存到txt文件中。然后程序应该将每 25 行中图片的所有像素都变为黑色,并在显示器上实现图片(已经带有黑线)。但是出了点问题,我不知道是什么 - 整个图片从显示中删除,没有显示任何内容。代码如下:

private void saveButtonActionPerformed(java.awt.event.ActionEvent evt)  

        ..........

      BufferedImage out = new BufferedImage(in.getWidth(), in.getHeight(), in.getType());
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j=j+25) {
                    out.setRGB(i,j,0);  
                }
            }

            ImageIcon img = new ImageIcon(out);

            imagePanel.removeAll();
            imagePanel.setIcon(img);

        } catch (IOException e) { 
            System.out.print("ERROR");  
        }
    }
}                                          

public static BufferedImage loadImage(File file) {
    try {            
        BufferedImage out = ImageIO.read(file);
        return out;
    } catch (IOException e) {
        return null;
    }
}

我正在使用 NetBeans,尽管如此,一切正常。

【问题讨论】:

  • 对不起。我现在已经指定了问题 - 请参阅帖子。
  • 您正在创建一个新的空 BufferedImage out,其大小与 in 相同,但您从未将 in 中的数据复制到 out。所以你在一个空的图像上画一条黑线,然后显示结果 - 然后它将是空的。确保首先复制图像in
  • imagePanel 是什么(类型)?

标签: java pixel bufferedimage


【解决方案1】:

您创建一个空图像并在每 25 行开始绘制,实际上您应该从原始图像开始并开始在其中绘制。

 // you create an empty image with same width and height of the original
    //BufferedImage out = new BufferedImage(in.getWidth(), in.getHeight(), in.getType());
      BufferedImage out = ImageIO.read(new File("path/to/Original/image")); 
        for (int i = 0; i < width; i++) {
            for (int j = 0; j < height; j=j+25) {
                out.setRGB(i,j,0);  
            }
        }

【讨论】:

  • 我已经做到了,但 ImageIo 被视为符号 - 不知道为什么。更重要的是,缓冲图像不被视为“功能”(未突出显示)。我错过了什么? BufferedImage out = ImageIo.read(new File(file.getAbsolutePath())); for (int i = 0; i &lt; width; i++) { for (int j = 0; j &lt; height; j=j+25) { out.setRGB(i,j,0); } }
  • 它是 ImageIO 不是 ImageIo 我打错了我会更正它 这个库在 jdk 中 包名称是 javax.imageio 这个库从 1.4 开始就在 jdk 中
【解决方案2】:

只需在调用imagePanel.setIcon(img); 后添加imagePanel.revalidate();。您必须告诉 Java,它必须评估您的更改并在必要时重新绘制组件。

【讨论】:

  • 什么都没有改变 - 尽管程序正在通过这条线,但显示仍然是灰色的。
【解决方案3】:

achabaheErwin Bolwidt 是正确的 - 缺少图像。 我已经以非常简单的方式解决了它:

 BufferdImage out = in;

我还没有刷新内存,所以我可以再次使用它。也许不是最好的解决方案,但可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    相关资源
    最近更新 更多