]> git.parisson.com Git - pdf.js.git/commitdiff
Merge remote-tracking branch 'agal/master'
authorsbarman <sbarman@L3CWZ5T.(none)>
Thu, 9 Jun 2011 21:59:15 +0000 (14:59 -0700)
committersbarman <sbarman@L3CWZ5T.(none)>
Thu, 9 Jun 2011 21:59:15 +0000 (14:59 -0700)
Conflicts:
pdf.js
test.html

1  2 
pdf.js

diff --cc pdf.js
index d8c51708bbae0ad4468e1aee9dcbd79114f01a7d,8f0b09e3506f994430fa19d324c26846c26b31d1..cdc8b66657cd3b500f2460c2049a10ffd240a180
--- 1/pdf.js
--- 2/pdf.js
+++ b/pdf.js
@@@ -368,9 -322,7 +368,10 @@@ var FlateStream = (function() 
              var bufferLength = this.bufferLength;
              var bufferPos = this.bufferPos;
              var n = 0;
 -            while (bufferPos < bufferLength)
++            
 +            // entire front of stream needs to be copied over since flate
 +            // looksback when decoding
 +            while (0 < bufferLength)
                  dest[n++] = this.buffer[bufferPos++];
              // now use dest as our buffer and fill it
              this.buffer = dest;
@@@ -2077,74 -1947,54 +2078,73 @@@ var CanvasGraphics = (function() 
              var tmpCanvas = document.createElement("canvas");
              tmpCanvas.width = w;
              tmpCanvas.height = h;
 +//            tmpCanvas.mozOpaque = false;
 +            var ctx = this.ctx;
              var tmpCtx = tmpCanvas.getContext("2d");
 +            tmpCtx.fillStyle = "rgb(255, 255, 255)";
 +            tmpCtx.fillRect(0, 0, w, h);
              var imgData = tmpCtx.getImageData(0, 0, w, h);
              var pixels = imgData.data;
 -
 -            // Read in image data
 -            image.snarf(pixels);
 -
 -            var alpha = 25;
 -            if (image.dict.has("SMask")) {
 -                var smask = image.dict.get("SMask");
 -                smask = this.xref.fetchIfRef(smask);
 -                // Specifies either a shape or opacity mask to be
 -                // applied to the image samples
 -                TODO("SMask");
 -            }
 -
 +            
              if (smask) {
 -                var smaskDict = smask.dict;
 -                if (!smaskDict)
 -                    error("No dictionary for smask");
 -                var smaskBitsPerComponent = smaskDict.get2("BitsPerComponent", "BPC");
 -                if (!smaskBitsPerComponent)
 -                    error("Bad BPC for smask");
 -                var max = (1 << bitsPerComponent) - 1;
 -
 -                var matte = smaskDict.get("Matte");
 -                if (matte) {
 -                    TODO(matte);
 +                if (maskColorSpace.numComps != 1)
 +                    error("Incorrect number of components in smask");
 +                
 +                var numComps = colorSpace.numComps;
 +                // factor in bits per component
 +                var imgArray = image.getBytes(numComps * w * h);
 +                var imgIdx = 0;
 +
 +                var smArray = smask.getBytes(w * h);
 +                var smIdx = 0;
 +               
 +                // hoist out loop end
 +                for (var i = 0; i < 4 * w * h; i+=4) {
 +                    var alpha = smArray[smIdx++];
 +                    var alphaComp = (1 << maskBPC) - 1 - alpha;
 +
 +                    switch (numComps) {
 +                    case 1:
 +                        var p = imgArray[imageIdx++]*alpha;
 +                        pixels[i] = (p + pixels[i]*alphaComp) >> maskBPC;
 +                        pixels[i+1] = (p + pixels[i+1]*alphaComp) >> maskBPC;
 +                        pixels[i+2] = (p + pixels[i+2]*alphaComp) >> maskBPC;
 +                        pixels[i+3] = 255;
 +                        break;
 +                    case 3:
 +                        pixels[i] = imgArray[imgIdx++]; //*alpha) >> maskBPC;
 +                        pixels[i+1] = imgArray[imgIdx++];//*alpha) >> maskBPC;
 +                        pixels[i+2] = imgArray[imgIdx++];//*alpha) >> maskBPC;
 +                        pixels[i+3] = alpha;
 +                        break;
 +                    default:
 +                        error("unhandled amount of components per pixel: " + numComps);
 +                    }
                  }
 -
 -                // read in mask data
 -                var mask = new Uint8Array(4 * w * h);
 -                smask.snarf(mask);
 -
 -                // and blend images with it
 -                var stop = 4 * w * h;
 -                for (var i = 0; i < stop; ++i)
 -                    pixels[i] = pixels[i] * mask[i] / max;
              } else {
 -                // TODO blend if SMask is a mask image
 -                var stop = 4 * w * h;
 -                for (var i = 3; i < stop; i += 4)
 -                    pixels[i] = alpha;
 +                var numComps = colorSpace.numComps;
 +                for (var i = 0; i < 4 * w * h; i+=4) {
 +                    switch (numComps) {
 +                    case 1:
 +                        var t = image.getByte();
 +                        pixels[i] = t;
 +                        pixels[i+1] = t;
 +                        pixels[i+2] = t;
 +                        pixels[i+3] = 255;
 +                        break;
 +                    case 3:
 +                        pixels[i] = image.getByte();
 +                        pixels[i+1] = image.getByte();
 +                        pixels[i+2] = image.getByte();
 +                        pixels[i+3] = 255;
 +                        break;
 +                    default:
 +                        error("unhandled amount of components per pixel: " + numComps);
 +                    }
 +                }
- >>>>>>> 496a6374c1ac04e
              }
              tmpCtx.putImageData(imgData, 0, 0);
 -
              this.ctx.drawImage(tmpCanvas, 0, 0);
 -
              this.restore();
          },