我正在尝试使用 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);
让它做我所期望的。但是我不明白为什么当我自己设置尺寸(宽度,高度)时我必须获取画布尺寸,而且它似乎与我给它的尺寸不同。