| <!DOCTYPE HTML> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script> |
| function drawAndTestCanvas(srcCanvas, dstWidth, dstHeight, x, y, dw, dh, shouldBeGreen) |
| { |
| var dstCanvas = document.createElement('canvas'); |
| dstCanvas.width = dstWidth; |
| dstCanvas.height = dstHeight; |
| var dstCtx = dstCanvas.getContext('2d'); |
| dstCtx.fillStyle = '#00FF00'; |
| dstCtx.fillRect(0, 0, dstWidth, dstHeight); |
| dstCtx.drawImage(srcCanvas, 5, 5, 10, 10, x, y, dw, dh); |
| var isOnePixelNotGreen = false; |
| for (var i = 0; i < dstWidth; i++) { |
| for (var j = 0; j < dstHeight; j++) { |
| var d = dstCtx.getImageData(i, j, 1, 1).data; |
| if (shouldBeGreen && (d[0] != 0 || d[1] != 255 || d[2] != 0 || d[3] != 255)) { |
| assert_true(false); |
| return; |
| } |
| if (!shouldBeGreen && (d[0] != 0 || d[1] != 255 || d[2] != 0 || d[3] != 255)) { |
| isOnePixelNotGreen = true; |
| break; |
| } |
| } |
| if (isOnePixelNotGreen) |
| break; |
| } |
| if (!shouldBeGreen) |
| assert_true(isOnePixelNotGreen); |
| } |
| |
| test(function() { |
| var srcCanvas = document.createElement('canvas'); |
| srcCanvas.width = 20; |
| srcCanvas.height = 20; |
| var srcCtx = srcCanvas.getContext('2d'); |
| srcCtx.fillStyle = '#FF0000'; |
| srcCtx.fillRect(0, 0, 20, 20); |
| srcCtx.fillStyle = '#00FF00'; |
| srcCtx.fillRect(5, 5, 10, 10); |
| |
| drawAndTestCanvas(srcCanvas, 20, 20, 5, 5, 10, 10, true); // no scaling, no bleeding |
| drawAndTestCanvas(srcCanvas, 40, 40, 10, 10, 20, 20, false); // scaling, bleeding |
| }, 'drawImage should sample outside of src rect when scaling'); |
| </script> |