three-stdlib 2.6.3 → 2.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -108,11 +108,7 @@ UPNG.toRGBA8 = function (out) {
108
108
  if (frm.blend == 0) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 0);else if (frm.blend == 1) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 1);
109
109
  frms.push(img.buffer.slice(0));
110
110
 
111
- if (frm.dispose == 0) ; else if (frm.dispose == 1) {
112
- UPNG._copyTile(empty, fw, fh, img, w, h, fx, fy, 0);
113
- } else if (frm.dispose == 2) {
114
- for (var j = 0; j < len; j++) img[j] = prev[j];
115
- }
111
+ if (frm.dispose == 0) ; else if (frm.dispose == 1) UPNG._copyTile(empty, fw, fh, img, w, h, fx, fy, 0);else if (frm.dispose == 2) for (var j = 0; j < len; j++) img[j] = prev[j];
116
112
  }
117
113
 
118
114
  return frms;
@@ -133,60 +129,43 @@ UPNG.toRGBA8.decodeImage = function (data, w, h, out) {
133
129
  if (ctype == 6) {
134
130
  // RGB + alpha
135
131
  var qarea = area << 2;
136
-
137
- if (depth == 8) {
138
- for (var i = 0; i < qarea; i += 4) {
139
- bf[i] = data[i];
140
- bf[i + 1] = data[i + 1];
141
- bf[i + 2] = data[i + 2];
142
- bf[i + 3] = data[i + 3];
143
- }
132
+ if (depth == 8) for (var i = 0; i < qarea; i += 4) {
133
+ bf[i] = data[i];
134
+ bf[i + 1] = data[i + 1];
135
+ bf[i + 2] = data[i + 2];
136
+ bf[i + 3] = data[i + 3];
144
137
  }
145
-
146
- if (depth == 16) {
147
- for (var i = 0; i < qarea; i++) {
148
- bf[i] = data[i << 1];
149
- }
138
+ if (depth == 16) for (var i = 0; i < qarea; i++) {
139
+ bf[i] = data[i << 1];
150
140
  }
151
141
  } else if (ctype == 2) {
152
142
  // RGB
153
143
  var ts = out.tabs['tRNS'];
154
144
 
155
145
  if (ts == null) {
156
- if (depth == 8) {
157
- for (var i = 0; i < area; i++) {
158
- var ti = i * 3;
159
- bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti];
160
- }
146
+ if (depth == 8) for (var i = 0; i < area; i++) {
147
+ var ti = i * 3;
148
+ bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti];
161
149
  }
162
-
163
- if (depth == 16) {
164
- for (var i = 0; i < area; i++) {
165
- var ti = i * 6;
166
- bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti];
167
- }
150
+ if (depth == 16) for (var i = 0; i < area; i++) {
151
+ var ti = i * 6;
152
+ bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti];
168
153
  }
169
154
  } else {
170
155
  var tr = ts[0],
171
156
  tg = ts[1],
172
157
  tb = ts[2];
173
-
174
- if (depth == 8) {
175
- for (var i = 0; i < area; i++) {
176
- var qi = i << 2,
177
- ti = i * 3;
178
- bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti];
179
- if (data[ti] == tr && data[ti + 1] == tg && data[ti + 2] == tb) bf[qi + 3] = 0;
180
- }
158
+ if (depth == 8) for (var i = 0; i < area; i++) {
159
+ var qi = i << 2,
160
+ ti = i * 3;
161
+ bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti];
162
+ if (data[ti] == tr && data[ti + 1] == tg && data[ti + 2] == tb) bf[qi + 3] = 0;
181
163
  }
182
-
183
- if (depth == 16) {
184
- for (var i = 0; i < area; i++) {
185
- var qi = i << 2,
186
- ti = i * 6;
187
- bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti];
188
- if (rs(data, ti) == tr && rs(data, ti + 2) == tg && rs(data, ti + 4) == tb) bf[qi + 3] = 0;
189
- }
164
+ if (depth == 16) for (var i = 0; i < area; i++) {
165
+ var qi = i << 2,
166
+ ti = i * 6;
167
+ bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti];
168
+ if (rs(data, ti) == tr && rs(data, ti + 2) == tg && rs(data, ti + 4) == tb) bf[qi + 3] = 0;
190
169
  }
191
170
  }
