OLD | NEW |
| (Empty) |
1 <!DOCTYPE html> | |
2 JPEG image RGB pixels should render without color corruption and in strict<br> | |
3 order, regardless of the underlying machine pixel buffer endianess.<br><br> | |
4 | |
5 <img src="resources/rgb-jpeg-red.jpg" onload="test(this, [255,0,0,255])"> | |
6 <img src="resources/rgb-jpeg-green.jpg" onload="test(this, [0,255,0,255])"> | |
7 <img src="resources/rgb-jpeg-blue.jpg" onload="test(this, [0,0,255,255])"> | |
8 | |
9 <pre id="log">PASS</pre> | |
10 | |
11 <script> | |
12 if (window.testRunner) { | |
13 window.testRunner.waitUntilDone(); | |
14 window.testRunner.dumpAsText(); | |
15 } | |
16 | |
17 function log(message) | |
18 { | |
19 document.getElementById("log").textContent += '\n' + message; | |
20 } | |
21 | |
22 function averagePixelComponents(data, size) | |
23 { | |
24 var r = 0, g = 0, b = 0, a = 0; | |
25 for (var i = 0, total = size * 4; i < total; i += 4) { | |
26 r += data[i + 0]; | |
27 g += data[i + 1]; | |
28 b += data[i + 2]; | |
29 a += data[i + 3]; | |
30 } | |
31 | |
32 return [r / size, g / size, b / size, a / size]; | |
33 } | |
34 | |
35 function averagePixelShouldBe(pixel, expect, tolerance) | |
36 { | |
37 var delta = 0; | |
38 pixel.forEach(function(component, i) { | |
39 delta = Math.max(Math.abs(pixel[i] - expect[i]), delta); | |
40 }); | |
41 | |
42 if (delta > tolerance) | |
43 log('FAIL: [' + pixel + '] expected [' + expect + '] +/- ' + tolerance); | |
44 } | |
45 | |
46 function testImage(image, expect) | |
47 { | |
48 // Create a canvas, load the given image in it. | |
49 var canvas = document.createElement("canvas"); | |
50 canvas.width = canvas.height = 64; | |
51 var context = canvas.getContext("2d"); | |
52 context.drawImage(image, 0, 0); | |
53 | |
54 // Compare the canvas pixel component averages. | |
55 var pixels = context.getImageData(0, 0, 64, 64).data; | |
56 var result = averagePixelComponents(pixels, 64 * 64); | |
57 | |
58 var pixelTolerance = 3; | |
59 averagePixelShouldBe(result, expect, pixelTolerance); | |
60 } | |
61 | |
62 function test(image, expect) | |
63 { | |
64 try { | |
65 loadedImages = window.loadedImages || 0; | |
66 testImage(image, expect); | |
67 if (++loadedImages < 3) | |
68 return; | |
69 } catch (e) { | |
70 log('FAIL: ' + e.message); | |
71 } | |
72 | |
73 if (window.testRunner) | |
74 window.testRunner.notifyDone(); | |
75 } | |
76 </script> | |
OLD | NEW |