diff options
author | Tor Andersson <tor@ghostscript.com> | 2004-11-25 08:19:33 +0100 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2004-11-25 08:19:33 +0100 |
commit | 6a2ce62be0518a6e5690d6a1d23527ede5a91150 (patch) | |
tree | ca8a8afdd907b697bd2394c9b3dbc7b7e9ca0f0a | |
parent | a93da46ada76df7aa4559826e63ab1ac02bed4b3 (diff) | |
download | mupdf-6a2ce62be0518a6e5690d6a1d23527ede5a91150.tar.xz |
handle bogus pattern colorspaces. fix double-alpha-blend in rastport.c
-rw-r--r-- | include/mupdf/rsrc.h | 1 | ||||
-rw-r--r-- | mupdf/colorspace1.c | 15 | ||||
-rw-r--r-- | mupdf/unicode.c | 2 | ||||
-rw-r--r-- | render/rastport.c | 12 | ||||
-rw-r--r-- | render/render.c | 4 |
5 files changed, 25 insertions, 9 deletions
diff --git a/include/mupdf/rsrc.h b/include/mupdf/rsrc.h index 39222351..60762ce4 100644 --- a/include/mupdf/rsrc.h +++ b/include/mupdf/rsrc.h @@ -40,6 +40,7 @@ extern fz_colorspace *pdf_devicegray; extern fz_colorspace *pdf_devicergb; extern fz_colorspace *pdf_devicecmyk; extern fz_colorspace *pdf_devicelab; +extern fz_colorspace *pdf_devicepattern; void pdf_convcolor(fz_colorspace *ss, float *sv, fz_colorspace *ds, float *dv); void pdf_convpixmap(fz_colorspace *ss, fz_pixmap *sp, fz_colorspace *ds, fz_pixmap *dp); diff --git a/mupdf/colorspace1.c b/mupdf/colorspace1.c index 5d943fdb..b1608740 100644 --- a/mupdf/colorspace1.c +++ b/mupdf/colorspace1.c @@ -207,10 +207,16 @@ static struct cielab kdevicelab = { -100, 100, -100, 100 }, }; +static fz_colorspace kdevicepattern = +{ + -1, "Pattern", 0, nil, nil, nil, nil, nil +}; + fz_colorspace *pdf_devicegray = &kdevicegray.super; fz_colorspace *pdf_devicergb = &kdevicergb.super; fz_colorspace *pdf_devicecmyk = &kdevicecmyk; fz_colorspace *pdf_devicelab = &kdevicelab.super; +fz_colorspace *pdf_devicepattern = &kdevicepattern; /* * Colorspace parsing @@ -622,6 +628,8 @@ pdf_loadcolorspace(fz_colorspace **csp, pdf_xref *xref, fz_obj *obj) *csp = pdf_devicergb; else if (!strcmp(fz_toname(obj), "CMYK")) *csp = pdf_devicecmyk; + else if (!strcmp(fz_toname(obj), "Pattern")) + *csp = pdf_devicepattern; else return fz_throw("unknown colorspace: %s", fz_toname(obj)); return nil; @@ -669,7 +677,14 @@ pdf_loadcolorspace(fz_colorspace **csp, pdf_xref *xref, fz_obj *obj) /* load base colorspace instead */ else if (!strcmp(fz_toname(name), "Pattern")) + { + if (!fz_arrayget(obj, 1)) + { + *csp = pdf_devicepattern; + return nil; + } return pdf_loadcolorspace(csp, xref, fz_arrayget(obj, 1)); + } else return fz_throw("syntaxerror: unknown colorspace %s", fz_toname(name)); diff --git a/mupdf/unicode.c b/mupdf/unicode.c index 42fba1c0..9aa14001 100644 --- a/mupdf/unicode.c +++ b/mupdf/unicode.c @@ -78,7 +78,7 @@ pdf_loadtounicode(pdf_font *font, pdf_xref *xref, return nil; } - fz_warn("font: cannot create unicode conversion\n", collection); + fz_warn("font: cannot create unicode conversion", collection); return nil; } diff --git a/render/rastport.c b/render/rastport.c index 112ab5ea..6d6b3b8a 100644 --- a/render/rastport.c +++ b/render/rastport.c @@ -369,9 +369,9 @@ static void img_4o4(FZ_PSRC, FZ_PDST, FZ_PCTM) sampleargb(src, srcw, srch, u, v, argb); ssa = 255 - argb[0]; dstp[0] = argb[0] + fz_mul255(dstp[0], ssa); - dstp[1] = argb[1] + fz_mul255((short)dstp[1] - argb[1], ssa); - dstp[2] = argb[2] + fz_mul255((short)dstp[2] - argb[2], ssa); - dstp[3] = argb[3] + fz_mul255((short)dstp[3] - argb[3], ssa); + dstp[1] = argb[1] + fz_mul255(dstp[1], ssa); + dstp[2] = argb[2] + fz_mul255(dstp[2], ssa); + dstp[3] = argb[3] + fz_mul255(dstp[3], ssa); dstp += 4; u += fa; v += fb; @@ -396,9 +396,9 @@ static void img_w3i1o4(byte *rgb, FZ_PSRC, FZ_PDST, FZ_PCTM) sa = samplemask(src, srcw, srch, u, v); ssa = 255 - sa; dstp[0] = sa + fz_mul255(dstp[0], ssa); - dstp[1] = rgb[0] + fz_mul255((short)dstp[1] - rgb[0], ssa); - dstp[2] = rgb[1] + fz_mul255((short)dstp[2] - rgb[1], ssa); - dstp[3] = rgb[2] + fz_mul255((short)dstp[3] - rgb[2], ssa); + dstp[1] = rgb[0] + fz_mul255(dstp[1], ssa); + dstp[2] = rgb[1] + fz_mul255(dstp[2], ssa); + dstp[3] = rgb[2] + fz_mul255(dstp[3], ssa); dstp += 4; u += fa; v += fb; diff --git a/render/render.c b/render/render.c index b72f069e..77f04e22 100644 --- a/render/render.c +++ b/render/render.c @@ -1,7 +1,7 @@ #include <fitz.h> -#define noDEBUG(args...) printf(args) -#define DEBUG(args...) +#define DEBUG(args...) printf(args) +#define noDEBUG(args...) #define FNONE 0 #define FOVER 1 |