[Release] Webkit-EFL Ver. 2.0_beta_118996_0.6.22
[framework/web/webkit-efl.git] / LayoutTests / fast / images / rgb-jpeg-endian-pixels.html
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.layoutTestController) {
13     window.layoutTestController.waitUntilDone();
14     window.layoutTestController.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.layoutTestController)
74         window.layoutTestController.notifyDone();
75 }
76 </script>