0

我正在尝试使用 BufferedImage 在画布上绘制像素。在我的 Canvas 构造函数中,我正在初始化图像和像素数组,如下所示:

public MyCanvas() {
    Dimension size = new Dimension(WIDTH, HEIGHT);
    setSize(size);
    setPreferredSize(size);
    setMinimumSize(size);
    setMaximumSize(size);

    image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
    pixels = ((DataBufferInt) img.getRaster().getDataBuffer()).getData();
}

我通过以下方式绘制每个渲染:

private void render() {
    BufferStrategy bs = getBufferStrategy();
    if (bs == null) {
        createBufferStrategy(3);
        return;
    }

    for (int i = 0; i < pixels.length; i++) {
        pixels[i] = 0xFFFFFF;
    }

    Graphics g = bs.getDrawGraphics();
    g.fillRect(0, 0, getWidth(), getHeight());
    g.drawImage(img, 0, 0, WIDTH, HEIGHT, null);
    g.dispose();
    bs.show();
}

我期待我的画布充满了白色像素,但我在白色区域的右侧和底部得到了黑色边框,即它似乎没有填满我的整个画布,或者它有一些负偏移。我检查了像素数组的长度是 WIDTH * HEIGHT。我将画布放入 JFrame 中带有 BorderLayout.CENTER 的 JPanel 中。

编辑:

改变

g.drawImage(img, 0, 0, WIDTH, HEIGHT, null);

g.drawImage(img, 0, 0, getWidth(), getHeight(), null);

让它做我所期望的。但是我不明白为什么当我自己设置尺寸(宽度,高度)时我必须获取画布尺寸,而且它似乎与我给它的尺寸不同。

4

1 回答 1

0

我看不到您在哪里设置矩形填充的颜色。

尝试这个:

Graphics g = bs.getDrawGraphics();
// g.setColor(Color.WHITE);
// g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(img, 0, 0, getWidth(), getHeight(), null);
g.dispose();
bs.show();
于 2012-12-17T14:50:28.177 回答