summaryrefslogtreecommitdiff
path: root/tree/colorspace.c
diff options
context:
space:
mode:
Diffstat (limited to 'tree/colorspace.c')
-rw-r--r--tree/colorspace.c47
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;
+ }
+ }
+}
+