stencil mask: height * width optimization and decode inversion
This commit is contained in:
parent
9bc76da676
commit
01e2f81a49
26
pdf.js
26
pdf.js
@ -4889,9 +4889,13 @@ var CanvasGraphics = (function() {
|
|||||||
var imgData = tmpCtx.getImageData(0, 0, w, h);
|
var imgData = tmpCtx.getImageData(0, 0, w, h);
|
||||||
var pixels = imgData.data;
|
var pixels = imgData.data;
|
||||||
|
|
||||||
if (imageObj.imageMask)
|
if (imageObj.imageMask) {
|
||||||
imageObj.fillUsingStencilMask(pixels, this.current.fillColor);
|
var inverseDecode = imageObj.decode && imageObj.decode[0] > 0;
|
||||||
else
|
// TODO fillColor pattern support
|
||||||
|
var fillColor = this.current.fillColor;
|
||||||
|
imageObj.fillUsingStencilMask(pixels, fillColor,
|
||||||
|
inverseDecode);
|
||||||
|
} else
|
||||||
imageObj.fillRgbaBuffer(pixels);
|
imageObj.fillRgbaBuffer(pixels);
|
||||||
|
|
||||||
tmpCtx.putImageData(imgData, 0, 0);
|
tmpCtx.putImageData(imgData, 0, 0);
|
||||||
@ -5768,19 +5772,18 @@ var PDFImage = (function() {
|
|||||||
}
|
}
|
||||||
return buf;
|
return buf;
|
||||||
},
|
},
|
||||||
fillUsingStencilMask: function fillUsingStencilMask(buffer, cssRgb) {
|
fillUsingStencilMask: function fillUsingStencilMask(buffer,
|
||||||
|
cssRgb, inverseDecode) {
|
||||||
var m = /rgb\((\d+),(\d+),(\d+)\)/.exec(cssRgb); // parse CSS color
|
var m = /rgb\((\d+),(\d+),(\d+)\)/.exec(cssRgb); // parse CSS color
|
||||||
var r = m[1] | 0, g = m[2] | 0, b = m[3] | 0;
|
var r = m[1] | 0, g = m[2] | 0, b = m[3] | 0;
|
||||||
var width = this.width;
|
var bufferLength = this.width * this.height;
|
||||||
var height = this.height;
|
var imgArray = this.image.getBytes((bufferLength + 7) >> 3);
|
||||||
var imgArray = this.image.getBytes((height * width + 7) >> 3);
|
var i, mask;
|
||||||
var i, j, mask;
|
|
||||||
var bufferPos = 0, imgArrayPos = 0;
|
var bufferPos = 0, imgArrayPos = 0;
|
||||||
for (i = 0; i < height; i++) {
|
for (i = 0; i < bufferLength; i++) {
|
||||||
for (j = 0; j < width; j++) {
|
|
||||||
var buf = imgArray[imgArrayPos++];
|
var buf = imgArray[imgArrayPos++];
|
||||||
for (mask = 128; mask > 0; mask >>= 1) {
|
for (mask = 128; mask > 0; mask >>= 1) {
|
||||||
if (buf & mask) {
|
if (!(buf & mask) != inverseDecode) {
|
||||||
buffer[bufferPos++] = r;
|
buffer[bufferPos++] = r;
|
||||||
buffer[bufferPos++] = g;
|
buffer[bufferPos++] = g;
|
||||||
buffer[bufferPos++] = b;
|
buffer[bufferPos++] = b;
|
||||||
@ -5791,7 +5794,6 @@ var PDFImage = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
},
|
},
|
||||||
fillRgbaBuffer: function fillRgbaBuffer(buffer) {
|
fillRgbaBuffer: function fillRgbaBuffer(buffer) {
|
||||||
var numComps = this.numComps;
|
var numComps = this.numComps;
|
||||||
|
Loading…
Reference in New Issue
Block a user