2012-04-09 65 views
0

我嘗試在JavaScript中使用一些圖片動畫,因此我必須使用像素進行操作,但問題在於像素的行走陣列需要很長時間,上下文的本機功能會執行此操作快多了。如何優化畫布中的像素編輯

該測試顯示它:

<canvas width="600" height="400" id="canvas"></canvas> 
<script type="text/javascript"> 
ctx = document.getElementById('canvas').getContext("2d"); 
// Test 1 
var date1 = new Date(); 
ctx.fillRect(100, 100, 200, 200); 
// Test 2 
var date2 = new Date(); 
var imageData = ctx.getImageData(0, 0, 600, 400); 
var i, j, p; 
for(i = 100; i < 300; ++i) 
    for(j = 100; j < 300; ++j) { 
     p = (i * 600 + j) * 4; 
     imageData.data[p] = 0; 
     imageData.data[p + 1] = 0; 
     imageData.data[p + 2] = 0; 
     imageData.data[p + 3] = 255; 
    } 
ctx.putImageData(imageData, 0, 0); 
// Test 3 
var date3 = new Date(); 
var imageData = ctx.getImageData(100, 100, 200, 200); 
var i, j, p; 
for(i = 0; i < 200; ++i) 
    for(j = 0; j < 200; ++j) { 
     p = (i * 200 + j) * 4; 
     imageData.data[p] = 0; 
     imageData.data[p + 1] = 0; 
     imageData.data[p + 2] = 0; 
     imageData.data[p + 3] = 255; 
    } 
ctx.putImageData(imageData, 100, 100); 
var date4 = new Date(); 

alert("fillRect: " + (date2.getTime() - date1.getTime()) + "\ngetImageData(full): " + (date3.getTime() - date2.getTime()) + "\ngetImageData(part): " + (date4.getTime() - date3.getTime())); 
</script> 

近似的結果是:0,14,12

它爲什麼會發生?手動更改像素的最快方法是什麼?

回答

1

看一看:Faster Canvas Pixel Manipulation with Typed Arrays

而且here你可以自己運行的基準。

+0

非常感謝您的鏈接,我會探索 – Finesse 2012-04-09 04:37:44

+0

@stewe,'TypeError:Object#沒有方法'set'.' – 2012-04-09 04:50:10

+0

你需要看看你的瀏覽器/構建是否足夠新(並且配置合適)以支持所需的語言/ HTML5功能。 – 2012-04-09 04:52:23