1*c8dee2aaSAndroid Build Coastguard Workerfunction ImageData(arr, width, height) { 2*c8dee2aaSAndroid Build Coastguard Worker if (!width || height === 0) { 3*c8dee2aaSAndroid Build Coastguard Worker throw new TypeError('invalid dimensions, width and height must be non-zero'); 4*c8dee2aaSAndroid Build Coastguard Worker } 5*c8dee2aaSAndroid Build Coastguard Worker if (arr.length % 4) { 6*c8dee2aaSAndroid Build Coastguard Worker throw new TypeError('arr must be a multiple of 4'); 7*c8dee2aaSAndroid Build Coastguard Worker } 8*c8dee2aaSAndroid Build Coastguard Worker height = height || arr.length/(4*width); 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker Object.defineProperty(this, 'data', { 11*c8dee2aaSAndroid Build Coastguard Worker value: arr, 12*c8dee2aaSAndroid Build Coastguard Worker writable: false 13*c8dee2aaSAndroid Build Coastguard Worker }); 14*c8dee2aaSAndroid Build Coastguard Worker Object.defineProperty(this, 'height', { 15*c8dee2aaSAndroid Build Coastguard Worker value: height, 16*c8dee2aaSAndroid Build Coastguard Worker writable: false 17*c8dee2aaSAndroid Build Coastguard Worker }); 18*c8dee2aaSAndroid Build Coastguard Worker Object.defineProperty(this, 'width', { 19*c8dee2aaSAndroid Build Coastguard Worker value: width, 20*c8dee2aaSAndroid Build Coastguard Worker writable: false 21*c8dee2aaSAndroid Build Coastguard Worker }); 22*c8dee2aaSAndroid Build Coastguard Worker} 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard WorkerCanvasKit.ImageData = function() { 25*c8dee2aaSAndroid Build Coastguard Worker if (arguments.length === 2) { 26*c8dee2aaSAndroid Build Coastguard Worker var width = arguments[0]; 27*c8dee2aaSAndroid Build Coastguard Worker var height = arguments[1]; 28*c8dee2aaSAndroid Build Coastguard Worker var byteLength = 4 * width * height; 29*c8dee2aaSAndroid Build Coastguard Worker return new ImageData(new Uint8ClampedArray(byteLength), 30*c8dee2aaSAndroid Build Coastguard Worker width, height); 31*c8dee2aaSAndroid Build Coastguard Worker } else if (arguments.length === 3) { 32*c8dee2aaSAndroid Build Coastguard Worker var arr = arguments[0]; 33*c8dee2aaSAndroid Build Coastguard Worker if (arr.prototype.constructor !== Uint8ClampedArray ) { 34*c8dee2aaSAndroid Build Coastguard Worker throw new TypeError('bytes must be given as a Uint8ClampedArray'); 35*c8dee2aaSAndroid Build Coastguard Worker } 36*c8dee2aaSAndroid Build Coastguard Worker var width = arguments[1]; 37*c8dee2aaSAndroid Build Coastguard Worker var height = arguments[2]; 38*c8dee2aaSAndroid Build Coastguard Worker if (arr % 4) { 39*c8dee2aaSAndroid Build Coastguard Worker throw new TypeError('bytes must be given in a multiple of 4'); 40*c8dee2aaSAndroid Build Coastguard Worker } 41*c8dee2aaSAndroid Build Coastguard Worker if (arr % width) { 42*c8dee2aaSAndroid Build Coastguard Worker throw new TypeError('bytes must divide evenly by width'); 43*c8dee2aaSAndroid Build Coastguard Worker } 44*c8dee2aaSAndroid Build Coastguard Worker if (height && (height !== (arr / (width * 4)))) { 45*c8dee2aaSAndroid Build Coastguard Worker throw new TypeError('invalid height given'); 46*c8dee2aaSAndroid Build Coastguard Worker } 47*c8dee2aaSAndroid Build Coastguard Worker height = arr / (width * 4); 48*c8dee2aaSAndroid Build Coastguard Worker return new ImageData(arr, width, height); 49*c8dee2aaSAndroid Build Coastguard Worker } else { 50*c8dee2aaSAndroid Build Coastguard Worker throw new TypeError('invalid number of arguments - takes 2 or 3, saw ' + arguments.length); 51*c8dee2aaSAndroid Build Coastguard Worker } 52*c8dee2aaSAndroid Build Coastguard Worker}