image.smoothing.worker.js (4460B)
1 // spec link: https://html.spec.whatwg.org/#the-offscreen-2d-rendering-context 2 3 importScripts("/resources/testharness.js"); 4 5 function createTestImage() { 6 var image = new OffscreenCanvas(100, 50); 7 var imgctx = image.getContext('2d'); 8 imgctx.fillStyle = "#F00"; 9 imgctx.fillRect(0, 0, 2, 2); 10 imgctx.fillStyle = "#0F0"; 11 imgctx.fillRect(0, 0, 1, 1); 12 return image; 13 } 14 15 test(function() { 16 var offscreenCanvas = new OffscreenCanvas(100, 50); 17 var ctx = offscreenCanvas.getContext('2d'); 18 assert_true(ctx.imageSmoothingEnabled); 19 }, "When the context is created, imageSmoothingEnabled must be set to true."); 20 21 test(function() { 22 var offscreenCanvas = new OffscreenCanvas(100, 50); 23 var ctx = offscreenCanvas.getContext('2d'); 24 ctx.imageSmoothingEnabled = false; 25 assert_false(ctx.imageSmoothingEnabled); 26 }, "On getting imageSmoothingEnabled, the user agent must return the last value it was set to."); 27 28 test(function() { 29 var offscreenCanvas = new OffscreenCanvas(100, 50); 30 var ctx = offscreenCanvas.getContext('2d'); 31 var image = createTestImage(); 32 ctx.scale(10, 10); 33 ctx.drawImage(image, 0, 0); 34 var pixels = ctx.getImageData(9, 9, 1, 1).data; 35 assert_not_equals(pixels[0], 0); 36 assert_not_equals(pixels[1], 255); 37 }, "Test that image smoothing is actually on by default."); 38 39 test(function() { 40 var offscreenCanvas = new OffscreenCanvas(100, 50); 41 var ctx = offscreenCanvas.getContext('2d'); 42 ctx.imageSmoothingEnabled = true; 43 var image = createTestImage(); 44 ctx.scale(10, 10); 45 ctx.drawImage(image, 0, 0); 46 var pixels = ctx.getImageData(9, 9, 1, 1).data; 47 assert_not_equals(pixels[0], 0); 48 assert_not_equals(pixels[1], 255); 49 }, "Test that image smoothing works when imageSmoothingEnabled is set to true"); 50 51 test(function() { 52 var offscreenCanvas = new OffscreenCanvas(100, 50); 53 var ctx = offscreenCanvas.getContext('2d'); 54 var image = createTestImage(); 55 ctx.imageSmoothingEnabled = false; 56 ctx.scale(10, 10); 57 ctx.drawImage(image, 0, 0); 58 var pixels = ctx.getImageData(9, 9, 1, 1).data; 59 assert_array_equals(pixels, [0, 255, 0, 255]); 60 }, "Test that imageSmoothingEnabled = false (nearest-neighbor interpolation) works with drawImage()."); 61 62 test(function() { 63 var offscreenCanvas = new OffscreenCanvas(100, 50); 64 var ctx = offscreenCanvas.getContext('2d'); 65 var image = createTestImage(); 66 ctx.imageSmoothingEnabled = false; 67 ctx.scale(10, 10); 68 ctx.fillStyle = ctx.createPattern(image, 'repeat'); 69 ctx.fillRect(0, 0, 10, 10); 70 var pixels = ctx.getImageData(9, 9, 1, 1).data; 71 assert_array_equals(pixels, [0, 255, 0, 255]); 72 }, "Test that imageSmoothingEnabled = false (nearest-neighbor interpolation) works with fillRect and createPattern()."); 73 74 test(function() { 75 var offscreenCanvas = new OffscreenCanvas(100, 50); 76 var ctx = offscreenCanvas.getContext('2d'); 77 var image = createTestImage(); 78 ctx.imageSmoothingEnabled = false; 79 ctx.fillStyle = ctx.createPattern(image, 'repeat'); 80 ctx.scale(10, 10); 81 ctx.rect(0, 0, 10, 10); 82 ctx.fill(); 83 var pixels = ctx.getImageData(9, 9, 1, 1).data; 84 assert_array_equals(pixels, [0, 255, 0, 255]); 85 }, "Test that imageSmoothingEnabled = false (nearest-neighbor interpolation) works with fill() and createPattern()."); 86 87 test(function() { 88 var offscreenCanvas = new OffscreenCanvas(100, 50); 89 var ctx = offscreenCanvas.getContext('2d'); 90 var image = createTestImage(); 91 ctx.strokeStyle = ctx.createPattern(image, 'repeat'); 92 ctx.lineWidth = 5; 93 ctx.imageSmoothingEnabled = false; 94 ctx.scale(10, 10); 95 ctx.beginPath(); 96 ctx.moveTo(0, 0); 97 ctx.lineTo(10, 10); 98 ctx.stroke(); 99 var pixels = ctx.getImageData(9, 9, 1, 1).data; 100 assert_array_equals(pixels, [0, 255, 0, 255]); 101 }, "Test that imageSmoothingEnabled = false (nearest-neighbor interpolation) works with stroke() and createPattern()."); 102 103 test(function() { 104 var repaints = 5; 105 var offscreenCanvas = new OffscreenCanvas(100, 50); 106 var ctx = offscreenCanvas.getContext('2d'); 107 108 function draw() { 109 ctx.clearRect(0, 0, 10, 10); 110 ctx.setTransform(1, 0, 0, 1, 0, 0); 111 var image = createTestImage(); 112 ctx.imageSmoothingEnabled = false; 113 ctx.scale(10, 10); 114 ctx.drawImage(image, 0, 0); 115 var pixels = ctx.getImageData(9, 9, 1, 1).data; 116 assert_array_equals(pixels, [0, 255, 0, 255]); 117 } 118 119 while (repaints > 0) { 120 draw(); 121 repaints = repaints - 1; 122 } 123 124 }, "Test that imageSmoothingEnabled = false (nearest-neighbor interpolation) still works after repaints."); 125 126 done();