-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathimageSet.js
104 lines (80 loc) · 2.23 KB
/
imageSet.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
function ImageSet(palette)
{
this.palette = palette;
this.width = 0;
this.height = 0;
this.frames = new Array();
this.xPos = 0;
this.yPos = 0;
var self = this;
this.copyTo = function(destImg, frameIndex, destX, destY, maskColorIndex)
{
var pal = self.palette;
if ((typeof pal === "undefined") || (typeof pal[0] === "undefined") )
{
console.log("no palette defined!");
return;
}
if (typeof maskColorIndex === "undefined") maskColorIndex = 0;
var w = self.width;
var h = self.height;
var pixBuf = self.frames[frameIndex];
var imgData = destImg.data;
var destW = destImg.width;
var destH = destImg.height;
for (var y = 0; y < h; y++)
{
var outY = y + destY;
if ((outY < 0) || (outY >= destH)) continue;
for (var x = 0; x < w; x++)
{
var outX = x + destX;
if ((outX < 0) || (outX >= destW)) continue;
var colorIndex = pixBuf[y * w + x];
if (colorIndex == maskColorIndex) continue;
var color = pal[colorIndex];
var i = (outY * destW + outX) * 4;
imgData[i + 0] = color[0]; //- R
imgData[i + 1] = color[1]; //- G
imgData[i + 2] = color[2]; //- B
imgData[i + 3] = 255; //- Alpha
}
}
}
this.loadFromFile = function(fr, bitsPerPixle, width, height, frames, colorIndexOffset)
{
var bitBuf = 0;
var bitBufLen = 0;
var pixCount = width * height;
self.width = width;
self.height = height;
if (typeof colorIndexOffset === "undefined") colorIndexOffset = 0;
for (f = 0; f < frames; f++)
{
var pixBuf = new Uint8Array(pixCount);
//- read pixle data
for (var i = 0; i < bitsPerPixle; i++)
{
for (var p = 0; p < pixCount; p++)
{
if (bitBufLen <= 0)
{
bitBuf = fr.readByte();
bitBufLen = 8
}
pixBuf[p] = pixBuf[p] | ((bitBuf & 0x80) >> (7 - i));
bitBuf = (bitBuf << 1);
bitBufLen--;
}
}
if (colorIndexOffset != 0)
{
for (var p = 0; p < pixCount; p++)
{
if (pixBuf[p] > 0) pixBuf[p] += colorIndexOffset;
}
}
self.frames.push(pixBuf);
}
}
}