1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- "use strict";
- // Adam 7
- // 0 1 2 3 4 5 6 7
- // 0 x 6 4 6 x 6 4 6
- // 1 7 7 7 7 7 7 7 7
- // 2 5 6 5 6 5 6 5 6
- // 3 7 7 7 7 7 7 7 7
- // 4 3 6 4 6 3 6 4 6
- // 5 7 7 7 7 7 7 7 7
- // 6 5 6 5 6 5 6 5 6
- // 7 7 7 7 7 7 7 7 7
- let imagePasses = [
- {
- // pass 1 - 1px
- x: [0],
- y: [0],
- },
- {
- // pass 2 - 1px
- x: [4],
- y: [0],
- },
- {
- // pass 3 - 2px
- x: [0, 4],
- y: [4],
- },
- {
- // pass 4 - 4px
- x: [2, 6],
- y: [0, 4],
- },
- {
- // pass 5 - 8px
- x: [0, 2, 4, 6],
- y: [2, 6],
- },
- {
- // pass 6 - 16px
- x: [1, 3, 5, 7],
- y: [0, 2, 4, 6],
- },
- {
- // pass 7 - 32px
- x: [0, 1, 2, 3, 4, 5, 6, 7],
- y: [1, 3, 5, 7],
- },
- ];
- exports.getImagePasses = function (width, height) {
- let images = [];
- let xLeftOver = width % 8;
- let yLeftOver = height % 8;
- let xRepeats = (width - xLeftOver) / 8;
- let yRepeats = (height - yLeftOver) / 8;
- for (let i = 0; i < imagePasses.length; i++) {
- let pass = imagePasses[i];
- let passWidth = xRepeats * pass.x.length;
- let passHeight = yRepeats * pass.y.length;
- for (let j = 0; j < pass.x.length; j++) {
- if (pass.x[j] < xLeftOver) {
- passWidth++;
- } else {
- break;
- }
- }
- for (let j = 0; j < pass.y.length; j++) {
- if (pass.y[j] < yLeftOver) {
- passHeight++;
- } else {
- break;
- }
- }
- if (passWidth > 0 && passHeight > 0) {
- images.push({ width: passWidth, height: passHeight, index: i });
- }
- }
- return images;
- };
- exports.getInterlaceIterator = function (width) {
- return function (x, y, pass) {
- let outerXLeftOver = x % imagePasses[pass].x.length;
- let outerX =
- ((x - outerXLeftOver) / imagePasses[pass].x.length) * 8 +
- imagePasses[pass].x[outerXLeftOver];
- let outerYLeftOver = y % imagePasses[pass].y.length;
- let outerY =
- ((y - outerYLeftOver) / imagePasses[pass].y.length) * 8 +
- imagePasses[pass].y[outerYLeftOver];
- return outerX * 4 + outerY * width * 4;
- };
- };
|