/src/libjpeg-turbo.main/cmyk.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * cmyk.h |
3 | | * |
4 | | * Copyright (C) 2017-2018, 2022, 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 "jsamplecomp.h" |
21 | | |
22 | | |
23 | | /* Fully reversible */ |
24 | | |
25 | | INLINE |
26 | | LOCAL(void) |
27 | | rgb_to_cmyk(_JSAMPLE r, _JSAMPLE g, _JSAMPLE b, |
28 | | _JSAMPLE *c, _JSAMPLE *m, _JSAMPLE *y, _JSAMPLE *k) |
29 | 0 | { |
30 | 0 | double ctmp = 1.0 - ((double)r / (double)_MAXJSAMPLE); |
31 | 0 | double mtmp = 1.0 - ((double)g / (double)_MAXJSAMPLE); |
32 | 0 | double ytmp = 1.0 - ((double)b / (double)_MAXJSAMPLE); |
33 | 0 | double ktmp = MIN(MIN(ctmp, mtmp), ytmp); |
34 | |
|
35 | 0 | if (ktmp == 1.0) ctmp = mtmp = ytmp = 0.0; |
36 | 0 | else { |
37 | 0 | ctmp = (ctmp - ktmp) / (1.0 - ktmp); |
38 | 0 | mtmp = (mtmp - ktmp) / (1.0 - ktmp); |
39 | 0 | ytmp = (ytmp - ktmp) / (1.0 - ktmp); |
40 | 0 | } |
41 | 0 | *c = (_JSAMPLE)((double)_MAXJSAMPLE - ctmp * (double)_MAXJSAMPLE + 0.5); |
42 | 0 | *m = (_JSAMPLE)((double)_MAXJSAMPLE - mtmp * (double)_MAXJSAMPLE + 0.5); |
43 | 0 | *y = (_JSAMPLE)((double)_MAXJSAMPLE - ytmp * (double)_MAXJSAMPLE + 0.5); |
44 | 0 | *k = (_JSAMPLE)((double)_MAXJSAMPLE - ktmp * (double)_MAXJSAMPLE + 0.5); |
45 | 0 | } Unexecuted instantiation: rdbmp.c:rgb_to_cmyk Unexecuted instantiation: rdppm.c:rgb_to_cmyk Unexecuted instantiation: wrbmp.c:rgb_to_cmyk Unexecuted instantiation: wrppm.c:rgb_to_cmyk |
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, |
53 | | _JSAMPLE *r, _JSAMPLE *g, _JSAMPLE *b) |
54 | 0 | { |
55 | 0 | *r = (_JSAMPLE)((double)c * (double)k / (double)_MAXJSAMPLE + 0.5); |
56 | 0 | *g = (_JSAMPLE)((double)m * (double)k / (double)_MAXJSAMPLE + 0.5); |
57 | 0 | *b = (_JSAMPLE)((double)y * (double)k / (double)_MAXJSAMPLE + 0.5); |
58 | 0 | } Unexecuted instantiation: rdbmp.c:cmyk_to_rgb Unexecuted instantiation: rdppm.c:cmyk_to_rgb Unexecuted instantiation: wrbmp.c:cmyk_to_rgb Unexecuted instantiation: wrppm.c:cmyk_to_rgb |
59 | | |
60 | | |
61 | | #endif /* CMYK_H */ |