2014-02-17 31 views
0

使用畫布標籤,如何在特定位置更改特定像素的顏色,而無需使用諸如ctx.lineToctx.fillRect之類的東西?HTML 5畫布標籤,更改特定像素

實施例:

我的畫布標記是500個像素×600個像素,如何在x軸和200轉動像素在位置100上的Y軸爲藍色?

+0

[在HTML5畫布中設置單個像素的最佳方式是什麼?](http://stackoverflow.com/questions/4899799/whats-the-best-way-to-set-a-single -pixel-in-an-html5-canvas) – luiges90

回答

0

這裏獲取/替換的顏色在指定像素的函數:

// test 
setPixel(100,200,0,0,255); 

function setPixel(x, y, red, green, blue) { 
    var pxData = ctx.getImageData(x,y,1,1); 
    pxData.data[0]=red; 
    pxData.data[1]=green; 
    pxData.data[2]=blue; 
    pxData.data[3]=255; 
    ctx.putImageData(pxData,x,y); 
} 

如果你做多的像素,那麼你可以拉getImageData外setPixel變量以提高性能:

var pxData = ctx.getImageData(x,y,1,1); 

// test 
for(var x=100;x<125;x++){ 
    setPixel(x,200,0,0,255); 
} 

function setPixel(x, y, red, green, blue) { 
    pxData.data[0]=red; 
    pxData.data[1]=green; 
    pxData.data[2]=blue; 
    pxData.data[3]=255; 
    ctx.putImageData(pxData,x,y); 
} 
+0

在第二個例子中,我將'ctx.putImageData'移出循環。 – Philipp

+0

另外值得一提的是:雖然大多數畫布操作通常是硬件加速的,但是在getImageData和putImageData之間做的任何操作都不是,這使得直接像素操作的性能與大多數其他操作相比相當慢。當您需要大量實時像素級別的操作時,您可以查看WebGL並使用在GPU上執行的像素着色器。 – Philipp

+0

@Philipp,如果您將'ctx.putImageData'帶出循環,則循環測試示例會中斷,因爲pxData僅爲1x1。 ;) – markE