| <!DOCTYPE html> |
| <body> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script> |
| |
| var xWidth = xHeight = 10; |
| |
| function checkImageData(canvasColorSettings, imageData) { |
| var imageDataColorSettings = imageData.getColorSettings(); |
| assert_equals(canvasColorSettings.colorSpace, imageDataColorSettings.colorSpace); |
| if (canvasColorSettings.pixelFormat == "uint8") { |
| assert_equals("uint8", imageDataColorSettings.storageFormat); |
| assert_equals(imageData.data.length, 4 * xWidth * xHeight); |
| } else { |
| assert_equals("float32", imageDataColorSettings.storageFormat); |
| assert_equals(imageData.dataUnion.length, 4 * xWidth * xHeight); |
| } |
| } |
| |
| // Test createImageData when the canvas is color managed |
| var helperImageData = new ImageData(xWidth, xHeight); |
| function runTestCreateImageData(canvasColorSettings) { |
| var aCanvas = document.createElement("canvas"); |
| aCanvas.width = xWidth; |
| aCanvas.height = xHeight; |
| var ctx = aCanvas.getContext('2d', canvasColorSettings); |
| var imageData = ctx.createImageData(xWidth, xHeight); |
| checkImageData(canvasColorSettings, imageData); |
| |
| imageData = ctx.createImageData(helperImageData); |
| checkImageData(canvasColorSettings, imageData); |
| } |
| |
| var testScenariosCreateImageData = [ |
| ["Test color managed cretateImageData: {srgb, uint8} -> {srgb, uint8}", |
| {colorSpace: "srgb", pixelFormat: "uint8"}], |
| ["Test color managed cretateImageData: {srgb, float16} -> {srgb, float32}", |
| {colorSpace: "srgb", pixelFormat: "float16"}], |
| ]; |
| |
| function runCreateImageDataTests() { |
| for (var i = 0; i < testScenariosCreateImageData.length; i++){ |
| var t = test(function() { |
| runTestCreateImageData(testScenariosCreateImageData[i][1]); |
| }, testScenariosCreateImageData[i][0]); |
| } |
| } |
| runCreateImageDataTests(); |
| |
| // Test getImageData when the canvas is color managed |
| function runTestGetImageData(canvasColorSettings) { |
| var aCanvas = document.createElement("canvas"); |
| aCanvas.width = xWidth; |
| aCanvas.height = xHeight; |
| var ctx = aCanvas.getContext('2d', canvasColorSettings); |
| var imageData = ctx.getImageData(0, 0, xWidth, xHeight); |
| checkImageData(canvasColorSettings, imageData); |
| } |
| |
| var testScenariosGetImageData = [ |
| ["Test color managed getImageData: {srgb, uint8} -> {srgb, uint8}", |
| {colorSpace: "srgb", pixelFormat: "uint8"}], |
| ["Test color managed getImageData: {srgb, float16} -> {srgb, float32}", |
| {colorSpace: "srgb", pixelFormat: "float16"}], |
| ]; |
| |
| function runGetImageDataTests() { |
| for (var i = 0; i < testScenariosGetImageData.length; i++){ |
| var t = test(function() { |
| runTestGetImageData(testScenariosGetImageData[i][1]); |
| }, testScenariosGetImageData[i][0]); |
| } |
| } |
| runGetImageDataTests(); |
| |
| // Test putImageData when the canvas is color managed. |
| |
| var dataU8 = new Uint8ClampedArray(4 * xWidth * xHeight); |
| var dataU16 = new Uint16Array(4 * xWidth * xHeight); |
| var dataF32 = new Float32Array(4 * xWidth * xHeight); |
| function prepareDataArrays() { |
| for (i = 0; i < 4 * xWidth * xHeight; i++) { |
| dataU8[i] = (i % 4 == 3) ? 255 : i % 256; |
| dataU16[i] = dataU8[i] * 257; |
| dataF32[i] = dataU8[i] / 255.0; |
| } |
| } |
| |
| var testScenariosPutImageData = []; |
| function prepareTestScenariosPutImageData() { |
| var colorSpaces = ["srgb"]; |
| var imageDataStorageFormats = ["uint8", "uint16", "float32"]; |
| var canvasPixelFormats = ["uint8", "float16"]; |
| |
| for (i = 0; i < colorSpaces.length; i++) |
| for (j = 0; j < imageDataStorageFormats.length; j++) |
| for (k = 0; k < colorSpaces.length; k++) |
| for (l = 0; l < canvasPixelFormats.length; l++) { |
| testTitle = "Test color managed putImageData: ".concat( |
| "{", colorSpaces[i], ", ", imageDataStorageFormats[j], "} -> {", colorSpaces[k], |
| ", ", canvasPixelFormats[l], "}"); |
| imageDataColorSettings = |
| {colorSpace: colorSpaces[i], storageFormat: imageDataStorageFormats[j]}; |
| canvasColorSettings = |
| {colorSpace: colorSpaces[k], pixelFormat: canvasPixelFormats[l]}; |
| testScenariosPutImageData.push([testTitle, imageDataColorSettings, canvasColorSettings]); |
| } |
| } |
| |
| function createAndPutImageData(data, imageDataColorSettings, canvasColorSettings) { |
| // create color managed canvas |
| var aCanvas = document.createElement("canvas"); |
| aCanvas.width = xWidth; |
| aCanvas.height = xHeight; |
| var ctx = aCanvas.getContext('2d', canvasColorSettings); |
| // create color managed ImageData |
| var imageData = ctx.createImageData(data, xWidth, xHeight, imageDataColorSettings); |
| // put image data into canvas. test succeeds if this does not crash. |
| ctx.putImageData(imageData, 0, 0); |
| } |
| |
| function runTestPutImageData(imageDataColorSettings, canvasColorSettings) { |
| createAndPutImageData(dataU8, imageDataColorSettings, canvasColorSettings); |
| createAndPutImageData(dataU16, imageDataColorSettings, canvasColorSettings); |
| createAndPutImageData(dataF32, imageDataColorSettings, canvasColorSettings); |
| } |
| |
| prepareDataArrays(); |
| prepareTestScenariosPutImageData(); |
| |
| function runPutImageDataTests() { |
| for (var i = 0; i < testScenariosPutImageData.length; i++){ |
| var t = test(function() { |
| runTestPutImageData(testScenariosPutImageData[i][1]); |
| }, testScenariosPutImageData[i][0]); |
| } |
| } |
| runPutImageDataTests(); |
| |
| </script> |
| </body> |