Implemented basic version of smask

This commit is contained in:
sbarman 2011-06-06 16:40:03 -07:00
parent 27b8b68b87
commit 99aacfe42c

24
pdf.js
View File

@ -1926,11 +1926,32 @@ var CanvasGraphics = (function() {
var pixels = imgData.data; var pixels = imgData.data;
var alpha = 25; var alpha = 25;
if (image.dict.has("SMask")) 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 // Specifies either a shape or opacity mask to be
// applied to the image samples // applied to the image samples
TODO("SMask"); TODO("SMask");
}
if (smask) {
var smaskDict = smask.dict;
if (!smaskDict)
error("No dictionary for smask");
var smaskBitsPerComponent = smaskDict.get("BitsPerComponent") || smaskDict.get("BPC");
if (!smaskBitsPerComponent)
error("Bad BPC for smask");
var max = (1 << bitsPerComponent) - 1;
var matte = smaskDict.get("Matte");
if (matte) {
TODO(matte);
}
for (var i = 0; i < 4 * w * h; ++i) {
pixels[i] = image.getChar() * smask.getChar() / max;
}
} else {
for (var i = 0; i < 4 * w * h; ++i) { for (var i = 0; i < 4 * w * h; ++i) {
// TODO blend if SMask is a mask image // TODO blend if SMask is a mask image
if (3 === i % 4) { if (3 === i % 4) {
@ -1939,6 +1960,7 @@ var CanvasGraphics = (function() {
pixels[i] = image.getChar(); pixels[i] = image.getChar();
} }
} }
}
tmpCtx.putImageData(imgData, 0, 0); tmpCtx.putImageData(imgData, 0, 0);
this.ctx.drawImage(tmpCanvas, 0, 0); this.ctx.drawImage(tmpCanvas, 0, 0);