blob: 8e970b7382860ee978b1474156641b020e9f087a [file] [edit]
// A 32x32 picture with an opaque red, green and blue quadrant and a fully transparent last quadrant.
function makeTransparentCanvas() {
const canvas = new OffscreenCanvas(32, 32);
const ctx = canvas.getContext('2d', {alpha: true});
ctx.fillStyle = 'rgb(255, 0, 0)';
ctx.fillRect(0, 0, 16, 16);
ctx.fillStyle = 'rgb(0, 255, 0)';
ctx.fillRect(16, 0, 16, 16);
ctx.fillStyle = 'rgb(0, 0, 255)';
ctx.fillRect(0, 16, 16, 16);
return canvas;
}
function getPixel(ctx, x, y) {
return Array.from(ctx.getImageData(x, y, 1, 1).data);
}
// With the alpha discarded, the fully transparent quadrant is opaque black.
function verifyOpaquePicture(ctx, description) {
assert_array_equals(getPixel(ctx, 8, 8), [255, 0, 0, 255], `${description}: red`);
assert_array_equals(getPixel(ctx, 24, 8), [0, 255, 0, 255], `${description}: green`);
assert_array_equals(getPixel(ctx, 8, 24), [0, 0, 255, 255], `${description}: blue`);
assert_array_equals(getPixel(ctx, 24, 24), [0, 0, 0, 255], `${description}: transparent quadrant`);
}
function drawToNewCanvas(source, background) {
const ctx = new OffscreenCanvas(32, 32).getContext('2d');
if (background) {
ctx.fillStyle = background;
ctx.fillRect(0, 0, 32, 32);
}
ctx.drawImage(source, 0, 0);
return ctx;
}