从2d像素阵列创建图片并在jpanel上显示

时间:2014-12-31 10:30:22

标签: java swing

我有以下代码:

public class TryToMakeSomethingHappen extends JPanel  {

private JFrame f;
private JPanel p;
public TryToMakeSomethingHappen() {
    f=new JFrame("Title");
    f.setSize(600, 400);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    p=new JPanel(new BorderLayout());

    ImageIcon ic=new ImageIcon("/home/michael/Pictures/begin1.jpg");

    int imageHeight = ic.getIconHeight();
    int imageWidth  = ic.getIconWidth();

    BufferedImage  bimg = new BufferedImage(imageWidth ,imageHeight, BufferedImage.TYPE_INT_ARGB);

    int pixels[][]=new int[imageWidth][imageHeight];
    for (int i=0;i<imageWidth;i++)
        for(int j=0; j<imageHeight;j++)
            pixels[i][j]=bimg.getRGB(i, j);
    BufferedImage bimg2=new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_ARGB);

    for(int y=0;y<imageHeight;y++)
        for(int x=0;x<imageWidth;x++){
            bimg2.setRGB(x, y,pixels[x][y]);
        }
       File file= new File("/home/michael/Pictures/pic2.png");
        JLabel label=new JLabel("",ic,JLabel.CENTER);
        JLabel label1;
    try {
        ImageIO.write(bimg2,"PNG",file);
        ImageIcon ic2=new ImageIcon("/home/michael/Pictures/pic2.png");
        label1=new JLabel("",ic2,JLabel.CENTER);
        p.add(label1,BorderLayout.EAST);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    p.add(label,BorderLayout.WEST);

    f.setVisible(true);
    f.add(p);
}

public static void main(String[]args){  
    TryToMakeSomethingHappen t = new TryToMakeSomethingHappen();
}
}

f是JFrame,bimg2是BufferedImage,p是JPanel。 (我班上的私人)。

在EAST图片不显示的情况下显示WEST图片。这是为什么? 当我检查文件夹中的pic2时,它是空的。我使用Linux(Ubuntu)。

如何让bimg2显示在面板的EAST侧?

1 个答案:

答案 0 :(得分:1)

发布的代码有什么意义?

  

当我检查文件夹中的pic2时,它是空的。

请一步一步查看代码:

BufferedImage  bimg = new BufferedImage(imageWidth ,imageHeight, BufferedImage.TYPE_INT_ARGB);

首先你创建一个空白的BufferedImage(在这种情况下,我相信像素都是黑色的。)

pixels[i][j]=bimg.getRGB(i, j);

然后将未更改的像素复制到数组。

BufferedImage bimg2=new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_ARGB);

然后您创建另一个空白图像。

 bimg2.setRGB(x, y,pixels[x][y]);

然后将BufferedImage的像素设置为数组中未更改的(即黑色)像素

ImageIO.write(bimg2,"PNG",file);

然后将BufferedImage写入文件。

BufferedImage仍然包含创建BufferedImage时的默认像素。你期望看到什么?