summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/pdfinput/pdf-parser.cpp
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2015-06-25 16:15:05 +0000
committerJabiertxof <jtx@jtx.marker.es>2015-06-25 16:15:05 +0000
commit5c2d982cc636ee4e2bc12703c01c86e245dd821f (patch)
tree6e6f22800c7d38314e14eccd486b65c3c4286d81 /src/extension/internal/pdfinput/pdf-parser.cpp
parentupdate to trunk (diff)
parentFix for the bug 1468396 (diff)
downloadinkscape-5c2d982cc636ee4e2bc12703c01c86e245dd821f.tar.gz
inkscape-5c2d982cc636ee4e2bc12703c01c86e245dd821f.zip
update to trunk
(bzr r13645.1.94)
Diffstat (limited to 'src/extension/internal/pdfinput/pdf-parser.cpp')
-rw-r--r--src/extension/internal/pdfinput/pdf-parser.cpp47
1 files changed, 41 insertions, 6 deletions
diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
index cc0b38515..836c34c32 100644
--- a/src/extension/internal/pdfinput/pdf-parser.cpp
+++ b/src/extension/internal/pdfinput/pdf-parser.cpp
@@ -2780,12 +2780,14 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
Dict *dict;
int width, height;
int bits;
+ GBool interpolate;
StreamColorSpaceMode csMode;
GBool mask;
GBool invert;
Object maskObj, smaskObj;
GBool haveColorKeyMask, haveExplicitMask, haveSoftMask;
GBool maskInvert;
+ GBool maskInterpolate;
Object obj1, obj2;
// get info from the stream
@@ -2828,6 +2830,19 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
}
obj1.free();
+ // image interpolation
+ dict->lookup("Interpolate", &obj1);
+ if (obj1.isNull()) {
+ obj1.free();
+ dict->lookup("I", &obj1);
+ }
+ if (obj1.isBool())
+ interpolate = obj1.getBool();
+ else
+ interpolate = gFalse;
+ obj1.free();
+ maskInterpolate = gFalse;
+
// image or mask?
dict->lookup(const_cast<char*>("ImageMask"), &obj1);
if (obj1.isNull()) {
@@ -2884,7 +2899,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
obj1.free();
// draw it
- builder->addImageMask(state, str, width, height, invert);
+ builder->addImageMask(state, str, width, height, invert, interpolate);
} else {
// get color space and color map
@@ -2986,6 +3001,16 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
}
int maskBits = obj1.getInt();
obj1.free();
+ maskDict->lookup("Interpolate", &obj1);
+ if (obj1.isNull()) {
+ obj1.free();
+ maskDict->lookup("I", &obj1);
+ }
+ if (obj1.isBool())
+ maskInterpolate = obj1.getBool();
+ else
+ maskInterpolate = gFalse;
+ obj1.free();
maskDict->lookup(const_cast<char*>("ColorSpace"), &obj1);
if (obj1.isNull()) {
obj1.free();
@@ -3071,6 +3096,16 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
goto err2;
}
obj1.free();
+ maskDict->lookup("Interpolate", &obj1);
+ if (obj1.isNull()) {
+ obj1.free();
+ maskDict->lookup("I", &obj1);
+ }
+ if (obj1.isBool())
+ maskInterpolate = obj1.getBool();
+ else
+ maskInterpolate = gFalse;
+ obj1.free();
maskInvert = gFalse;
maskDict->lookup(const_cast<char*>("Decode"), &obj1);
if (obj1.isNull()) {
@@ -3092,14 +3127,14 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
// draw it
if (haveSoftMask) {
- builder->addSoftMaskedImage(state, str, width, height, colorMap,
- maskStr, maskWidth, maskHeight, maskColorMap);
+ builder->addSoftMaskedImage(state, str, width, height, colorMap, interpolate,
+ maskStr, maskWidth, maskHeight, maskColorMap, maskInterpolate);
delete maskColorMap;
} else if (haveExplicitMask) {
- builder->addMaskedImage(state, str, width, height, colorMap,
- maskStr, maskWidth, maskHeight, maskInvert);
+ builder->addMaskedImage(state, str, width, height, colorMap, interpolate,
+ maskStr, maskWidth, maskHeight, maskInvert, maskInterpolate);
} else {
- builder->addImage(state, str, width, height, colorMap,
+ builder->addImage(state, str, width, height, colorMap, interpolate,
haveColorKeyMask ? maskColors : static_cast<int *>(NULL));
}
delete colorMap;