Andrew Top | 8414344 | 2018-07-12 10:44:23 -0700 | [diff] [blame] | 1 | /* |
| 2 | * cmyk.h |
| 3 | * |
| 4 | * Copyright (C) 2017-2018, D. R. Commander. |
| 5 | * For conditions of distribution and use, see the accompanying README.ijg |
| 6 | * file. |
| 7 | * |
| 8 | * This file contains convenience functions for performing quick & dirty |
| 9 | * CMYK<->RGB conversion. This algorithm is suitable for testing purposes |
| 10 | * only. Properly converting between CMYK and RGB requires a color management |
| 11 | * system. |
| 12 | */ |
| 13 | |
| 14 | #ifndef CMYK_H |
| 15 | #define CMYK_H |
| 16 | |
| 17 | #include <jinclude.h> |
| 18 | #define JPEG_INTERNALS |
| 19 | #include <jpeglib.h> |
| 20 | #include "jconfigint.h" |
| 21 | |
| 22 | |
| 23 | /* Fully reversible */ |
| 24 | |
| 25 | INLINE |
| 26 | LOCAL(void) |
| 27 | rgb_to_cmyk(JSAMPLE r, JSAMPLE g, JSAMPLE b, JSAMPLE *c, JSAMPLE *m, |
| 28 | JSAMPLE *y, JSAMPLE *k) |
| 29 | { |
| 30 | double ctmp = 1.0 - ((double)r / 255.0); |
| 31 | double mtmp = 1.0 - ((double)g / 255.0); |
| 32 | double ytmp = 1.0 - ((double)b / 255.0); |
| 33 | double ktmp = MIN(MIN(ctmp, mtmp), ytmp); |
| 34 | |
| 35 | if (ktmp == 1.0) ctmp = mtmp = ytmp = 0.0; |
| 36 | else { |
| 37 | ctmp = (ctmp - ktmp) / (1.0 - ktmp); |
| 38 | mtmp = (mtmp - ktmp) / (1.0 - ktmp); |
| 39 | ytmp = (ytmp - ktmp) / (1.0 - ktmp); |
| 40 | } |
| 41 | *c = (JSAMPLE)(255.0 - ctmp * 255.0 + 0.5); |
| 42 | *m = (JSAMPLE)(255.0 - mtmp * 255.0 + 0.5); |
| 43 | *y = (JSAMPLE)(255.0 - ytmp * 255.0 + 0.5); |
| 44 | *k = (JSAMPLE)(255.0 - ktmp * 255.0 + 0.5); |
| 45 | } |
| 46 | |
| 47 | |
| 48 | /* Fully reversible only for C/M/Y/K values generated with rgb_to_cmyk() */ |
| 49 | |
| 50 | INLINE |
| 51 | LOCAL(void) |
| 52 | cmyk_to_rgb(JSAMPLE c, JSAMPLE m, JSAMPLE y, JSAMPLE k, JSAMPLE *r, JSAMPLE *g, |
| 53 | JSAMPLE *b) |
| 54 | { |
| 55 | *r = (JSAMPLE)((double)c * (double)k / 255.0 + 0.5); |
| 56 | *g = (JSAMPLE)((double)m * (double)k / 255.0 + 0.5); |
| 57 | *b = (JSAMPLE)((double)y * (double)k / 255.0 + 0.5); |
| 58 | } |
| 59 | |
| 60 | |
| 61 | #endif /* CMYK_H */ |