我有以下代码:
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侧?
答案 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时的默认像素。你期望看到什么?