所以我尝试使用MemoryImageSource写一些像素并将其显示在一个帧中。这是代码:
public class ImageDraw extends JPanel {
Image img;
public void ImageDraw(){
//super();
int w=600;
int h=400;
int pixels[] = new int[w*h];
int i=0;
for(i=0;i<w*h;i++){
//pixels[i++]=0;
pixels[i]=255;
}
img = createImage(new MemoryImageSource(w,h,pixels,0,w));
}
public void paint(Graphics g){
g.drawImage(img, 0, 0, this);
}
}
和主要代码
public class FuncTest {
public static void main(String[] args) {
JFrame frame = new JFrame("Display");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 400);
ImageDraw pan = new ImageDraw();
frame.getContentPane().add(pan);
frame.setVisible(true);
}
}
它只显示一个空框架。为什么?我的目的是学习如何逐个像素地绘制,所以这只是我正在绘制的测试图像,看它是否有效。
感谢。
答案 0 :(得分:5)
您的代码存在两个问题。第一
public void ImageDraw() { ... }
是一个方法,而不是构造函数。根本不会在您的代码中调用该方法。将此行更改为
public ImageDraw() { ... }
没有void
使其成为默认构造函数。
其次,您需要设置像素数据的alpha值:
pixels[i] = 255 + 0xFF000000;
还有两点:
paint(...)
,而是覆盖paintComponent(...)
。 JFrame
的大小,而是覆盖组件的方法getPreferredSize()
并使用frame.pack()
。