2012-12-17 38 views
0

我想使用BufferedImage在畫布上畫像素。在我的畫布構造我初始化圖像和像素陣列,像這樣:在BufferedImage上畫布上的像素不能填滿整個畫布

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)來獲取畫布大小,而且它看起來與我給它的大小不一樣。

回答

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(); 
+0

的目的不是爲了填充白色像素的整個畫布真的,但我擔心它不會畫到整個畫布。 – tobier

+0

我改變了drawImage參數。這應該是整個畫布,不管它是否調整大小。 –