像素改变后的JAVA图像实现

像素改变后的JAVA图像实现,java,pixel,bufferedimage,Java,Pixel,Bufferedimage,我有这样的问题:我用JAVA编写了一个程序,该程序将图片中的一些数据保存到txt文件中。然后,程序应该将每25行中图片的所有像素变为黑色,并在显示器上实现图片(已经有黑线)。但有点不对劲,我不知道是什么-整个图片从diplay中删除,没有显示任何内容。代码如下: private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) .......... BufferedImage out

我有这样的问题:我用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;
    }
}
private void saveButtonActionPerformed(java.awt.event.ActionEvent evt)
..........
BuffereImage out=新的BuffereImage(in.getWidth()、in.getHeight()、in.getType());
对于(int i=0;i

我正在使用NetBeans,尽管如此,一切都很好。

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

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

您创建一个空图像,然后开始在每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);  
            }
        }
//创建一个与原始图像具有相同宽度和高度的空图像
//BuffereImage out=新的BuffereImage(in.getWidth()、in.getHeight()、in.getType());
BuffereImage out=ImageIO.read(新文件(“路径/到/原始/图像”);
对于(int i=0;i
创建一个空图像,然后在每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);  
            }
        }
//创建一个与原始图像具有相同宽度和高度的空图像
//BuffereImage out=新的BuffereImage(in.getWidth()、in.getHeight()、in.getType());
BuffereImage out=ImageIO.read(新文件(“路径/到/原始/图像”);
对于(int i=0;i
和右-缺少图像。 我用非常简单的方法解决了这个问题:

 BufferdImage out = in;
我没有刷新内存,所以我可以再次使用它。也许不是最好的解决方案,但很管用。

和是正确的-缺少图像。 我用非常简单的方法解决了这个问题:

 BufferdImage out = in;

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

对不起。我现在已经指定了问题所在-请参阅文章中的内容。您正在创建一个新的空缓冲区映像
out
,其大小与
in
相同,但从未将
in
中的数据复制到
out
。所以你在一张空图像上画一条黑线,然后显示结果——结果将是空的。请确保首先在
中复制图像。
图像面板
是什么(类型)?对不起。我现在已经指定了问题所在-请参阅文章中的内容。您正在创建一个新的空缓冲区映像
out
,其大小与
in
相同,但从未将
in
中的数据复制到
out
。所以你在一张空图像上画一条黑线,然后显示结果——结果将是空的。确保先在
中复制图像。什么(类型)是
imagePanel
?没有变化-尽管程序正在通过这一行,但显示仍然是灰色的。没有变化-尽管程序正在通过这一行,但显示仍然是灰色的。我已经这样做了,但ImageIo被视为符号-不知道为什么。此外,缓冲图像不被视为“功能”(未突出显示)。我错过了什么
buffereImage out=ImageIo.read(新文件(File.getAbsolutePath());对于(inti=0;i
这是ImageIO不是ImageIO我有一个输入错误,我会更正它这个库在jdk中,包名是javax.ImageIO这个库在jdk中,因为1.4我这样做了,但ImageIO被视为符号-不知道为什么。此外,缓冲图像不被视为“功能”(未突出显示)。我错过了什么
buffereImage out=ImageIo.read(新文件(File.getAbsolutePath());对于(inti=0;i
它是ImageIO不是ImageIO我有一个输入错误,我会更正它这个库在jdk中,包名是javax.ImageIO这个库从1.4开始就在jdk中