forked from mirrors/gecko-dev
		
	 351d147e2f
			
		
	
	
		351d147e2f
		
	
	
	
	
		
			
			Differential Revision: https://phabricator.services.mozilla.com/D44149 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			387 lines
		
	
	
	
		
			6.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			387 lines
		
	
	
	
		
			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]);
 | |
| }
 |