BufferedImage を使用して Canvas にピクセルを描画しようとしています。私の 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);
私が期待することをさせます。ただし、サイズを自分で (WIDTH、HEIGHT に) 設定したときにキャンバス サイズを取得する必要がある理由がわかりません。指定したサイズと同じではないようです。