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 ?
regionInfo.combinationOperator : pageInfo.combinationOperator;
var buffer = this.buffer;
for (var i = 0; i < height; i++) {
var mask = 128 >> (regionInfo.x & 7);
var offset = (i + regionInfo.y) * rowSize + (regionInfo.x >> 3);
switch (combinationOperator) {
case 0: // OR
switch (combinationOperator) {
case 0: // OR
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++) {
buffer[offset] |= bitmap[i][j] ? mask : 0;
if (bitmap[i][j]) {
buffer[offset] |= mask;
}
mask >>= 1;
if (!mask) {
mask = 128;
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++) {
buffer[offset] ^= bitmap[i][j] ? mask : 0;
if (bitmap[i][j]) {
buffer[offset] ^= mask;
}
mask >>= 1;
if (!mask) {
mask = 128;
offset++;
}
}
break;
default:
error('JBIG2 error: operator ' + combinationOperator +
' is not supported');
}
}
break;
default:
error('JBIG2 error: operator ' + combinationOperator +
' is not supported');
}
},
onImmediateGenericRegion: