three-stdlib 2.6.3 → 2.6.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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