Ach*_*int 1 java swing image pixel jframe
所以我尝试使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
和主要代码
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);
}
}
Run Code Online (Sandbox Code Playgroud)
它只显示一个空框架.为什么?我的目标是学习如何逐个像素地绘制,所以这只是我正在绘制的测试图像,看它是否有效.
谢谢.
您的代码有两个问题.第一
public void ImageDraw() { ... }
Run Code Online (Sandbox Code Playgroud)
是一个方法而不是构造函数.根本不会在您的代码中调用该方法.将此行更改为
public ImageDraw() { ... }
Run Code Online (Sandbox Code Playgroud)
没有void使它成为默认构造函数.
其次,您需要设置像素数据的alpha值:
pixels[i] = 255 + 0xFF000000;
Run Code Online (Sandbox Code Playgroud)
还有两点:
paint(...)而是paintComponent(...)改为.JFrame但覆盖组件的方法getPreferredSize()和使用frame.pack().