哪种方法是使用java创建像素图像的最佳方法。 比如,我想创建一个尺寸为200x200的像素图像,总共为40.000像素。如何从随机颜色创建像素并将其渲染到JFrame上的给定位置。
我尝试创建一个只创建像素的自己的组件,但是如果我使用for循环创建这样一个像素250,000次并将每个实例添加到JPanels布局中,这似乎不是非常高效。
class Pixel extends JComponent {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(getRandomColor());
g.fillRect(0, 0, 1, 1);
}
}
答案 0 :(得分:9)
您无需为此创建类。 Java已经拥有了出色的BufferedImage类,可以完全满足您的需求。这是一些伪代码:
int w = 10;
int h = 10;
int type = BufferedImage.TYPE_INT_ARGB;
BufferedImage image = new BufferedImage(w, h, type);
int color = 255; // RGBA value, each component in a byte
for(int x = 0; x < w; x++) {
for(int y = 0; y < h; y++) {
image.setRGB(x, y, color);
}
}
// Do something with image
答案 1 :(得分:6)
这里的关键是Canvas
类。标准Component
允许任意绘制操作。为了使用它,您必须继承Canvas
类并覆盖paint(Graphics g)
方法,然后遍历每个像素并绘制随机颜色。以下代码应该有效:
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JFrame;
public class PixelCanvas extends Canvas {
private static final int WIDTH = 400;
private static final int HEIGHT = 400;
private static final Random random = new Random();
@Override
public void paint(Graphics g) {
super.paint(g);
for(int x = 0; x < WIDTH; x++) {
for(int y = 0; y < HEIGHT; y++) {
g.setColor(randomColor());
g.drawLine(x, y, x, y);
}
}
}
private Color randomColor() {
return new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256));
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(WIDTH, HEIGHT);
frame.add(new PixelCanvas());
frame.setVisible(true);
}
}
生成的图像如下所示:
答案 2 :(得分:3)
您可能想要创建所需大小的BufferedImage
,并使用img.setRGB(x, y, getRandomColor())
创建一堆随机像素。然后你可以在任何你想要的地方渲染整个图像。