77 lines
2.0 KiB
HTML
77 lines
2.0 KiB
HTML
<!DOCTYPE html>
|
|
JPEG image RGB pixels should render without color corruption and in strict<br>
|
|
order, regardless of the underlying machine pixel buffer endianess.<br><br>
|
|
|
|
<img src="resources/rgb-jpeg-red.jpg" onload="test(this, [255,0,0,255])">
|
|
<img src="resources/rgb-jpeg-green.jpg" onload="test(this, [0,255,0,255])">
|
|
<img src="resources/rgb-jpeg-blue.jpg" onload="test(this, [0,0,255,255])">
|
|
|
|
<pre id="log">PASS</pre>
|
|
|
|
<script>
|
|
if (window.testRunner) {
|
|
window.testRunner.waitUntilDone();
|
|
window.testRunner.dumpAsText();
|
|
}
|
|
|
|
function log(message)
|
|
{
|
|
document.getElementById("log").textContent += '\n' + message;
|
|
}
|
|
|
|
function averagePixelComponents(data, size)
|
|
{
|
|
var r = 0, g = 0, b = 0, a = 0;
|
|
for (var i = 0, total = size * 4; i < total; i += 4) {
|
|
r += data[i + 0];
|
|
g += data[i + 1];
|
|
b += data[i + 2];
|
|
a += data[i + 3];
|
|
}
|
|
|
|
return [r / size, g / size, b / size, a / size];
|
|
}
|
|
|
|
function averagePixelShouldBe(pixel, expect, tolerance)
|
|
{
|
|
var delta = 0;
|
|
pixel.forEach(function(component, i) {
|
|
delta = Math.max(Math.abs(pixel[i] - expect[i]), delta);
|
|
});
|
|
|
|
if (delta > tolerance)
|
|
log('FAIL: [' + pixel + '] expected [' + expect + '] +/- ' + tolerance);
|
|
}
|
|
|
|
function testImage(image, expect)
|
|
{
|
|
// Create a canvas, load the given image in it.
|
|
var canvas = document.createElement("canvas");
|
|
canvas.width = canvas.height = 64;
|
|
var context = canvas.getContext("2d");
|
|
context.drawImage(image, 0, 0);
|
|
|
|
// Compare the canvas pixel component averages.
|
|
var pixels = context.getImageData(0, 0, 64, 64).data;
|
|
var result = averagePixelComponents(pixels, 64 * 64);
|
|
|
|
var pixelTolerance = 3;
|
|
averagePixelShouldBe(result, expect, pixelTolerance);
|
|
}
|
|
|
|
function test(image, expect)
|
|
{
|
|
try {
|
|
loadedImages = window.loadedImages || 0;
|
|
testImage(image, expect);
|
|
if (++loadedImages < 3)
|
|
return;
|
|
} catch (e) {
|
|
log('FAIL: ' + e.message);
|
|
}
|
|
|
|
if (window.testRunner)
|
|
window.testRunner.notifyDone();
|
|
}
|
|
</script>
|