7

哪种方法是用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);
    }
}
4

3 回答 3

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
于 2011-08-13T00:45:08.173 回答
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);
    }
}

生成的图像如下所示:

噪声图像

于 2011-08-13T00:53:48.170 回答
3

你可能想要创建一个BufferedImage你想要的大小,并img.setRGB(x, y, getRandomColor())用来创建一堆随机像素。然后你可以在任何你想要的地方渲染整个图像。

于 2011-08-13T00:45:37.830 回答