From 24ee8c1e74d613b1ec394c7380b39349f07d47d6 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Fri, 5 Nov 2004 07:57:47 +0100 Subject: tiling patterns --- render/pixmap.c | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) (limited to 'render/pixmap.c') diff --git a/render/pixmap.c b/render/pixmap.c index 634fe8f6..ed64769f 100644 --- a/render/pixmap.c +++ b/render/pixmap.c @@ -82,25 +82,46 @@ fz_blendover(fz_pixmap *src, fz_pixmap *dst) { int x, y, k; - assert(dst->n == src->n); + assert(dst->n == src->n || src->n == 1); assert(dst->w == src->w); assert(dst->h == src->h); unsigned char *s = src->samples; unsigned char *d = dst->samples; - for (y = 0; y < dst->h; y++) + if (dst->n == src->n) { - for (x = 0; x < dst->w; x++) + for (y = 0; y < dst->h; y++) { - int sa = s[0]; - int ssa = 255 - sa; + for (x = 0; x < dst->w; x++) + { + int sa = s[0]; + int ssa = 255 - sa; - for (k = 0; k < dst->n; k++) - d[k] = s[k] + fz_mul255(d[k], ssa); + for (k = 0; k < dst->n; k++) + d[k] = s[k] + fz_mul255(d[k], ssa); - s += src->n; - d += dst->n; + s += src->n; + d += dst->n; + } + } + } + else if (src->n == 1) + { + for (y = 0; y < dst->h; y++) + { + for (x = 0; x < dst->w; x++) + { + int sa = s[0]; + int ssa = 255 - sa; + + d[0] = s[0] + fz_mul255(d[0], ssa); + for (k = 1; k < dst->n; k++) + d[k] = 0 + fz_mul255(d[k], ssa); + + s += src->n; + d += dst->n; + } } } } @@ -111,7 +132,6 @@ fz_blendmask(fz_pixmap *dst, fz_pixmap *src, fz_pixmap *msk) int x, y, k; assert(src->n == dst->n); - assert(msk->n == 1); unsigned char *d = dst->samples; unsigned char *s = src->samples; @@ -125,7 +145,7 @@ fz_blendmask(fz_pixmap *dst, fz_pixmap *src, fz_pixmap *msk) { *d++ = fz_mul255(*s++, *m); } - m++; + m += msk->n; } } } -- cgit v1.2.3