1 /* 2 * Copyright (c) 2002-2003 Michael David Adams. 3 * All rights reserved. 4 */ 5 6 /* __START_OF_JASPER_LICENSE__ 7 * 8 * JasPer License Version 2.0 9 * 10 * Copyright (c) 2001-2006 Michael David Adams 11 * Copyright (c) 1999-2000 Image Power, Inc. 12 * Copyright (c) 1999-2000 The University of British Columbia 13 * 14 * All rights reserved. 15 * 16 * Permission is hereby granted, free of charge, to any person (the 17 * "User") obtaining a copy of this software and associated documentation 18 * files (the "Software"), to deal in the Software without restriction, 19 * including without limitation the rights to use, copy, modify, merge, 20 * publish, distribute, and/or sell copies of the Software, and to permit 21 * persons to whom the Software is furnished to do so, subject to the 22 * following conditions: 23 * 24 * 1. The above copyright notices and this permission notice (which 25 * includes the disclaimer below) shall be included in all copies or 26 * substantial portions of the Software. 27 * 28 * 2. The name of a copyright holder shall not be used to endorse or 29 * promote products derived from the Software without specific prior 30 * written permission. 31 * 32 * THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS 33 * LICENSE. NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER 34 * THIS DISCLAIMER. THE SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 35 * "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 36 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 37 * PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO 38 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL 39 * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING 40 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, 41 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 42 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. NO ASSURANCES ARE 43 * PROVIDED BY THE COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE 44 * THE PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY. 45 * EACH COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS 46 * BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL 47 * PROPERTY RIGHTS OR OTHERWISE. AS A CONDITION TO EXERCISING THE RIGHTS 48 * GRANTED HEREUNDER, EACH USER HEREBY ASSUMES SOLE RESPONSIBILITY TO SECURE 49 * ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF ANY. THE SOFTWARE 50 * IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN MISSION-CRITICAL 51 * SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR FACILITIES, 52 * AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL 53 * SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH 54 * THE FAILURE OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH, 55 * PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH 56 * RISK ACTIVITIES"). THE COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY 57 * EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES. 58 * 59 * __END_OF_JASPER_LICENSE__ 60 */ 61 62 /*! 63 * @file jas_icc.h 64 * @brief ICC Profile 65 */ 66 67 #ifndef JAS_ICC_H 68 #define JAS_ICC_H 69 70 /* The configuration header file should be included first. */ 71 #include <jasper/jas_config.h> 72 73 #include <jasper/jas_types.h> 74 #include <jasper/jas_stream.h> 75 76 #include <stdio.h> 77 78 #ifdef __cplusplus 79 extern "C" { 80 #endif 81 82 /* Profile file signature. */ 83 #define JAS_ICC_MAGIC 0x61637370 84 85 #define JAS_ICC_HDRLEN 128 86 87 /* Profile/device class signatures. */ 88 #define JAS_ICC_CLAS_IN 0x73636e72 /* input device */ 89 #define JAS_ICC_CLAS_DPY 0x6d6e7472 /* display device */ 90 #define JAS_ICC_CLAS_OUT 0x70727472 /* output device */ 91 #define JAS_ICC_CLAS_LNK 0x6c696e6b /* device link */ 92 #define JAS_ICC_CLAS_CNV 0x73706163 /* color space conversion */ 93 #define JAS_ICC_CLAS_ABS 0x61627374 /* abstract */ 94 #define JAS_ICC_CLAS_NAM 0x6e6d636c /* named color */ 95 96 /* Color space signatures. */ 97 #define JAS_ICC_COLORSPC_XYZ 0x58595a20 /* XYZ */ 98 #define JAS_ICC_COLORSPC_LAB 0x4c616220 /* LAB */ 99 #define JAS_ICC_COLORSPC_LUV 0x4c757620 /* LUV */ 100 #define JAS_ICC_COLORSPC_YCBCR 0x59436272 /* YCbCr */ 101 #define JAS_ICC_COLORSPC_YXY 0x59787920 /* Yxy */ 102 #define JAS_ICC_COLORSPC_RGB 0x52474220 /* RGB */ 103 #define JAS_ICC_COLORSPC_GRAY 0x47524159 /* Gray */ 104 #define JAS_ICC_COLORSPC_HSV 0x48535620 /* HSV */ 105 #define JAS_ICC_COLORSPC_HLS 0x484c5320 /* HLS */ 106 #define JAS_ICC_COLORSPC_CMYK 0x434d594b /* CMYK */ 107 #define JAS_ICC_COLORSPC_CMY 0x434d5920 /* CMY */ 108 #define JAS_ICC_COLORSPC_2 0x32434c52 /* 2 channel color */ 109 #define JAS_ICC_COLORSPC_3 0x33434c52 /* 3 channel color */ 110 #define JAS_ICC_COLORSPC_4 0x34434c52 /* 4 channel color */ 111 #define JAS_ICC_COLORSPC_5 0x35434c52 /* 5 channel color */ 112 #define JAS_ICC_COLORSPC_6 0x36434c52 /* 6 channel color */ 113 #define JAS_ICC_COLORSPC_7 0x37434c52 /* 7 channel color */ 114 #define JAS_ICC_COLORSPC_8 0x38434c52 /* 8 channel color */ 115 #define JAS_ICC_COLORSPC_9 0x39434c52 /* 9 channel color */ 116 #define JAS_ICC_COLORSPC_10 0x41434c52 /* 10 channel color */ 117 #define JAS_ICC_COLORSPC_11 0x42434c52 /* 11 channel color */ 118 #define JAS_ICC_COLORSPC_12 0x43434c52 /* 12 channel color */ 119 #define JAS_ICC_COLORSPC_13 0x44434c52 /* 13 channel color */ 120 #define JAS_ICC_COLORSPC_14 0x45434c52 /* 14 channel color */ 121 #define JAS_ICC_COLORSPC_15 0x46434c52 /* 15 channel color */ 122 123 /* Profile connection color space (PCS) signatures. */ 124 #define JAS_ICC_REFCOLORSPC_XYZ 0x58595a20 /* CIE XYZ */ 125 #define JAS_ICC_REFCOLORSPC_LAB 0x4c616220 /* CIE Lab */ 126 127 /* Primary platform signatures. */ 128 #define JAS_ICC_PLATFORM_APPL 0x4150504c /* Apple Computer */ 129 #define JAS_ICC_PLATFORM_MSFT 0x4d534654 /* Microsoft */ 130 #define JAS_ICC_PLATFORM_SGI 0x53474920 /* Silicon Graphics */ 131 #define JAS_ICC_PLATFORM_SUNW 0x53554e57 /* Sun Microsystems */ 132 #define JAS_ICC_PLATFORM_TGNT 0x54474e54 /* Taligent */ 133 134 /* Profile flags. */ 135 #define JAS_ICC_FLAGS_EMBED 0x01 /* embedded */ 136 #define JAS_ICC_FLAGS_NOSEP 0x02 /* no separate use */ 137 138 /* Attributes. */ 139 #define JAS_ICC_ATTR_TRANS 0x01 /* transparent */ 140 #define JAS_ICC_ATTR_MATTE 0x02 /* matte */ 141 142 /* Rendering intents. */ 143 #define JAS_ICC_INTENT_PER 0 /* perceptual */ 144 #define JAS_ICC_INTENT_REL 1 /* relative colorimetric */ 145 #define JAS_ICC_INTENT_SAT 2 /* saturation */ 146 #define JAS_ICC_INTENT_ABS 3 /* absolute colorimetric */ 147 148 /* Tag signatures. */ 149 #define JAS_ICC_TAG_ATOB0 0x41324230 /* */ 150 #define JAS_ICC_TAG_ATOB1 0x41324231 /* */ 151 #define JAS_ICC_TAG_ATOB2 0x41324232 /* */ 152 #define JAS_ICC_TAG_BLUMATCOL 0x6258595a /* */ 153 #define JAS_ICC_TAG_BLUTRC 0x62545243 /* */ 154 #define JAS_ICC_TAG_BTOA0 0x42324130 /* */ 155 #define JAS_ICC_TAG_BTOA1 0x42324131 /* */ 156 #define JAS_ICC_TAG_BTOA2 0x42324132 /* */ 157 #define JAS_ICC_TAG_CALTIME 0x63616c74 /* */ 158 #define JAS_ICC_TAG_CHARTARGET 0x74617267 /* */ 159 #define JAS_ICC_TAG_CPYRT 0x63707274 /* */ 160 #define JAS_ICC_TAG_CRDINFO 0x63726469 /* */ 161 #define JAS_ICC_TAG_DEVMAKERDESC 0x646d6e64 /* */ 162 #define JAS_ICC_TAG_DEVMODELDESC 0x646d6464 /* */ 163 #define JAS_ICC_TAG_DEVSET 0x64657673 /* */ 164 #define JAS_ICC_TAG_GAMUT 0x67616d74 /* */ 165 #define JAS_ICC_TAG_GRYTRC 0x6b545243 /* */ 166 #define JAS_ICC_TAG_GRNMATCOL 0x6758595a /* */ 167 #define JAS_ICC_TAG_GRNTRC 0x67545243 /* */ 168 #define JAS_ICC_TAG_LUM 0x6c756d69 /* */ 169 #define JAS_ICC_TAG_MEASURE 0x6d656173 /* */ 170 #define JAS_ICC_TAG_MEDIABLKPT 0x626b7074 /* */ 171 #define JAS_ICC_TAG_MEDIAWHIPT 0x77747074 /* */ 172 #define JAS_ICC_TAG_NAMCOLR 0x6e636f6c /* */ 173 #define JAS_ICC_TAG_NAMCOLR2 0x6e636c32 /* */ 174 #define JAS_ICC_TAG_OUTRESP 0x72657370 /* */ 175 #define JAS_ICC_TAG_PREVIEW0 0x70726530 /* */ 176 #define JAS_ICC_TAG_PREVIEW1 0x70726531 /* */ 177 #define JAS_ICC_TAG_PREVIEW2 0x70726532 /* */ 178 #define JAS_ICC_TAG_PROFDESC 0x64657363 /* */ 179 #define JAS_ICC_TAG_PROFSEQDESC 0x70736571 /* */ 180 #define JAS_ICC_TAG_PSDCRD0 0x70736430 /* */ 181 #define JAS_ICC_TAG_PSCRDD1 0x70736431 /* */ 182 #define JAS_ICC_TAG_PSCRDD2 0x70736432 /* */ 183 #define JAS_ICC_TAG_PSCRDD3 0x70736433 /* */ 184 #define JAS_ICC_TAG_PS2CSA 0x70733273 /* */ 185 #define JAS_ICC_TAG_PS2RENINTENT 0x70733269 /* */ 186 #define JAS_ICC_TAG_REDMATCOL 0x7258595a /* */ 187 #define JAS_ICC_TAG_REDTRC 0x72545243 /* */ 188 #define JAS_ICC_TAG_SCRNGDES 0x73637264 /* */ 189 #define JAS_ICC_TAG_SCRNG 0x7363726e /* */ 190 #define JAS_ICC_TAG_TECH 0x74656368 /* */ 191 #define JAS_ICC_TAG_UCRBG 0x62666420 /* */ 192 #define JAS_ICC_TAG_VIEWCONDDESC 0x76756564 /* */ 193 #define JAS_ICC_TAG_VIEWCOND 0x76696577 /* */ 194 195 /* Type signatures. */ 196 #define JAS_ICC_TYPE_CRDINFO 0x63726469 /* CRD information */ 197 #define JAS_ICC_TYPE_CURV 0x63757276 /* curve */ 198 #define JAS_ICC_TYPE_DATA 0x64617461 /* data */ 199 #define JAS_ICC_TYPE_TIME 0x6474696d /* date/time */ 200 #define JAS_ICC_TYPE_DEVSET 0x64657673 /* device settings */ 201 #define JAS_ICC_TYPE_LUT16 0x6d667432 /* */ 202 #define JAS_ICC_TYPE_LUT8 0x6d667431 /* */ 203 #define JAS_ICC_TYPE_MEASURE 0x6d656173 /* */ 204 #define JAS_ICC_TYPE_NAMCOLR 0x6e636f6c /* */ 205 #define JAS_ICC_TYPE_NAMCOLR2 0x6e636c32 /* */ 206 #define JAS_ICC_TYPE_PROFSEQDESC 0x70736571 /* profile sequence description */ 207 #define JAS_ICC_TYPE_RESPCURVSET16 0x72637332 /* response curve set 16 */ 208 #define JAS_ICC_TYPE_SF32 0x73663332 /* signed 32-bit fixed-point */ 209 #define JAS_ICC_TYPE_SCRNG 0x7363726e /* screening */ 210 #define JAS_ICC_TYPE_SIG 0x73696720 /* signature */ 211 #define JAS_ICC_TYPE_TXTDESC 0x64657363 /* text description */ 212 #define JAS_ICC_TYPE_TXT 0x74657874 /* text */ 213 #define JAS_ICC_TYPE_UF32 0x75663332 /* unsigned 32-bit fixed-point */ 214 #define JAS_ICC_TYPE_UCRBG 0x62666420 /* */ 215 #define JAS_ICC_TYPE_UI16 0x75693136 /* */ 216 #define JAS_ICC_TYPE_UI32 0x75693332 /* */ 217 #define JAS_ICC_TYPE_UI8 0x75693038 /* */ 218 #define JAS_ICC_TYPE_UI64 0x75693634 /* */ 219 #define JAS_ICC_TYPE_VIEWCOND 0x76696577 /* */ 220 #define JAS_ICC_TYPE_XYZ 0x58595a20 /* XYZ */ 221 222 typedef uint_fast8_t jas_iccuint8_t; 223 typedef uint_fast16_t jas_iccuint16_t; 224 typedef uint_fast32_t jas_iccuint32_t; 225 typedef int_fast32_t jas_iccsint32_t; 226 typedef int_fast32_t jas_iccs15fixed16_t; 227 typedef uint_fast32_t jas_iccu16fixed16_t; 228 typedef uint_fast64_t jas_iccuint64_t; 229 typedef uint_fast32_t jas_iccsig_t; 230 231 typedef jas_iccsig_t jas_icctagsig_t; 232 typedef jas_iccsig_t jas_icctagtype_t; 233 typedef jas_iccsig_t jas_iccattrname_t; 234 235 /* Date/time type. */ 236 typedef struct { 237 jas_iccuint16_t year; 238 jas_iccuint16_t month; 239 jas_iccuint16_t day; 240 jas_iccuint16_t hour; 241 jas_iccuint16_t min; 242 jas_iccuint16_t sec; 243 } jas_icctime_t; 244 245 /* XYZ type. */ 246 typedef struct { 247 jas_iccs15fixed16_t x; 248 jas_iccs15fixed16_t y; 249 jas_iccs15fixed16_t z; 250 } jas_iccxyz_t; 251 252 /* Curve type. */ 253 typedef struct { 254 jas_iccuint32_t numents; 255 jas_iccuint16_t *ents; 256 } jas_icccurv_t; 257 258 /* Text description type. */ 259 typedef struct { 260 jas_iccuint32_t asclen; 261 char *ascdata; /* ASCII invariant description */ 262 jas_iccuint32_t uclangcode; /* Unicode language code */ 263 jas_iccuint32_t uclen; /* Unicode localizable description count */ 264 jas_uchar *ucdata; /* Unicode localizable description */ 265 jas_iccuint16_t sccode; /* ScriptCode code */ 266 jas_iccuint8_t maclen; /* Localizable Macintosh description count */ 267 jas_uchar macdata[69]; /* Localizable Macintosh description */ 268 } jas_icctxtdesc_t; 269 270 /* Text type. */ 271 typedef struct { 272 char *string; /* ASCII character string */ 273 } jas_icctxt_t; 274 275 typedef struct { 276 jas_iccuint8_t numinchans; 277 jas_iccuint8_t numoutchans; 278 jas_iccsint32_t e[3][3]; 279 jas_iccuint8_t clutlen; 280 jas_iccuint8_t *clut; 281 jas_iccuint16_t numintabents; 282 jas_iccuint8_t **intabs; 283 jas_iccuint8_t *intabsbuf; 284 jas_iccuint16_t numouttabents; 285 jas_iccuint8_t **outtabs; 286 jas_iccuint8_t *outtabsbuf; 287 } jas_icclut8_t; 288 289 typedef struct { 290 jas_iccuint8_t numinchans; 291 jas_iccuint8_t numoutchans; 292 jas_iccsint32_t e[3][3]; 293 jas_iccuint8_t clutlen; 294 jas_iccuint16_t *clut; 295 jas_iccuint16_t numintabents; 296 jas_iccuint16_t **intabs; 297 jas_iccuint16_t *intabsbuf; 298 jas_iccuint16_t numouttabents; 299 jas_iccuint16_t **outtabs; 300 jas_iccuint16_t *outtabsbuf; 301 } jas_icclut16_t; 302 303 struct jas_iccattrval_s; 304 305 typedef struct { 306 void (*destroy)(struct jas_iccattrval_s *); 307 int (*copy)(struct jas_iccattrval_s *, const struct jas_iccattrval_s *); 308 int (*input)(struct jas_iccattrval_s *, jas_stream_t *, unsigned); 309 //#ifdef JAS_ENABLE_ENCODER 310 int (*output)(struct jas_iccattrval_s *, jas_stream_t *); 311 //#endif 312 unsigned (*getsize)(const struct jas_iccattrval_s *); 313 void (*dump)(const struct jas_iccattrval_s *, FILE *); 314 } jas_iccattrvalops_t; 315 316 /* Attribute value type (type and value information). */ 317 typedef struct jas_iccattrval_s { 318 unsigned refcnt; /* reference count */ 319 jas_iccsig_t type; /* type */ 320 const jas_iccattrvalops_t *ops; /* type-dependent operations */ 321 union { 322 jas_iccxyz_t xyz; 323 jas_icccurv_t curv; 324 jas_icctxtdesc_t txtdesc; 325 jas_icctxt_t txt; 326 jas_icclut8_t lut8; 327 jas_icclut16_t lut16; 328 } data; /* value */ 329 } jas_iccattrval_t; 330 331 /* Header type. */ 332 typedef struct { 333 jas_iccuint32_t size; /* profile size */ 334 jas_iccsig_t cmmtype; /* CMM type signature */ 335 jas_iccuint32_t version; /* profile version */ 336 jas_iccsig_t clas; /* profile/device class signature */ 337 jas_iccsig_t colorspc; /* color space of data */ 338 jas_iccsig_t refcolorspc; /* profile connection space */ 339 jas_icctime_t ctime; /* creation time */ 340 jas_iccsig_t magic; /* profile file signature */ 341 jas_iccsig_t platform; /* primary platform */ 342 jas_iccuint32_t flags; /* profile flags */ 343 jas_iccsig_t maker; /* device manufacturer signature */ 344 jas_iccsig_t model; /* device model signature */ 345 jas_iccuint64_t attr; /* device setup attributes */ 346 jas_iccsig_t intent; /* rendering intent */ 347 jas_iccxyz_t illum; /* illuminant */ 348 jas_iccsig_t creator; /* profile creator signature */ 349 } jas_icchdr_t; 350 351 typedef struct { 352 jas_iccsig_t name; 353 jas_iccattrval_t *val; 354 } jas_iccattr_t; 355 356 typedef struct { 357 unsigned numattrs; 358 unsigned maxattrs; 359 jas_iccattr_t *attrs; 360 } jas_iccattrtab_t; 361 362 typedef struct jas_icctagtabent_s { 363 jas_iccuint32_t tag; 364 jas_iccuint32_t off; 365 jas_iccuint32_t len; 366 void *data; 367 struct jas_icctagtabent_s *first; 368 } jas_icctagtabent_t; 369 370 typedef struct { 371 jas_iccuint32_t numents; 372 jas_icctagtabent_t *ents; 373 } jas_icctagtab_t; 374 375 /* ICC profile type. */ 376 typedef struct { 377 jas_icchdr_t hdr; 378 jas_icctagtab_t tagtab; 379 jas_iccattrtab_t *attrtab; 380 } jas_iccprof_t; 381 382 typedef struct { 383 jas_iccuint32_t type; 384 jas_iccattrvalops_t ops; 385 } jas_iccattrvalinfo_t; 386 387 JAS_DLLEXPORT jas_iccprof_t *jas_iccprof_load(jas_stream_t *in); 388 JAS_DLLEXPORT int jas_iccprof_save(jas_iccprof_t *prof, jas_stream_t *out); 389 JAS_DLLEXPORT void jas_iccprof_destroy(jas_iccprof_t *prof); 390 JAS_ATTRIBUTE_PURE 391 JAS_DLLEXPORT jas_iccattrval_t *jas_iccprof_getattr(const jas_iccprof_t *prof, 392 jas_iccattrname_t name); 393 JAS_DLLEXPORT int jas_iccprof_setattr(jas_iccprof_t *prof, jas_iccattrname_t name, 394 jas_iccattrval_t *val); 395 JAS_DLLEXPORT void jas_iccprof_dump(const jas_iccprof_t *prof, FILE *out); 396 JAS_DLLEXPORT jas_iccprof_t *jas_iccprof_copy(const jas_iccprof_t *prof); 397 JAS_DLLEXPORT int jas_iccprof_gethdr(const jas_iccprof_t *prof, jas_icchdr_t *hdr); 398 JAS_DLLEXPORT int jas_iccprof_sethdr(jas_iccprof_t *prof, const jas_icchdr_t *hdr); 399 400 JAS_DLLEXPORT void jas_iccattrval_destroy(jas_iccattrval_t *attrval); 401 JAS_DLLEXPORT void jas_iccattrval_dump(const jas_iccattrval_t *attrval, FILE *out); 402 JAS_DLLEXPORT int jas_iccattrval_allowmodify(jas_iccattrval_t **attrval); 403 JAS_DLLEXPORT jas_iccattrval_t *jas_iccattrval_clone(jas_iccattrval_t *attrval); 404 JAS_DLLEXPORT jas_iccattrval_t *jas_iccattrval_create(jas_iccuint32_t type); 405 406 JAS_DLLEXPORT void jas_iccattrtab_dump(const jas_iccattrtab_t *attrtab, FILE *out); 407 408 JAS_DLLEXPORT extern const jas_uchar jas_iccprofdata_srgb[]; 409 JAS_DLLEXPORT extern const unsigned jas_iccprofdata_srgblen; 410 JAS_DLLEXPORT extern const jas_uchar jas_iccprofdata_sgray[]; 411 JAS_DLLEXPORT extern const unsigned jas_iccprofdata_sgraylen; 412 JAS_DLLEXPORT jas_iccprof_t *jas_iccprof_createfrombuf(const jas_uchar *buf, unsigned len); 413 JAS_DLLEXPORT jas_iccprof_t *jas_iccprof_createfromclrspc(unsigned clrspc); 414 415 #ifdef __cplusplus 416 } 417 #endif 418 419 #endif 420