192
171
  } else if (ctype == 3) {
@@ -195,61 +174,41 @@ UPNG.toRGBA8.decodeImage = function (data, w, h, out) {
195
174
  ap = out.tabs['tRNS'],
196
175
  tl = ap ? ap.length : 0; //console.log(p, ap);
197
176
 
198
- if (depth == 1) {
199
- for (var y = 0; y < h; y++) {
200
- var s0 = y * bpl,
201
- t0 = y * w;
202
-
203
- for (var i = 0; i < w; i++) {
204
- var qi = t0 + i << 2,
205
- j = data[s0 + (i >> 3)] >> 7 - ((i & 7) << 0) & 1,
206
- cj = 3 * j;
207
- bf[qi] = p[cj];
208
- bf[qi + 1] = p[cj + 1];
209
- bf[qi + 2] = p[cj + 2];
210
- bf[qi + 3] = j < tl ? ap[j] : 255;
211
- }
212
- }
213
- }
177
+ if (depth == 1) for (var y = 0; y < h; y++) {
178
+ var s0 = y * bpl,
179
+ t0 = y * w;
214
180
 
215
- if (depth == 2) {
216
- for (var y = 0; y < h; y++) {
217
- var s0 = y * bpl,
218
- t0 = y * w;
219
-
220
- for (var i = 0; i < w; i++) {
221
- var qi = t0 + i << 2,
222
- j = data[s0 + (i >> 2)] >> 6 - ((i & 3) << 1) & 3,
223
- cj = 3 * j;
224
- bf[qi] = p[cj];
225
- bf[qi + 1] = p[cj + 1];
226
- bf[qi + 2] = p[cj + 2];
227
- bf[qi + 3] = j < tl ? ap[j] : 255;
228
- }
181
+ for (var i = 0; i < w; i++) {
182
+ var qi = t0 + i << 2,
183
+ j = data[s0 + (i >> 3)] >> 7 - ((i & 7) << 0) & 1,
184
+ cj = 3 * j;
185
+ bf[qi] = p[cj];
186
+ bf[qi + 1] = p[cj + 1];
187
+ bf[qi + 2] = p[cj + 2];
188
+ bf[qi + 3] = j < tl ? ap[j] : 255;
229
189
  }
230
190
  }
191
+ if (depth == 2) for (var y = 0; y < h; y++) {
192
+ var s0 = y * bpl,
193
+ t0 = y * w;
231
194
 
232
- if (depth == 4) {
233
- for (var y = 0; y < h; y++) {
234
- var s0 = y * bpl,
235
- t0 = y * w;
236
-
237
- for (var i = 0; i < w; i++) {
238
- var qi = t0 + i << 2,
239
- j = data[s0 + (i >> 1)] >> 4 - ((i & 1) << 2) & 15,
240
- cj = 3 * j;
241
- bf[qi] = p[cj];
242
- bf[qi + 1] = p[cj + 1];
243
- bf[qi + 2] = p[cj + 2];
244
- bf[qi + 3] = j < tl ? ap[j] : 255;
245
- }
195
+ for (var i = 0; i < w; i++) {
196
+ var qi = t0 + i << 2,
197
+ j = data[s0 + (i >> 2)] >> 6 - ((i & 3) << 1) & 3,
198
+ cj = 3 * j;
199
+ bf[qi] = p[cj];
200
+ bf[qi + 1] = p[cj + 1];
201
+ bf[qi + 2] = p[cj + 2];
202
+ bf[qi + 3] = j < tl ? ap[j] : 255;
246
203
  }
247
204
  }
205
+ if (depth == 4) for (var y = 0; y < h; y++) {
206
+ var s0 = y * bpl,
207
+ t0 = y * w;
248
208
 
249
- if (depth == 8) {
250
- for (var i = 0; i < area; i++) {
251
- var qi = i << 2,
252
- j = data[i],
209
+ for (var i = 0; i < w; i++) {
210
+ var qi = t0 + i << 2,
211
+ j = data[s0 + (i >> 1)] >> 4 - ((i & 1) << 2) & 15,
253
212
  cj = 3 * j;
254
213
  bf[qi] = p[cj];
255
214
  bf[qi + 1] = p[cj + 1];
@@ -257,30 +216,34 @@ UPNG.toRGBA8.decodeImage = function (data, w, h, out) {
257
216
  bf[qi + 3] = j < tl ? ap[j] : 255;
258
217
  }
259
218
  }
219
+ if (depth == 8) for (var i = 0; i < area; i++) {
220
+ var qi = i << 2,
221
+ j = data[i],
222
+ cj = 3 * j;
223
+ bf[qi] = p[cj];
224
+ bf[qi + 1] = p[cj + 1];
225
+ bf[qi + 2] = p[cj + 2];
226
+ bf[qi + 3] = j < tl ? ap[j] : 255;
227
+ }
260
228
  } else if (ctype == 4) {
261
229
  // gray + alpha
262
- if (depth == 8) {
263
- for (var i = 0; i < area; i++) {
264
- var qi = i << 2,
265
- di = i << 1,
266
- gr = data[di];
267
- bf[qi] = gr;
268
- bf[qi + 1] = gr;
269
- bf[qi + 2] = gr;
270
- bf[qi + 3] = data[di + 1];
271
- }
230
+ if (depth == 8) for (var i = 0; i < area; i++) {
231
+ var qi = i << 2,
232
+ di = i << 1,
233
+ gr = data[di];
234
+ bf[qi] = gr;
235
+ bf[qi + 1] = gr;
236
+ bf[qi + 2] = gr;
237
+ bf[qi + 3] = data[di + 1];
272
238
  }
273
-
274
- if (depth == 16) {
275
- for (var i = 0; i < area; i++) {
276
- var qi = i << 2,
277
- di = i << 2,
278
- gr = data[di];
279
- bf[qi] = gr;
280
- bf[qi + 1] = gr;
281
- bf[qi + 2] = gr;
282
- bf[qi + 3] = data[di + 2];
283
- }
239
+ if (depth == 16) for (var i = 0; i < area; i++) {
240
+ var qi = i << 2,
241
+ di = i << 2,
242
+ gr = data[di];
243
+ bf[qi] = gr;
244
+ bf[qi + 1] = gr;
245
+ bf[qi + 2] = gr;
246
+ bf[qi + 3] = data[di + 2];
284
247
  }
285
248
  } else if (ctype == 0) {
286
249
  // gray
@@ -289,37 +252,26 @@ UPNG.toRGBA8.decodeImage = function (data, w, h, out) {
289
252
  for (var y = 0; y < h; y++) {
290
253
  var off = y * bpl,
291
254
  to = y * w;
292
-
293
- if (depth == 1) {
294
- for (var x = 0; x < w; x++) {
295
- var gr = 255 * (data[off + (x >>> 3)] >>> 7 - (x & 7) & 1),
296
- al = gr == tr * 255 ? 0 : 255;
297
- bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
298
- }
299
- } else if (depth == 2) {
300
- for (var x = 0; x < w; x++) {
301
- var gr = 85 * (data[off + (x >>> 2)] >>> 6 - ((x & 3) << 1) & 3),
302
- al = gr == tr * 85 ? 0 : 255;
303
- bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
304
- }
305
- } else if (depth == 4) {
306
- for (var x = 0; x < w; x++) {
307
- var gr = 17 * (data[off + (x >>> 1)] >>> 4 - ((x & 1) << 2) & 15),
308
- al = gr == tr * 17 ? 0 : 255;
309
- bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
310
- }
311
- } else if (depth == 8) {
312
- for (var x = 0; x < w; x++) {
313
- var gr = data[off + x],
314
- al = gr == tr ? 0 : 255;
315
- bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
316
- }
317
- } else if (depth == 16) {
318
- for (var x = 0; x < w; x++) {
319
- var gr = data[off + (x << 1)],
320
- al = rs(data, off + (x << i)) == tr ? 0 : 255;
321
- bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
322
- }
255
+ if (depth == 1) for (var x = 0; x < w; x++) {
256
+ var gr = 255 * (data[off + (x >>> 3)] >>> 7 - (x & 7) & 1),
257
+ al = gr == tr * 255 ? 0 : 255;
258
+ bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
259
+ } else if (depth == 2) for (var x = 0; x < w; x++) {
260
+ var gr = 85 * (data[off + (x >>> 2)] >>> 6 - ((x & 3) << 1) & 3),
261
+ al = gr == tr * 85 ? 0 : 255;
262
+ bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
263
+ } else if (depth == 4) for (var x = 0; x < w; x++) {
264
+ var gr = 17 * (data[off + (x >>> 1)] >>> 4 - ((x & 1) << 2) & 15),
265
+ al = gr == tr * 17 ? 0 : 255;
266
+ bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
267
+ } else if (depth == 8) for (var x = 0; x < w; x++) {
268
+ var gr = data[off + x],
269
+ al = gr == tr ? 0 : 255;
270
+ bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
271
+ } else if (depth == 16) for (var x = 0; x < w; x++) {
272
+ var gr = data[off + (x << 1)],
273
+ al = rs(data, off + (x << 1)) == tr ? 0 : 255;
274
+ bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
323
275
  }
324
276
  }
325
277
  } //console.log(Date.now()-time);
@@ -407,15 +359,11 @@ UPNG.decode = function (buff) {
407
359
  var keyw = bin.readASCII(data, offset, nz - offset);
408
360
  var text,
409
361
  tl = offset + len - nz - 1;
410
-
411
- if (type == 'tEXt') {
412
- text = bin.readASCII(data, nz + 1, tl);
413
- } else {
362
+ if (type == 'tEXt') text = bin.readASCII(data, nz + 1, tl);else {
414
363
  var bfr = UPNG.decode._inflate(data.slice(nz + 2, nz + 2 + tl));
415
364
 
416
365
  text = bin.readUTF8(bfr, 0, bfr.length);
417
366
  }
418
-
419
367
  out.tabs[type][keyw] = text;
420
368
  } else if (type == 'iTXt') {
421
369
  if (out.tabs[type] == null) out.tabs[type] = {};
@@ -434,15 +382,11 @@ UPNG.decode = function (buff) {
434
382
  off = nz + 1;
435
383
  var text,
436
384
  tl = len - (off - offset);
437
-
438
- if (cflag == 0) {
439
- text = bin.readUTF8(data, off, tl);
440
- } else {
385
+ if (cflag == 0) text = bin.readUTF8(data, off, tl);else {
441
386
  var bfr = UPNG.decode._inflate(data.slice(off, off + tl));
442
387
 
443
388
  text = bin.readUTF8(bfr, 0, bfr.length);
444
389
  }
445
-
446
390
  out.tabs[type][keyw] = text;
447
391
  } else if (type == 'PLTE') {
448
392
  out.tabs[type] = bin.readBytes(data, offset, len);
@@ -453,21 +397,11 @@ UPNG.decode = function (buff) {
453
397
  for (var i = 0; i < pl; i++) out.tabs[type].push(rUs(data, offset + i * 2));
454
398
  } else if (type == 'tRNS') {
455
399
  if (out.ctype == 3) out.tabs[type] = bin.readBytes(data, offset, len);else if (out.ctype == 0) out.tabs[type] = rUs(data, offset);else if (out.ctype == 2) out.tabs[type] = [rUs(data, offset), rUs(data, offset + 2), rUs(data, offset + 4)]; //else console.log("tRNS for unsupported color type",out.ctype, len);
456
- } else if (type == 'gAMA') {
457
- out.tabs[type] = bin.readUint(data, offset) / 100000;
458
- } else if (type == 'sRGB') {
459
- out.tabs[type] = data[offset];
460
- } else if (type == 'bKGD') {
461
- if (out.ctype == 0 || out.ctype == 4) {
462
- out.tabs[type] = [rUs(data, offset)];
463
- } else if (out.ctype == 2 || out.ctype == 6) {
464
- out.tabs[type] = [rUs(data, offset), rUs(data, offset + 2), rUs(data, offset + 4)];
465
- } else if (out.ctype == 3) {
466
- out.tabs[type] = data[offset];
467
- }
400
+ } else if (type == 'gAMA') out.tabs[type] = bin.readUint(data, offset) / 100000;else if (type == 'sRGB') out.tabs[type] = data[offset];else if (type == 'bKGD') {
401
+ if (out.ctype == 0 || out.ctype == 4) out.tabs[type] = [rUs(data, offset)];else if (out.ctype == 2 || out.ctype == 6) out.tabs[type] = [rUs(data, offset), rUs(data, offset + 2), rUs(data, offset + 4)];else if (out.ctype == 3) out.tabs[type] = data[offset];
468
402
  } else if (type == 'IEND') {
469
403
  break;
470
- } //else { log("unknown chunk type", type, len); }
404
+ } //else { console.log("unknown chunk type", type, len); out.tabs[type]=data.slice(offset,offset+len); }
471
405
 
472
406
 
473
407
  offset += len;
@@ -478,7 +412,6 @@ UPNG.decode = function (buff) {
478
412
  if (foff != 0) {
479
413
  var fr = out.frames[out.frames.length - 1];
480
414
  fr.data = UPNG.decode._decompress(out, fd.slice(0, foff), fr.rect.width, fr.rect.height);
481
- foff = 0;
482
415
  }
483
416
 
484
417
  out.data = UPNG.decode._decompress(out, dd, out.width, out.height);
@@ -740,20 +673,18 @@ UPNG.inflateRaw = function () {
740
673
  n = H.H.m,
741
674
  A = n.r;
742
675
 
743
- for (var l = 0; l < V; l += 2) {
744
- if (N[l + 1] != 0) {
745
- var M = l >> 1,
746
- I = N[l + 1],
747
- e = M << 4 | I,
748
- b = W - I,
749
- Z = N[l] << b,
750
- m = Z + (1 << b);
751
-
752
- while (Z != m) {
753
- var J = A[Z] >>> 15 - W;
754
- R[J] = e;
755
- Z++;
756
- }
676
+ for (var l = 0; l < V; l += 2) if (N[l + 1] != 0) {
677
+ var M = l >> 1,
678
+ I = N[l + 1],
679
+ e = M << 4 | I,
680
+ b = W - I,
681
+ Z = N[l] << b,
682
+ m = Z + (1 << b);
683
+
684
+ while (Z != m) {
685
+ var J = A[Z] >>> 15 - W;
686
+ R[J] = e;
687
+ Z++;
757
688
  }
758
689
  }
759
690
  };
@@ -972,8 +903,8 @@ UPNG.decode._filterZero = function (data, out, off, w, h) {
972
903
  paeth = UPNG.decode._paeth;
973
904
 
974
905
  bpp = Math.ceil(bpp / 8);
975
- var i = 0,
976
- di = 1,
906
+ var i,
907
+ di,
977
908
  type = data[off],
978
909
  x = 0;
979
910
  if (type > 1) data[off] = [0, 0, 1][type - 2];
@@ -984,10 +915,7 @@ UPNG.decode._filterZero = function (data, out, off, w, h) {
984
915
  di = i + y + 1;
985
916
  type = data[di - 1];
986
917
  x = 0;
987
-
988
- if (type == 0) {
989
- for (; x < bpl; x++) data[i + x] = data[di + x];
990
- } else if (type == 1) {
918
+ if (type == 0) for (; x < bpl; x++) data[i + x] = data[di + x];else if (type == 1) {
991
919
  for (; x < bpp; x++) data[i + x] = data[di + x];
992
920
 
993
921
  for (; x < bpl; x++) data[i + x] = data[di + x] + data[i + x - bpp];
@@ -1000,9 +928,7 @@ UPNG.decode._filterZero = function (data, out, off, w, h) {
1000
928
  } else {
1001
929
  for (; x < bpp; x++) data[i + x] = data[di + x] + paeth(0, data[i + x - bpl], 0);
1002
930
 
1003
- for (; x < bpl; x++) {
1004
- data[i + x] = data[di + x] + paeth(data[i + x - bpp], data[i + x - bpl], data[i + x - bpp - bpl]);
1005
- }
931
+ for (; x < bpl; x++) data[i + x] = data[di + x] + paeth(data[i + x - bpp], data[i + x - bpl], data[i + x - bpp - bpl]);
1006
932
  }
1007
933
  }
1008
934
 
@@ -1100,73 +1026,71 @@ UPNG._copyTile = function (sb, sw, sh, tb, tw, th, xoff, yoff, mode) {
1100
1026
  var si = 0,
1101
1027
  ti = 0;
1102
1028
 
1103
- for (var y = 0; y < h; y++) {
1104
- for (var x = 0; x < w; x++) {
1105
- if (xoff >= 0 && yoff >= 0) {
1106
- si = y * sw + x << 2;
1107
- ti = (yoff + y) * tw + xoff + x << 2;
1108
- } else {
1109
- si = (-yoff + y) * sw - xoff + x << 2;
1110
- ti = y * tw + x << 2;
1111
- }
1029
+ for (var y = 0; y < h; y++) for (var x = 0; x < w; x++) {
1030
+ if (xoff >= 0 && yoff >= 0) {
1031
+ si = y * sw + x << 2;
1032
+ ti = (yoff + y) * tw + xoff + x << 2;
1033
+ } else {
1034
+ si = (-yoff + y) * sw - xoff + x << 2;
1035
+ ti = y * tw + x << 2;
1036
+ }
1112
1037
 
1113
- if (mode == 0) {
1114
- tb[ti] = sb[si];
1115
- tb[ti + 1] = sb[si + 1];
1116
- tb[ti + 2] = sb[si + 2];
1117
- tb[ti + 3] = sb[si + 3];
1118
- } else if (mode == 1) {
1119
- var fa = sb[si + 3] * (1 / 255),
1120
- fr = sb[si] * fa,
1121
- fg = sb[si + 1] * fa,
1122
- fb = sb[si + 2] * fa;
1123
- var ba = tb[ti + 3] * (1 / 255),
1124
- br = tb[ti] * ba,
1125
- bg = tb[ti + 1] * ba,
1126
- bb = tb[ti + 2] * ba;
1127
- var ifa = 1 - fa,
1128
- oa = fa + ba * ifa,
1129
- ioa = oa == 0 ? 0 : 1 / oa;
1130
- tb[ti + 3] = 255 * oa;
1131
- tb[ti + 0] = (fr + br * ifa) * ioa;
1132
- tb[ti + 1] = (fg + bg * ifa) * ioa;
1133
- tb[ti + 2] = (fb + bb * ifa) * ioa;
1134
- } else if (mode == 2) {
1135
- // copy only differences, otherwise zero
1136
- var fa = sb[si + 3],
1137
- fr = sb[si],
1138
- fg = sb[si + 1],
1139
- fb = sb[si + 2];
1140
- var ba = tb[ti + 3],
1141
- br = tb[ti],
1142
- bg = tb[ti + 1],
1143
- bb = tb[ti + 2];
1144
-
1145
- if (fa == ba && fr == br && fg == bg && fb == bb) {
1146
- tb[ti] = 0;
1147
- tb[ti + 1] = 0;
1148
- tb[ti + 2] = 0;
1149
- tb[ti + 3] = 0;
1150
- } else {
1151
- tb[ti] = fr;
1152
- tb[ti + 1] = fg;
1153
- tb[ti + 2] = fb;
1154
- tb[ti + 3] = fa;
1155
- }
1156
- } else if (mode == 3) {
1157
- // check if can be blended
1158
- var fa = sb[si + 3],
1159
- fr = sb[si],
1160
- fg = sb[si + 1],
1161
- fb = sb[si + 2];
1162
- var ba = tb[ti + 3],
1163
- br = tb[ti],
1164
- bg = tb[ti + 1],
1165
- bb = tb[ti + 2];
1166
- if (fa == ba && fr == br && fg == bg && fb == bb) continue; //if(fa!=255 && ba!=0) return false;
1167
-
1168
- if (fa < 220 && ba > 20) return false;
1038
+ if (mode == 0) {
1039
+ tb[ti] = sb[si];
1040
+ tb[ti + 1] = sb[si + 1];
1041
+ tb[ti + 2] = sb[si + 2];
1042
+ tb[ti + 3] = sb[si + 3];
1043
+ } else if (mode == 1) {
1044
+ var fa = sb[si + 3] * (1 / 255),
1045
+ fr = sb[si] * fa,
1046
+ fg = sb[si + 1] * fa,
1047
+ fb = sb[si + 2] * fa;
1048
+ var ba = tb[ti + 3] * (1 / 255),
1049
+ br = tb[ti] * ba,
1050
+ bg = tb[ti + 1] * ba,
1051
+ bb = tb[ti + 2] * ba;
1052
+ var ifa = 1 - fa,
1053
+ oa = fa + ba * ifa,
1054
+ ioa = oa == 0 ? 0 : 1 / oa;
1055
+ tb[ti + 3] = 255 * oa;
1056
+ tb[ti + 0] = (fr + br * ifa) * ioa;
1057
+ tb[ti + 1] = (fg + bg * ifa) * ioa;
1058
+ tb[ti + 2] = (fb + bb * ifa) * ioa;
1059
+ } else if (mode == 2) {
1060
+ // copy only differences, otherwise zero
1061
+ var fa = sb[si + 3],
1062
+ fr = sb[si],
1063
+ fg = sb[si + 1],
1064
+ fb = sb[si + 2];
1065
+ var ba = tb[ti + 3],
1066
+ br = tb[ti],
1067
+ bg = tb[ti + 1],
1068
+ bb = tb[ti + 2];
1069
+
1070
+ if (fa == ba && fr == br && fg == bg && fb == bb) {
1071
+ tb[ti] = 0;
1072
+ tb[ti + 1] = 0;
1073
+ tb[ti + 2] = 0;
1074
+ tb[ti + 3] = 0;
1075
+ } else {
1076
+ tb[ti] = fr;
1077
+ tb[ti + 1] = fg;
1078
+ tb[ti + 2] = fb;
1079
+ tb[ti + 3] = fa;
1169
1080
  }
1081
+ } else if (mode == 3) {
1082
+ // check if can be blended
1083
+ var fa = sb[si + 3],
1084
+ fr = sb[si],
1085
+ fg = sb[si + 1],
1086
+ fb = sb[si + 2];
1087
+ var ba = tb[ti + 3],
1088
+ br = tb[ti],
1089
+ bg = tb[ti + 1],
1090
+ bb = tb[ti + 2];
1091
+ if (fa == ba && fr == br && fg == bg && fb == bb) continue; //if(fa!=255 && ba!=0) return false;
1092
+
1093
+ if (fa < 220 && ba > 20) return false;
1170
1094
  }
1171
1095
  }
1172
1096