Browse Source

JBIG2 20% faster SimpleSegmentVisitor_drawBitmap

Moved the switch(combinationOperator) outside the width and height loops
Check bitmap[i][j] before applying the switch(combinationOperator)
p01 11 years ago
parent
commit
e862c64bb8
  1. 18
      src/core/jbig2.js

18
src/core/jbig2.js

@ -938,35 +938,43 @@ var Jbig2Image = (function Jbig2ImageClosure() {
var combinationOperator = pageInfo.combinationOperatorOverride ? var combinationOperator = pageInfo.combinationOperatorOverride ?
regionInfo.combinationOperator : pageInfo.combinationOperator; regionInfo.combinationOperator : pageInfo.combinationOperator;
var buffer = this.buffer; var buffer = this.buffer;
switch (combinationOperator) {
case 0: // OR
for (var i = 0; i < height; i++) { for (var i = 0; i < height; i++) {
var mask = 128 >> (regionInfo.x & 7); var mask = 128 >> (regionInfo.x & 7);
var offset = (i + regionInfo.y) * rowSize + (regionInfo.x >> 3); var offset = (i + regionInfo.y) * rowSize + (regionInfo.x >> 3);
switch (combinationOperator) {
case 0: // OR
for (var j = 0; j < width; j++) { for (var j = 0; j < width; j++) {
buffer[offset] |= bitmap[i][j] ? mask : 0; if (bitmap[i][j]) {
buffer[offset] |= mask;
}
mask >>= 1; mask >>= 1;
if (!mask) { if (!mask) {
mask = 128; mask = 128;
offset++; offset++;
} }
} }
}
break; break;
case 2: // XOR case 2: // XOR
for (var i = 0; i < height; i++) {
var mask = 128 >> (regionInfo.x & 7);
var offset = (i + regionInfo.y) * rowSize + (regionInfo.x >> 3);
for (var j = 0; j < width; j++) { for (var j = 0; j < width; j++) {
buffer[offset] ^= bitmap[i][j] ? mask : 0; if (bitmap[i][j]) {
buffer[offset] ^= mask;
}
mask >>= 1; mask >>= 1;
if (!mask) { if (!mask) {
mask = 128; mask = 128;
offset++; offset++;
} }
} }
}
break; break;
default: default:
error('JBIG2 error: operator ' + combinationOperator + error('JBIG2 error: operator ' + combinationOperator +
' is not supported'); ' is not supported');
} }
}
}, },
onImmediateGenericRegion: onImmediateGenericRegion:
function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, function SimpleSegmentVisitor_onImmediateGenericRegion(region, data,

Loading…
Cancel
Save