summaryrefslogtreecommitdiff
path: root/fitz/res_colorspace.c
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2005-03-30 10:45:21 +0200
committerTor Andersson <tor@ghostscript.com>2005-03-30 10:45:21 +0200
commit5f4d61903ee8fc514ed7e23eac4d5ac6409ff760 (patch)
treea824aa883d9d5df072c17ec0a2ac4a2b5074c2c0 /fitz/res_colorspace.c
parentee154f16bd09a43359967f7e7b86c3677c09461d (diff)
downloadmupdf-5f4d61903ee8fc514ed7e23eac4d5ac6409ff760.tar.xz
rename and shuffle -- part 2
Diffstat (limited to 'fitz/res_colorspace.c')
-rw-r--r--fitz/res_colorspace.c89
1 files changed, 89 insertions, 0 deletions
diff --git a/fitz/res_colorspace.c b/fitz/res_colorspace.c
new file mode 100644
index 00000000..65909bfe
--- /dev/null
+++ b/fitz/res_colorspace.c
@@ -0,0 +1,89 @@
+#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)
+{
+ if (cs->refs < 0)
+ return cs;
+ cs->refs ++;
+ return cs;
+}
+
+void
+fz_dropcolorspace(fz_colorspace *cs)
+{
+ if (cs->refs < 0)
+ return;
+ if (--cs->refs == 0)
+ {
+ if (cs->drop)
+ cs->drop(cs);
+ fz_free(cs);
+ }
+}
+
+void
+fz_stdconvcolor(fz_colorspace *srcs, float *srcv, fz_colorspace *dsts, float *dstv)
+{
+ float xyz[3];
+ int i;
+
+ if (srcs != dsts)
+ {
+ srcs->toxyz(srcs, srcv, xyz);
+ dsts->fromxyz(dsts, xyz, dstv);
+ for (i = 0; i < dsts->n; i++)
+ dstv[i] = CLAMP(dstv[i], 0.0, 1.0);
+ }
+ else
+ {
+ for (i = 0; i < srcs->n; i++)
+ dstv[i] = srcv[i];
+ }
+}
+
+void
+fz_stdconvpixmap(fz_colorspace *srcs, fz_pixmap *src, fz_colorspace *dsts, fz_pixmap *dst)
+{
+ float srcv[FZ_MAXCOLORS];
+ float dstv[FZ_MAXCOLORS];
+ int y, x, k;
+
+ unsigned char *s = src->samples;
+ unsigned char *d = dst->samples;
+
+ printf("convert pixmap from %s to %s\n", srcs->name, dsts->name);
+
+ assert(src->w == dst->w && src->h == dst->h);
+ assert(src->n == srcs->n + 1);
+ assert(dst->n == dsts->n + 1);
+
+ 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;
+ }
+ }
+}
+