像素改变后JA​​VA中的图像实现

时间:2016-02-17 14:03:51

标签: java pixel bufferedimage

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

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,尽管如此,一切正常。

3 个答案:

答案 0 :(得分:2)

你创建一个空图像并开始绘制每个第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);  
            }
        }

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

achabaheErwin Bolwidt是对的 - 缺少图像。 我用这么简单的方式解决了它:

 BufferdImage out = in;

我没有冲洗内存,所以我可以再次使用它。也许不是最好的解决方案,但有效。