]> git.parisson.com Git - pdf.js.git/commitdiff
Merge commit '496a6374c1ac04e'
authorsbarman <sbarman@L3CWZ5T.(none)>
Thu, 9 Jun 2011 21:42:31 +0000 (14:42 -0700)
committersbarman <sbarman@L3CWZ5T.(none)>
Thu, 9 Jun 2011 21:42:31 +0000 (14:42 -0700)
Conflicts:
pdf.js

1  2 
pdf.js

diff --cc pdf.js
index 8e1cf904a1975b673c7ed6b3abf038e2256c1fed,cc5f3f190d64da7d2d277b7d8bb784ec0dfe71d4..a7da657611169fefed3cf9576545520a6a25b6c1
--- 1/pdf.js
--- 2/pdf.js
+++ b/pdf.js
@@@ -1918,26 -1953,25 +1981,25 @@@ var CanvasGraphics = (function() 
              // TODO cache rendered images?
  
              var dict = image.dict;
 -            var w = dict.get("Width") || dict.get("W");
 -            var h = dict.get("Height") || dict.get("H");
 +            var w = dict.get2("Width", "W");
 +            var h = dict.get2("Height", "H");
 +
 +            if (w < 1 || h < 1)
 +                error("Invalid image width or height");
+             
+             // scale the image to the unit square
+             this.ctx.scale(1/w, 1/h);
 -           
 -            if (!IsNum(w) || !IsNum(h) || w < 1 || h < 1)
 -                error("Invalid image width or height");
  
 -            var interpolate = dict.get("Interpolate") || dict.get("I");
 +            var interpolate = dict.get2("Interpolate", "I");
              if (!IsBool(interpolate))
                  interpolate = false;
 -            var imageMask = dict.get("ImageMask") || dict.get("IM");
 +            var imageMask = dict.get2("ImageMask", "IM");
              if (!IsBool(imageMask))
                  imageMask = false;
  
-             // JPX/JPEG2000 streams directly contain bits per component
-             // and color space mode information.
              var bitsPerComponent = image.bitsPerComponent;
-             var csMode = image.csMode;
              if (!bitsPerComponent) {
 -                bitsPerComponent = dict.get("BitsPerComponent") || dict.get("BPC");
 +                bitsPerComponent = dict.get("BitsPerComponent""BPC");
                  if (!bitsPerComponent) {
                      if (imageMask)
                          bitsPerComponent = 1;
              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();
          },