digiKam
Loading...
Searching...
No Matches
digikam-lcms.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2012-02-03
7 * Description : LCMS2 wrapper
8 *
9 * SPDX-FileCopyrightText: 2012 by Francesco Riosa <francesco+kde at pnpitalia dot it>
10 * SPDX-FileCopyrightText: 2012-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 *
12 * SPDX-License-Identifier: GPL-2.0-or-later
13 *
14 * ============================================================ */
15
16#pragma once
17
18// Qt includes
19
20#include <QString>
21
22// Local includes
23
24#include "digikam_export.h"
25#include "digikam_config.h"
26
27#if defined (__MINGW32__) || defined (Q_OS_WIN) // krazy:exclude=cpp
28# define CMS_IS_WINDOWS_ 1
29# define CMS_DLL
30#else
31# undef CMS_DLL
32#endif
33
34// Turn off the specific compiler warnings with LCMS header.
35
36#if defined(Q_CC_CLANG)
37# pragma clang diagnostic push
38# pragma clang diagnostic ignored "-Wundef"
39# pragma clang diagnostic ignored "-Wdeprecated-register"
40#endif
41
42#include <lcms2.h>
43
44#if defined(Q_CC_CLANG)
45# pragma clang diagnostic pop
46#endif
47
48#define LCMS_DESC_MAX 512
49
50#if !defined FAR
51# define FAR
52#endif
53
54#define LCMS_ERROR_SHOW 1
55#define cmsFLAGS_NOTPRECALC 0x0100
56#define cmsFLAGS_WHITEBLACKCOMPENSATION 0x2000
57
58typedef int LCMSBOOL;
59typedef unsigned char BYTE, *LPBYTE;
60typedef unsigned short WORD, *LPWORD;
61typedef unsigned long DWORD, *LPDWORD;
62typedef void* LPVOID;
63
65typedef cmsCIEXYZ FAR* LPcmsCIEXYZ;
66typedef cmsCIExyY FAR* LPcmsCIExyY;
67typedef cmsCIELab FAR* LPcmsCIELab;
68
69typedef void* cmsHPROFILE;
70
71// These have changed from previous definitions
72
73typedef cmsCIEXYZTRIPLE MAT3;
74typedef cmsCIEXYZTRIPLE FAR* LPMAT3;
75
79typedef enum
80{
81 icSigInputClass = 0x73636E72L,
82 icSigDisplayClass = 0x6D6E7472L,
83 icSigOutputClass = 0x70727472L,
84 icSigLinkClass = 0x6C696E6BL,
85 icSigAbstractClass = 0x61627374L,
86 icSigColorSpaceClass = 0x73706163L,
87 icSigNamedColorClass = 0x6e6d636cL,
88 icMaxEnumClass = 0xFFFFFFFFL
90
91/*
92 * Color Space Signatures
93 * Note that only icSigXYZData and icSigLabData are valid
94 * Profile Connection Spaces (PCSs)
95 */
96typedef enum
97{
98 icSigXYZData = 0x58595A20L,
99 icSigLabData = 0x4C616220L,
100 icSigLuvData = 0x4C757620L,
101 icSigYCbCrData = 0x59436272L,
102 icSigYxyData = 0x59787920L,
103 icSigRgbData = 0x52474220L,
104 icSigGrayData = 0x47524159L,
105 icSigHsvData = 0x48535620L,
106 icSigHlsData = 0x484C5320L,
107 icSigCmykData = 0x434D594BL,
108 icSigCmyData = 0x434D5920L,
109 icSig2colorData = 0x32434C52L,
110 icSig3colorData = 0x33434C52L,
111 icSig4colorData = 0x34434C52L,
112 icSig5colorData = 0x35434C52L,
113 icSig6colorData = 0x36434C52L,
114 icSig7colorData = 0x37434C52L,
115 icSig8colorData = 0x38434C52L,
116 icSig9colorData = 0x39434C52L,
117 icSig10colorData = 0x41434C52L,
118 icSig11colorData = 0x42434C52L,
119 icSig12colorData = 0x43434C52L,
120 icSig13colorData = 0x44434C52L,
121 icSig14colorData = 0x45434C52L,
122 icSig15colorData = 0x46434C52L,
123 icMaxEnumData = 0xFFFFFFFFL
125
126
127//------------------------------------------------------------------------
128
132typedef enum
133{
134 icSigAToB0Tag = 0x41324230L,
135 icSigAToB1Tag = 0x41324231L,
136 icSigAToB2Tag = 0x41324232L,
137 icSigBlueColorantTag = 0x6258595AL,
138 icSigBlueTRCTag = 0x62545243L,
139 icSigBToA0Tag = 0x42324130L,
140 icSigBToA1Tag = 0x42324131L,
141 icSigBToA2Tag = 0x42324132L,
143 icSigCharTargetTag = 0x74617267L,
144 icSigCopyrightTag = 0x63707274L,
145 icSigCrdInfoTag = 0x63726469L,
146 icSigDeviceMfgDescTag = 0x646D6E64L,
148 icSigGamutTag = 0x67616D74L,
149 icSigGrayTRCTag = 0x6b545243L,
150 icSigGreenColorantTag = 0x6758595AL,
151 icSigGreenTRCTag = 0x67545243L,
152 icSigLuminanceTag = 0x6C756d69L,
153 icSigMeasurementTag = 0x6D656173L,
156 icSigNamedColorTag = 0x6E636f6CL,
157 icSigNamedColor2Tag = 0x6E636C32L,
158 icSigPreview0Tag = 0x70726530L,
159 icSigPreview1Tag = 0x70726531L,
160 icSigPreview2Tag = 0x70726532L,
163 icSigPs2CRD0Tag = 0x70736430L,
164 icSigPs2CRD1Tag = 0x70736431L,
165 icSigPs2CRD2Tag = 0x70736432L,
166 icSigPs2CRD3Tag = 0x70736433L,
167 icSigPs2CSATag = 0x70733273L,
169 icSigRedColorantTag = 0x7258595AL,
170 icSigRedTRCTag = 0x72545243L,
171 icSigScreeningDescTag = 0x73637264L,
172 icSigScreeningTag = 0x7363726EL,
173 icSigTechnologyTag = 0x74656368L,
174 icSigUcrBgTag = 0x62666420L,
177 icMaxEnumTag = 0xFFFFFFFFL
179
180DIGIKAM_EXPORT int dkCmsErrorAction(int nAction);
181
182DIGIKAM_EXPORT DWORD dkCmsGetProfileICCversion(cmsHPROFILE hProfile);
183
184DIGIKAM_EXPORT void dkCmsSetAlarmCodes(int r, int g, int b);
185
186DIGIKAM_EXPORT QString dkCmsTakeProductName(cmsHPROFILE hProfile);
187
188DIGIKAM_EXPORT QString dkCmsTakeProductDesc(cmsHPROFILE hProfile);
189
190DIGIKAM_EXPORT QString dkCmsTakeProductInfo(cmsHPROFILE hProfile);
191
192DIGIKAM_EXPORT QString dkCmsTakeManufacturer(cmsHPROFILE hProfile);
193
194DIGIKAM_EXPORT LCMSBOOL dkCmsTakeMediaWhitePoint(LPcmsCIEXYZ Dest, cmsHPROFILE hProfile);
195
196DIGIKAM_EXPORT QString dkCmsTakeModel(cmsHPROFILE hProfile);
197
198DIGIKAM_EXPORT QString dkCmsTakeCopyright(cmsHPROFILE hProfile);
199
200DIGIKAM_EXPORT DWORD dkCmsTakeHeaderFlags(cmsHPROFILE hProfile);
201
202DIGIKAM_EXPORT const BYTE* dkCmsTakeProfileID(cmsHPROFILE hProfile);
203
204DIGIKAM_EXPORT LCMSBOOL dkCmsIsTag(cmsHPROFILE hProfile, icTagSignature sig);
205
206DIGIKAM_EXPORT int dkCmsTakeRenderingIntent(cmsHPROFILE hProfile);
207
208DIGIKAM_EXPORT LCMSBOOL dkCmsAdaptMatrixFromD50(LPMAT3 r, LPcmsCIExyY DestWhitePt);
209
210DIGIKAM_EXPORT LCMSBOOL dkCmsReadICCMatrixRGB2XYZ(LPMAT3 r, cmsHPROFILE hProfile);
211
212DIGIKAM_EXPORT cmsHPROFILE dkCmsOpenProfileFromMem(LPVOID MemPtr, DWORD dwSize);
213
215
216DIGIKAM_EXPORT LCMSBOOL dkCmsCloseProfile(cmsHPROFILE hProfile);
217
218DIGIKAM_EXPORT cmsHTRANSFORM dkCmsCreateProofingTransform(cmsHPROFILE Input,
219 DWORD InputFormat,
220 cmsHPROFILE Output,
221 DWORD OutputFormat,
222 cmsHPROFILE Proofing,
223 int Intent,
224 int ProofingIntent,
225 DWORD dwFlags);
226
227DIGIKAM_EXPORT cmsHTRANSFORM dkCmsCreateTransform(cmsHPROFILE Input,
228 DWORD InputFormat,
229 cmsHPROFILE Output,
230 DWORD OutputFormat,
231 int Intent,
232 DWORD dwFlags);
233
234DIGIKAM_EXPORT cmsHPROFILE dkCmsCreateXYZProfile();
235
236DIGIKAM_EXPORT cmsHPROFILE dkCmsCreate_sRGBProfile();
237
238DIGIKAM_EXPORT void dkCmsDeleteTransform(cmsHTRANSFORM hTransform);
239
240DIGIKAM_EXPORT double dkCmsDeltaE(LPcmsCIELab Lab1, LPcmsCIELab Lab2);
241
242DIGIKAM_EXPORT void dkCmsDoTransform(cmsHTRANSFORM Transform,
243 LPVOID InputBuffer,
244 LPVOID OutputBuffer,
245 unsigned int Size);
246
247DIGIKAM_EXPORT void dkCmsFloat2XYZEncoded(WORD XYZ[3], const cmsCIEXYZ* const fXYZ);
248
250
251DIGIKAM_EXPORT icColorSpaceSignature dkCmsGetPCS(cmsHPROFILE hProfile);
252
253DIGIKAM_EXPORT LCMSBOOL dkCmsIsTag(cmsHPROFILE hProfile, icTagSignature sig);
254
255DIGIKAM_EXPORT cmsHPROFILE dkCmsOpenProfileFromFile(const char* const ICCProfile, const char* const sAccess);
256
257DIGIKAM_EXPORT void dkCmsXYZ2xyY(LPcmsCIExyY Dest, const cmsCIEXYZ* const Source);
cmsCIEXYZ FAR * LPcmsCIEXYZ
Colorspaces.
Definition digikam-lcms.h:65
DIGIKAM_EXPORT QString dkCmsTakeCopyright(cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:460
DIGIKAM_EXPORT QString dkCmsTakeModel(cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:444
DIGIKAM_EXPORT int dkCmsTakeRenderingIntent(cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:489
DIGIKAM_EXPORT QString dkCmsTakeManufacturer(cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:421
unsigned short WORD
Definition digikam-lcms.h:60
icProfileClassSignature
Definition digikam-lcms.h:80
@ icSigAbstractClass
'abst'
Definition digikam-lcms.h:85
@ icSigDisplayClass
'mntr'
Definition digikam-lcms.h:82
@ icSigOutputClass
'prtr'
Definition digikam-lcms.h:83
@ icSigInputClass
'scnr'
Definition digikam-lcms.h:81
@ icSigColorSpaceClass
'spac'
Definition digikam-lcms.h:86
@ icMaxEnumClass
Definition digikam-lcms.h:88
@ icSigNamedColorClass
'nmcl'
Definition digikam-lcms.h:87
@ icSigLinkClass
'link'
Definition digikam-lcms.h:84
cmsCIEXYZTRIPLE FAR * LPMAT3
Definition digikam-lcms.h:74
DIGIKAM_EXPORT void dkCmsDeleteTransform(cmsHTRANSFORM hTransform)
Definition digikam-lcms.cpp:656
DIGIKAM_EXPORT LCMSBOOL dkCmsReadICCMatrixRGB2XYZ(LPMAT3 r, cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:580
DIGIKAM_EXPORT int dkCmsErrorAction(int nAction)
Definition digikam-lcms.cpp:270
unsigned char * LPBYTE
Definition digikam-lcms.h:59
unsigned char BYTE
Definition digikam-lcms.h:59
DIGIKAM_EXPORT QString dkCmsTakeProductDesc(cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:344
DIGIKAM_EXPORT DWORD dkCmsGetProfileICCversion(cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:279
DIGIKAM_EXPORT LCMSBOOL dkCmsCloseProfile(cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:607
DIGIKAM_EXPORT QString dkCmsTakeProductName(cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:293
icColorSpaceSignature
Definition digikam-lcms.h:97
@ icSig14colorData
'ECLR'
Definition digikam-lcms.h:121
@ icSigLabData
'Lab '
Definition digikam-lcms.h:99
@ icSig2colorData
'2CLR'
Definition digikam-lcms.h:109
@ icSigLuvData
'Luv '
Definition digikam-lcms.h:100
@ icSig8colorData
'8CLR'
Definition digikam-lcms.h:115
@ icSig10colorData
'ACLR'
Definition digikam-lcms.h:117
@ icMaxEnumData
Definition digikam-lcms.h:123
@ icSig7colorData
'7CLR'
Definition digikam-lcms.h:114
@ icSig9colorData
'9CLR'
Definition digikam-lcms.h:116
@ icSigXYZData
'XYZ '
Definition digikam-lcms.h:98
@ icSig13colorData
'DCLR'
Definition digikam-lcms.h:120
@ icSig6colorData
'6CLR'
Definition digikam-lcms.h:113
@ icSigCmykData
'CMYK'
Definition digikam-lcms.h:107
@ icSigRgbData
'RGB '
Definition digikam-lcms.h:103
@ icSigHlsData
'HLS '
Definition digikam-lcms.h:106
@ icSig4colorData
'4CLR'
Definition digikam-lcms.h:111
@ icSigYCbCrData
'YCbr'
Definition digikam-lcms.h:101
@ icSig12colorData
'CCLR'
Definition digikam-lcms.h:119
@ icSig11colorData
'BCLR'
Definition digikam-lcms.h:118
@ icSigCmyData
'CMY '
Definition digikam-lcms.h:108
@ icSigGrayData
'GRAY'
Definition digikam-lcms.h:104
@ icSig15colorData
'FCLR'
Definition digikam-lcms.h:122
@ icSig3colorData
'3CLR'
Definition digikam-lcms.h:110
@ icSigHsvData
'HSV '
Definition digikam-lcms.h:105
@ icSigYxyData
'Yxy '
Definition digikam-lcms.h:102
@ icSig5colorData
'5CLR'
Definition digikam-lcms.h:112
DIGIKAM_EXPORT void dkCmsFloat2XYZEncoded(WORD XYZ[3], const cmsCIEXYZ *const fXYZ)
Definition digikam-lcms.cpp:677
DIGIKAM_EXPORT cmsHPROFILE dkCmsCreate_sRGBProfile()
Definition digikam-lcms.cpp:651
DIGIKAM_EXPORT double dkCmsDeltaE(LPcmsCIELab Lab1, LPcmsCIELab Lab2)
Definition digikam-lcms.cpp:661
DIGIKAM_EXPORT cmsHPROFILE dkCmsCreateXYZProfile()
Definition digikam-lcms.cpp:646
cmsCIELab FAR * LPcmsCIELab
Definition digikam-lcms.h:67
DIGIKAM_EXPORT void dkCmsDoTransform(cmsHTRANSFORM Transform, LPVOID InputBuffer, LPVOID OutputBuffer, unsigned int Size)
Definition digikam-lcms.cpp:666
DIGIKAM_EXPORT QString dkCmsTakeProductInfo(cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:366
DIGIKAM_EXPORT DWORD dkCmsTakeHeaderFlags(cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:476
DIGIKAM_EXPORT icProfileClassSignature dkCmsGetDeviceClass(cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:602
DIGIKAM_EXPORT void dkCmsXYZ2xyY(LPcmsCIExyY Dest, const cmsCIEXYZ *const Source)
Definition digikam-lcms.cpp:702
void * LPVOID
Definition digikam-lcms.h:62
DIGIKAM_EXPORT LCMSBOOL dkCmsTakeMediaWhitePoint(LPcmsCIEXYZ Dest, cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:430
DIGIKAM_EXPORT void dkCmsSetAlarmCodes(int r, int g, int b)
Definition digikam-lcms.cpp:284
DIGIKAM_EXPORT cmsHPROFILE dkCmsOpenProfileFromMem(LPVOID MemPtr, DWORD dwSize)
Definition digikam-lcms.cpp:597
void * cmsHPROFILE
Opaque typedefs to hide internals.
Definition digikam-lcms.h:69
unsigned long * LPDWORD
Definition digikam-lcms.h:61
icTagSignature
Definition digikam-lcms.h:133
@ icSigGrayTRCTag
'kTRC'
Definition digikam-lcms.h:149
@ icSigBToA2Tag
'B2A2'
Definition digikam-lcms.h:141
@ icSigDeviceMfgDescTag
'dmnd'
Definition digikam-lcms.h:146
@ icSigViewingConditionsTag
'view'
Definition digikam-lcms.h:176
@ icSigGreenTRCTag
'gTRC'
Definition digikam-lcms.h:151
@ icSigMeasurementTag
'meas'
Definition digikam-lcms.h:153
@ icSigCrdInfoTag
'crdi'
Definition digikam-lcms.h:145
@ icSigPs2CSATag
'ps2s'
Definition digikam-lcms.h:167
@ icSigPreview1Tag
'pre1'
Definition digikam-lcms.h:159
@ icSigPs2CRD0Tag
'psd0'
Definition digikam-lcms.h:163
@ icSigPs2RenderingIntentTag
'ps2i'
Definition digikam-lcms.h:168
@ icSigScreeningDescTag
'scrd'
Definition digikam-lcms.h:171
@ icSigAToB0Tag
'A2B0'
Definition digikam-lcms.h:134
@ icSigDeviceModelDescTag
'dmdd'
Definition digikam-lcms.h:147
@ icSigScreeningTag
'scrn'
Definition digikam-lcms.h:172
@ icSigBToA1Tag
'B2A1'
Definition digikam-lcms.h:140
@ icSigAToB2Tag
'A2B2'
Definition digikam-lcms.h:136
@ icSigProfileSequenceDescTag
'pseq'
Definition digikam-lcms.h:162
@ icSigBToA0Tag
'B2A0'
Definition digikam-lcms.h:139
@ icSigRedTRCTag
'rTRC'
Definition digikam-lcms.h:170
@ icSigPs2CRD1Tag
'psd1'
Definition digikam-lcms.h:164
@ icSigBlueTRCTag
'bTRC'
Definition digikam-lcms.h:138
@ icSigProfileDescriptionTag
'desc'
Definition digikam-lcms.h:161
@ icSigPs2CRD2Tag
'psd2'
Definition digikam-lcms.h:165
@ icSigRedColorantTag
'rXYZ'
Definition digikam-lcms.h:169
@ icSigMediaBlackPointTag
'bkpt'
Definition digikam-lcms.h:154
@ icSigCharTargetTag
'targ'
Definition digikam-lcms.h:143
@ icSigCopyrightTag
'cprt'
Definition digikam-lcms.h:144
@ icSigMediaWhitePointTag
'wtpt'
Definition digikam-lcms.h:155
@ icSigViewingCondDescTag
'vued'
Definition digikam-lcms.h:175
@ icSigAToB1Tag
'A2B1'
Definition digikam-lcms.h:135
@ icSigPs2CRD3Tag
'psd3'
Definition digikam-lcms.h:166
@ icSigCalibrationDateTimeTag
'calt'
Definition digikam-lcms.h:142
@ icSigPreview0Tag
'pre0'
Definition digikam-lcms.h:158
@ icSigUcrBgTag
'bfd '
Definition digikam-lcms.h:174
@ icSigNamedColor2Tag
'ncl2'
Definition digikam-lcms.h:157
@ icSigGreenColorantTag
'gXYZ'
Definition digikam-lcms.h:150
@ icSigNamedColorTag
'ncol' NOTE: OBSOLETE, use ncl2
Definition digikam-lcms.h:156
@ icSigLuminanceTag
'lumi'
Definition digikam-lcms.h:152
@ icSigGamutTag
'gamt'
Definition digikam-lcms.h:148
@ icSigTechnologyTag
'tech'
Definition digikam-lcms.h:173
@ icMaxEnumTag
Definition digikam-lcms.h:177
@ icSigPreview2Tag
'pre2'
Definition digikam-lcms.h:160
@ icSigBlueColorantTag
'bXYZ'
Definition digikam-lcms.h:137
unsigned long DWORD
Definition digikam-lcms.h:61
DIGIKAM_EXPORT cmsHPROFILE dkCmsOpenProfileFromFile(const char *const ICCProfile, const char *const sAccess)
Definition digikam-lcms.cpp:697
DIGIKAM_EXPORT icColorSpaceSignature dkCmsGetPCS(cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:687
DIGIKAM_EXPORT cmsHTRANSFORM dkCmsCreateProofingTransform(cmsHPROFILE Input, DWORD InputFormat, cmsHPROFILE Output, DWORD OutputFormat, cmsHPROFILE Proofing, int Intent, int ProofingIntent, DWORD dwFlags)
Definition digikam-lcms.cpp:612
DIGIKAM_EXPORT LCMSBOOL dkCmsIsTag(cmsHPROFILE hProfile, icTagSignature sig)
Definition digikam-lcms.cpp:692
DIGIKAM_EXPORT icColorSpaceSignature dkCmsGetColorSpace(cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:682
DIGIKAM_EXPORT cmsHTRANSFORM dkCmsCreateTransform(cmsHPROFILE Input, DWORD InputFormat, cmsHPROFILE Output, DWORD OutputFormat, int Intent, DWORD dwFlags)
Definition digikam-lcms.cpp:631
int LCMSBOOL
Definition digikam-lcms.h:58
#define FAR
Definition digikam-lcms.h:51
cmsCIExyY FAR * LPcmsCIExyY
Definition digikam-lcms.h:66
unsigned short * LPWORD
Definition digikam-lcms.h:60
DIGIKAM_EXPORT const BYTE * dkCmsTakeProfileID(cmsHPROFILE hProfile)
Definition digikam-lcms.cpp:481
cmsCIEXYZTRIPLE MAT3
Definition digikam-lcms.h:73
DIGIKAM_EXPORT LCMSBOOL dkCmsAdaptMatrixFromD50(LPMAT3 r, LPcmsCIExyY DestWhitePt)
Definition digikam-lcms.cpp:500