Preparation Code Preparation HTML (this will be inserted in the <body>
of a valid HTML5 document in standards mode) (useful when testing DOM operations or including libraries) <canvas id ="canvas" height ="600" width ="600" >
</canvas >
Setup JS var canvas = document .getElementById ('canvas' );
var canvasWidth = canvas.width ;
var canvasHeight = canvas.height ;
var ctx = canvas.getContext ('2d' );
var imageData = ctx.getImageData (0 , 0 , canvasWidth, canvasHeight);
var data = imageData.data ;
var buf = new ArrayBuffer (imageData.data .length );
var buf8 = new Uint 8ClampedArray(buf);
var data32 = new Uint 32Array (buf);
Teardown JS
ctx.putImageData (imageData, 0 , 0 );
Test cases
Test #1 Title *
Async
Code * for (var y = 0 ; y < canvasHeight; ++y) {
for (var x = 0 ; x < canvasWidth; ++x) {
var value = x * y & 0xff ;
data32[y * canvasWidth + x] = (255 << 24 ) |
(value << 16 ) |
(value << 8 ) |
value;
}
}
imageData.data .set (buf8);
ctx.putImageData (imageData, 0 , 0 );
Test #2 Title *
Async
Code * var index = 0 ;
for (var y = 0 ; y < canvasHeight; ++y) {
for (var x = 0 ; x < canvasWidth; ++x) {
var value = x * y & 0xff ;
data32[index++] = (255 << 24 ) |
(value << 16 ) |
(y << 8 ) |
x;
}
}
imageData.data .set (buf8);
ctx.putImageData (imageData, 0 , 0 );
Title *
Async
Code * var ch = canvasHeight-1 ;
var cw = canvasWidth-1 ;
var index = 0 ;
for (var y = 1 ; y < ch; ++y) {
for (var x = 1 ; x < cw; ++x) {
var value = x * y & 0xff ;
data32[index++] = (255 << 24 ) |
(value << 16 ) |
(value << 8 ) |
value;
}
}
imageData.data .set (buf8);
ctx.putImageData (imageData, 0 , 0 );