JBIG2 20% faster SimpleSegmentVisitor_drawBitmap

Moved the switch(combinationOperator) outside the width and height loops
Check bitmap[i][j] before applying the switch(combinationOperator)
This commit is contained in:
p01 2014-03-03 11:52:24 +01:00
parent 1c0e1cc591
commit e862c64bb8

View File

@ -938,34 +938,42 @@ 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;
for (var i = 0; i < height; i++) { switch (combinationOperator) {
var mask = 128 >> (regionInfo.x & 7); case 0: // OR
var offset = (i + regionInfo.y) * rowSize + (regionInfo.x >> 3); for (var i = 0; i < height; i++) {
switch (combinationOperator) { var mask = 128 >> (regionInfo.x & 7);
case 0: // OR 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; }
case 2: // XOR break;
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; }
default: break;
error('JBIG2 error: operator ' + combinationOperator + default:
' is not supported'); error('JBIG2 error: operator ' + combinationOperator +
} ' is not supported');
} }
}, },
onImmediateGenericRegion: onImmediateGenericRegion: