我如何逐像素地绘制图像到jframe

我是java的初学者,直到今天我试着做我认为自己的事。 所以这一天就在这里;

我将图像的所有像素都作为rgb排列。 我想点击一个按钮,然后像素一样创建类似动画的图像。

这就是我所做的不起作用;

import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.Border; import javax.swing.border.TitledBorder; public class pixell extends JFrame { int x = 0; int y = 0; JButton btn; JButton btn2; JButton btn3; JLabel lbl1; File file = new File("C:\\Users\\Gok\\Desktop\\df.jpg"); BufferedImage image = ImageIO.read(file); int w = image.getWidth(); int h = image.getHeight(); int[][] rp = new int[w][(h)]; BufferedImage rsm = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); JLabel background; ImageIcon img = new ImageIcon(rsm); JPanel jp; public pixell() throws IOException { // TODO Auto-generated constructor stub this.setSize(612, 612); this.setLayout(null); btn = new JButton("al"); btn2 = new JButton("yaz"); btn.setBounds(100, 100, 100, 100); btn2.setBounds(100, 200, 100, 100); background = new JLabel(img); background.setBounds(10, 10, w, h); this.add(btn); this.add(btn2); this.add(background); btn.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { for (int i = 0; i < w; i++) { for (int j = 0; j > 16; int green = (clr & 0x0000ff00) >> 8; int blue = clr & 0x000000ff; rp[i][j] = clr; } } } }); btn2.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { for (int i = 0; i < w; i++) { for (int j = 0; j < h; j++) { rsm.setRGB(i, j, rp[i][j]); jp.setVisible(false); jp.revalidate(); jp.repaint(); jp.setVisible(true); jp.revalidate(); jp.repaint(); } } } }); } } 

我如何逐像素地绘制图像到jframe

不需要arrays。

BufferedImage具有getRGB(...)setRGB(...)方法。 所以你可以创建两个BufferedImages。 一个将包含完整的图像,另一个将包含一个空的BufferedImage用作JLabelImageIcon

然后你需要创建一个Swing Timer 。 每次Timer触发时,您都需要获取下一个像素并将其添加到空的BufferedImage中。

在类的构造函数中,您可以使用以下代码创建Timer:

 timer = new Timer(20, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { emptyBI.setRGB(row, column, originalBI.getRGB(row, column); label.repaint(); column++; if (column >= originalBI.getWidth() { row++; column = 0; } if (row >= originalBI.getHeight() { Timer timer = (Timer)e.getSource(); timer.stop(); } } }); 

变量“timer,row,column,originalBI,emptyBI,label”都是类中的实例变量。

所以现在单击按钮时只需调用timer.start()

有关更多信息和示例,请阅读Swing教程中有关如何使用Swing Timers的部分。