diff options
Diffstat (limited to 'tree/colorspace.c')
-rw-r--r-- | tree/colorspace.c | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/tree/colorspace.c b/tree/colorspace.c index ae922bcd..af0239f5 100644 --- a/tree/colorspace.c +++ b/tree/colorspace.c @@ -1,5 +1,17 @@ #include <fitz.h> +void +fz_convertpixmap(fz_colorspace *srcs, fz_pixmap *src, fz_colorspace *dsts, fz_pixmap *dst) +{ + srcs->convpixmap(srcs, src, dsts, dst); +} + +void +fz_convertcolor(fz_colorspace *srcs, float *srcv, fz_colorspace *dsts, float *dstv) +{ + srcs->convcolor(srcs, srcv, dsts, dstv); +} + fz_colorspace * fz_keepcolorspace(fz_colorspace *cs) { @@ -21,7 +33,7 @@ fz_dropcolorspace(fz_colorspace *cs) } void -fz_convertcolor(fz_colorspace *srcs, float *srcv, fz_colorspace *dsts, float *dstv) +fz_stdconvcolor(fz_colorspace *srcs, float *srcv, fz_colorspace *dsts, float *dstv) { float xyz[3]; int i; @@ -43,3 +55,36 @@ fz_convertcolor(fz_colorspace *srcs, float *srcv, fz_colorspace *dsts, float *ds } } +void +fz_stdconvpixmap(fz_colorspace *srcs, fz_pixmap *src, fz_colorspace *dsts, fz_pixmap *dst) +{ + float srcv[32]; + float dstv[32]; + int y, x, k; + + unsigned char *s = src->samples; + unsigned char *d = dst->samples; + + assert(src->w == dst->w && src->h == dst->h); + assert(src->n == srcs->n + 1); + assert(dst->n == dsts->n + 1); + + printf("convert pixmap from %s to %s\n", srcs->name, dsts->name); + + for (y = 0; y < src->h; y++) + { + for (x = 0; x < src->w; x++) + { + *d++ = *s++; + + for (k = 0; k < src->n - 1; k++) + srcv[k] = *s++ / 255.0; + + fz_convertcolor(srcs, srcv, dsts, dstv); + + for (k = 0; k < dst->n - 1; k++) + *d++ = dstv[k] * 255; + } + } +} + |