You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
1.9 KiB
87 lines
1.9 KiB
'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 |
|
|
|
|
|
var 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) { |
|
var images = []; |
|
var xLeftOver = width % 8; |
|
var yLeftOver = height % 8; |
|
var xRepeats = (width - xLeftOver) / 8; |
|
var yRepeats = (height - yLeftOver) / 8; |
|
for (var i = 0; i < imagePasses.length; i++) { |
|
var pass = imagePasses[i]; |
|
var passWidth = xRepeats * pass.x.length; |
|
var passHeight = yRepeats * pass.y.length; |
|
for (var j = 0; j < pass.x.length; j++) { |
|
if (pass.x[j] < xLeftOver) { |
|
passWidth++; |
|
} |
|
else { |
|
break; |
|
} |
|
} |
|
for (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) { |
|
var outerXLeftOver = x % imagePasses[pass].x.length; |
|
var outerX = (((x - outerXLeftOver) / imagePasses[pass].x.length) * 8) + imagePasses[pass].x[outerXLeftOver]; |
|
var outerYLeftOver = y % imagePasses[pass].y.length; |
|
var outerY = (((y - outerYLeftOver) / imagePasses[pass].y.length) * 8) + imagePasses[pass].y[outerYLeftOver]; |
|
return (outerX * 4) + (outerY * width * 4); |
|
}; |
|
}; |