summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2018-10-16 14:51:21 +0200
committerTor Andersson <tor.andersson@artifex.com>2018-10-25 15:50:27 +0200
commitfca9fce5f56dcf45bb69fa0df4bb1c5a2954ffe7 (patch)
treeaebc63c7a3ac865db2fd2afae3d13c9f1d901d6e /source
parente815e64406e574a75a33e057f954422d56ade314 (diff)
downloadmupdf-fca9fce5f56dcf45bb69fa0df4bb1c5a2954ffe7.tar.xz
Make alpha channel unmultiply and premultiply utility functions public.
Diffstat (limited to 'source')
-rw-r--r--source/fitz/color-lcms.c41
-rw-r--r--source/fitz/colorspace.c35
2 files changed, 37 insertions, 39 deletions
diff --git a/source/fitz/color-lcms.c b/source/fitz/color-lcms.c
index 1f94c428..70014fd2 100644
--- a/source/fitz/color-lcms.c
+++ b/source/fitz/color-lcms.c
@@ -86,43 +86,6 @@ fz_lcms_description(cmsContext cmm_ctx, fz_iccprofile *profile)
return desc;
}
-static void
-fz_lcms_premultiply_row(fz_context *ctx, int n, int c, int w, unsigned char *s)
-{
- unsigned char a;
- int k;
- int n1 = n-1;
-
- for (; w > 0; w--)
- {
- a = s[n1];
- for (k = 0; k < c; k++)
- s[k] = fz_mul255(s[k], a);
- s += n;
- }
-}
-
-static void
-fz_lcms_unmultiply_row(fz_context *ctx, int n, int c, int w, unsigned char *s, const unsigned char *in)
-{
- int a, inva;
- int k;
- int n1 = n-1;
-
- for (; w > 0; w--)
- {
- a = in[n1];
- inva = a ? 255 * 256 / a : 0;
- for (k = 0; k < c; k++)
- s[k] = (in[k] * inva) >> 8;
- for (;k < n1; k++)
- s[k] = in[k];
- s[n1] = a;
- s += n;
- in += n;
- }
-}
-
/* Transform pixmap */
void
fz_lcms_transform_pixmap(fz_cmm_instance *instance, fz_icclink *link, fz_pixmap *dst, fz_pixmap *src)
@@ -166,9 +129,9 @@ fz_lcms_transform_pixmap(fz_cmm_instance *instance, fz_icclink *link, fz_pixmap
buffer = fz_malloc(ctx, ss);
for (; h > 0; h--)
{
- fz_lcms_unmultiply_row(ctx, sn, sc, sw, buffer, inputpos);
+ fz_unmultiply_row(ctx, sn, sc, sw, buffer, inputpos);
cmsDoTransform(cmm_ctx, hTransform, buffer, outputpos, sw);
- fz_lcms_premultiply_row(ctx, dn, dc, dw, outputpos);
+ fz_premultiply_row(ctx, dn, dc, dw, outputpos);
inputpos += ss;
outputpos += ds;
}
diff --git a/source/fitz/colorspace.c b/source/fitz/colorspace.c
index 4a957d20..89e6b9be 100644
--- a/source/fitz/colorspace.c
+++ b/source/fitz/colorspace.c
@@ -145,6 +145,41 @@ void fz_cmm_fin_profile(fz_context *ctx, fz_iccprofile *profile)
ctx->colorspace->cmm->fin_profile(ctx->cmm_instance, profile);
}
+void fz_premultiply_row(fz_context *ctx, int n, int c, int w, unsigned char *s)
+{
+ unsigned char a;
+ int k;
+ int n1 = n-1;
+
+ for (; w > 0; w--)
+ {
+ a = s[n1];
+ for (k = 0; k < c; k++)
+ s[k] = fz_mul255(s[k], a);
+ s += n;
+ }
+}
+
+void fz_unmultiply_row(fz_context *ctx, int n, int c, int w, unsigned char *s, const unsigned char *in)
+{
+ int a, inva;
+ int k;
+ int n1 = n-1;
+
+ for (; w > 0; w--)
+ {
+ a = in[n1];
+ inva = a ? 255 * 256 / a : 0;
+ for (k = 0; k < c; k++)
+ s[k] = (in[k] * inva) >> 8;
+ for (;k < n1; k++)
+ s[k] = in[k];
+ s[n1] = a;
+ s += n;
+ in += n;
+ }
+}
+
#define SLOWCMYK
#if FZ_ENABLE_ICC