[poppler] poppler/SplashOutputDev.cc
Albert Astals Cid
aacid at kemper.freedesktop.org
Tue Nov 29 23:15:09 UTC 2016
poppler/SplashOutputDev.cc | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
New commits:
commit 42ef2ac51543fabb5f5f5c3a19c79020d4fb1238
Author: Thomas Freitag <Thomas.Freitag at alfa.de>
Date: Wed Nov 30 00:14:46 2016 +0100
Read softmask into memstrean in case of matte
In case of matte the softmask has to be read twice. This is not possible when read from stdin. So this patch allocate a memstream first and read the softmask into this memstream.
Bug #97803
diff --git a/poppler/SplashOutputDev.cc b/poppler/SplashOutputDev.cc
index 7b6e14a..093baa9 100644
--- a/poppler/SplashOutputDev.cc
+++ b/poppler/SplashOutputDev.cc
@@ -4015,6 +4015,16 @@ void SplashOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref,
//----- set up the soft mask
+ if (maskColorMap->getMatteColor() != NULL) {
+ Guchar *data = (Guchar *) gmalloc(maskWidth * maskHeight);
+ maskStr->reset();
+ maskStr->doGetChars(maskWidth * maskHeight, data);
+ maskStr->close();
+ Object *maskDict = new Object();
+ maskDict->initDict(maskStr->getDict());
+ maskStr = new MemStream((char *)data, 0, maskWidth * maskHeight, maskDict);
+ ((MemStream *) maskStr)->setNeedFree(gTrue);
+ }
imgMaskData.imgStr = new ImageStream(maskStr, maskWidth,
maskColorMap->getNumPixelComps(),
maskColorMap->getBits());
@@ -4042,6 +4052,9 @@ void SplashOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref,
maskSplash->drawImage(&imageSrc, NULL, &imgMaskData, splashModeMono8, gFalse,
maskWidth, maskHeight, mat, maskInterpolate);
delete imgMaskData.imgStr;
+ if (maskColorMap->getMatteColor() == NULL) {
+ maskStr->close();
+ }
gfree(imgMaskData.lookup);
delete maskSplash;
splash->setSoftMask(maskBitmap);
@@ -4141,7 +4154,10 @@ void SplashOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref,
gfree(imgData.lookup);
delete imgData.maskStr;
delete imgData.imgStr;
- maskStr->close();
+ if (maskColorMap->getMatteColor() != NULL) {
+ maskStr->close();
+ delete maskStr;
+ }
str->close();
}
More information about the poppler
mailing list