зеркало из https://github.com/mozilla/gecko-dev.git
388 строки
6.8 KiB
JavaScript
388 строки
6.8 KiB
JavaScript
var gImage1;
|
|
var gImage2;
|
|
var gImageBitmap1;
|
|
var gImageBitmap2;
|
|
|
|
// Bug 1239752.
|
|
var gImageData;
|
|
var gImageBitmap3;
|
|
|
|
function comparePixelColor(
|
|
testImgageData,
|
|
groundTruthImageData,
|
|
x,
|
|
y,
|
|
tolerance,
|
|
info
|
|
) {
|
|
ok(
|
|
testImgageData.width == groundTruthImageData.width &&
|
|
testImgageData.height == groundTruthImageData.height,
|
|
"testImgageData and groundTruthImageData should have the same dimension."
|
|
);
|
|
|
|
var index = (groundTruthImageData.width * y + x) * 4;
|
|
var r = groundTruthImageData.data[index + 0];
|
|
var g = groundTruthImageData.data[index + 1];
|
|
var b = groundTruthImageData.data[index + 2];
|
|
var a = groundTruthImageData.data[index + 3];
|
|
var newR = testImgageData.data[index + 0];
|
|
var newG = testImgageData.data[index + 1];
|
|
var newB = testImgageData.data[index + 2];
|
|
var newA = testImgageData.data[index + 3];
|
|
var isTheSame =
|
|
Math.abs(r - newR) <= tolerance &&
|
|
Math.abs(g - newG) <= tolerance &&
|
|
Math.abs(b - newB) <= tolerance &&
|
|
Math.abs(a - newA) <= tolerance;
|
|
ok(
|
|
isTheSame,
|
|
"[" +
|
|
info +
|
|
"] " +
|
|
"newImageData(" +
|
|
newR +
|
|
"," +
|
|
newG +
|
|
"," +
|
|
newB +
|
|
"," +
|
|
newA +
|
|
") should equal to imageData(" +
|
|
r +
|
|
"," +
|
|
g +
|
|
"," +
|
|
b +
|
|
"," +
|
|
a +
|
|
")."
|
|
);
|
|
}
|
|
|
|
function compareImageBitmapWithImageElement(imageBitmap, imageElement) {
|
|
var canvas1 = document.createElement("canvas");
|
|
var canvas2 = document.createElement("canvas");
|
|
|
|
canvas1.width = imageElement.naturalWidth;
|
|
canvas1.height = imageElement.naturalHeight;
|
|
canvas2.width = imageElement.naturalWidth;
|
|
canvas2.height = imageElement.naturalHeight;
|
|
|
|
var ctx1 = canvas1.getContext("2d");
|
|
var ctx2 = canvas2.getContext("2d");
|
|
|
|
ctx1.drawImage(imageElement, 0, 0);
|
|
ctx2.drawImage(imageBitmap, 0, 0);
|
|
|
|
document.body.appendChild(canvas1);
|
|
document.body.appendChild(canvas2);
|
|
|
|
var imageData1 = ctx1.getImageData(0, 0, canvas1.width, canvas1.height);
|
|
var imageData2 = ctx2.getImageData(0, 0, canvas2.width, canvas2.height);
|
|
|
|
// Create an array of pixels that is going to be tested.
|
|
var pixels = [];
|
|
var xGap = imageElement.naturalWidth / 4;
|
|
var yGap = imageElement.naturalHeight / 4;
|
|
for (var y = 0; y < imageElement.naturalHeight; y += yGap) {
|
|
for (var x = 0; x < imageElement.naturalWidth; x += xGap) {
|
|
pixels.push({ x, y });
|
|
}
|
|
}
|
|
|
|
// Also, put the button-right pixel into pixels.
|
|
pixels.push({
|
|
x: imageElement.naturalWidth - 1,
|
|
y: imageElement.naturalHeight - 1,
|
|
});
|
|
|
|
// Do the test.
|
|
for (var pixel of pixels) {
|
|
comparePixelColor(imageData2, imageData1, pixel.x, pixel.y, 0);
|
|
}
|
|
}
|
|
|
|
function compareImageBitmapWithImageData(imageBitmap, imageData, info) {
|
|
var canvas1 = document.createElement("canvas");
|
|
|
|
canvas1.width = imageBitmap.width;
|
|
canvas1.height = imageBitmap.height;
|
|
|
|
var ctx1 = canvas1.getContext("2d");
|
|
|
|
ctx1.drawImage(imageBitmap, 0, 0);
|
|
|
|
document.body.appendChild(canvas1);
|
|
|
|
var imageData1 = ctx1.getImageData(0, 0, canvas1.width, canvas1.height);
|
|
|
|
// Create an array of pixels that is going to be tested.
|
|
var pixels = [];
|
|
var xGap = imageBitmap.width / 4;
|
|
var yGap = imageBitmap.height / 4;
|
|
for (var y = 0; y < imageBitmap.height; y += yGap) {
|
|
for (var x = 0; x < imageBitmap.width; x += xGap) {
|
|
pixels.push({ x, y });
|
|
}
|
|
}
|
|
|
|
// Also, put the button-right pixel into pixels.
|
|
pixels.push({ x: imageBitmap.width - 1, y: imageBitmap.height - 1 });
|
|
|
|
// Do the test.
|
|
for (var pixel of pixels) {
|
|
comparePixelColor(imageData1, imageData, pixel.x, pixel.y, 5, info);
|
|
}
|
|
}
|
|
|
|
function prepareImageBitmaps() {
|
|
gImage1 = document.createElement("img");
|
|
gImage2 = document.createElement("img");
|
|
gImage1.src = "image_rgrg-256x256.png";
|
|
gImage2.src = "image_yellow.png";
|
|
|
|
var p1 = new Promise(function(resolve, reject) {
|
|
gImage1.onload = function() {
|
|
var promise = createImageBitmap(gImage1);
|
|
promise.then(function(bitmap) {
|
|
gImageBitmap1 = bitmap;
|
|
resolve(true);
|
|
});
|
|
};
|
|
});
|
|
|
|
var p2 = new Promise(function(resolve, reject) {
|
|
gImage2.onload = function() {
|
|
var promise = createImageBitmap(gImage2);
|
|
promise.then(function(bitmap) {
|
|
gImageBitmap2 = bitmap;
|
|
resolve(true);
|
|
});
|
|
};
|
|
});
|
|
|
|
var p3 = new Promise(function(resolve, reject) {
|
|
// Create an ImageData with random colors.
|
|
var width = 5;
|
|
var height = 10;
|
|
var data = [
|
|
43,
|
|
143,
|
|
24,
|
|
148,
|
|
235,
|
|
165,
|
|
179,
|
|
91,
|
|
74,
|
|
228,
|
|
75,
|
|
195,
|
|
141,
|
|
109,
|
|
74,
|
|
65,
|
|
25,
|
|
177,
|
|
3,
|
|
201,
|
|
128,
|
|
105,
|
|
12,
|
|
199,
|
|
196,
|
|
93,
|
|
241,
|
|
131,
|
|
250,
|
|
121,
|
|
232,
|
|
189,
|
|
175,
|
|
131,
|
|
216,
|
|
190,
|
|
145,
|
|
123,
|
|
167,
|
|
70,
|
|
18,
|
|
196,
|
|
210,
|
|
162,
|
|
225,
|
|
1,
|
|
90,
|
|
188,
|
|
223,
|
|
216,
|
|
182,
|
|
233,
|
|
118,
|
|
50,
|
|
168,
|
|
56,
|
|
51,
|
|
206,
|
|
198,
|
|
199,
|
|
153,
|
|
29,
|
|
70,
|
|
130,
|
|
180,
|
|
135,
|
|
135,
|
|
51,
|
|
148,
|
|
46,
|
|
44,
|
|
144,
|
|
80,
|
|
171,
|
|
142,
|
|
95,
|
|
25,
|
|
178,
|
|
102,
|
|
110,
|
|
0,
|
|
28,
|
|
128,
|
|
91,
|
|
31,
|
|
222,
|
|
42,
|
|
170,
|
|
85,
|
|
8,
|
|
218,
|
|
146,
|
|
65,
|
|
30,
|
|
198,
|
|
238,
|
|
121,
|
|
57,
|
|
124,
|
|
88,
|
|
246,
|
|
40,
|
|
141,
|
|
146,
|
|
174,
|
|
195,
|
|
255,
|
|
149,
|
|
30,
|
|
153,
|
|
92,
|
|
116,
|
|
18,
|
|
241,
|
|
6,
|
|
111,
|
|
39,
|
|
162,
|
|
85,
|
|
143,
|
|
237,
|
|
159,
|
|
201,
|
|
244,
|
|
93,
|
|
68,
|
|
14,
|
|
246,
|
|
143,
|
|
143,
|
|
83,
|
|
221,
|
|
187,
|
|
215,
|
|
243,
|
|
154,
|
|
24,
|
|
125,
|
|
221,
|
|
53,
|
|
80,
|
|
153,
|
|
151,
|
|
219,
|
|
202,
|
|
241,
|
|
250,
|
|
191,
|
|
153,
|
|
129,
|
|
181,
|
|
57,
|
|
94,
|
|
18,
|
|
136,
|
|
231,
|
|
41,
|
|
252,
|
|
168,
|
|
207,
|
|
213,
|
|
103,
|
|
118,
|
|
172,
|
|
53,
|
|
213,
|
|
184,
|
|
204,
|
|
25,
|
|
29,
|
|
249,
|
|
199,
|
|
101,
|
|
55,
|
|
49,
|
|
167,
|
|
25,
|
|
23,
|
|
173,
|
|
78,
|
|
19,
|
|
234,
|
|
205,
|
|
155,
|
|
250,
|
|
175,
|
|
44,
|
|
201,
|
|
215,
|
|
92,
|
|
25,
|
|
59,
|
|
25,
|
|
29,
|
|
249,
|
|
199,
|
|
153,
|
|
129,
|
|
181,
|
|
57,
|
|
];
|
|
|
|
gImageData = new ImageData(new Uint8ClampedArray(data), width, height);
|
|
|
|
// Create an ImageBitmap from the above ImageData.
|
|
createImageBitmap(gImageData).then(
|
|
bitmap => {
|
|
gImageBitmap3 = bitmap;
|
|
resolve(true);
|
|
},
|
|
() => {
|
|
reject();
|
|
}
|
|
);
|
|
});
|
|
|
|
return Promise.all([p1, p2, p3]);
|
|
}
|