66 #include <jasper/jas_config.h>    68 #include <jasper/jas_types.h>    69 #include <jasper/jas_stream.h>    76 #define JAS_ICC_MAGIC           0x61637370    78 #define JAS_ICC_HDRLEN  128    81 #define JAS_ICC_CLAS_IN 0x73636e72     82 #define JAS_ICC_CLAS_DPY        0x6d6e7472     83 #define JAS_ICC_CLAS_OUT        0x70727472     84 #define JAS_ICC_CLAS_LNK        0x6c696e6b     85 #define JAS_ICC_CLAS_CNV        0x73706163     86 #define JAS_ICC_CLAS_ABS        0x61627374     87 #define JAS_ICC_CLAS_NAM        0x6e6d636c     90 #define JAS_ICC_COLORSPC_XYZ    0x58595a20     91 #define JAS_ICC_COLORSPC_LAB    0x4c616220     92 #define JAS_ICC_COLORSPC_LUV    0x4c757620     93 #define JAS_ICC_COLORSPC_YCBCR  0x59436272     94 #define JAS_ICC_COLORSPC_YXY    0x59787920     95 #define JAS_ICC_COLORSPC_RGB    0x52474220     96 #define JAS_ICC_COLORSPC_GRAY   0x47524159     97 #define JAS_ICC_COLORSPC_HSV    0x48535620     98 #define JAS_ICC_COLORSPC_HLS    0x484c5320     99 #define JAS_ICC_COLORSPC_CMYK   0x434d594b    100 #define JAS_ICC_COLORSPC_CMY    0x434d5920    101 #define JAS_ICC_COLORSPC_2      0x32434c52    102 #define JAS_ICC_COLORSPC_3      0x33434c52    103 #define JAS_ICC_COLORSPC_4      0x34434c52    104 #define JAS_ICC_COLORSPC_5      0x35434c52    105 #define JAS_ICC_COLORSPC_6      0x36434c52    106 #define JAS_ICC_COLORSPC_7      0x37434c52    107 #define JAS_ICC_COLORSPC_8      0x38434c52    108 #define JAS_ICC_COLORSPC_9      0x39434c52    109 #define JAS_ICC_COLORSPC_10     0x41434c52    110 #define JAS_ICC_COLORSPC_11     0x42434c52    111 #define JAS_ICC_COLORSPC_12     0x43434c52    112 #define JAS_ICC_COLORSPC_13     0x44434c52    113 #define JAS_ICC_COLORSPC_14     0x45434c52    114 #define JAS_ICC_COLORSPC_15     0x46434c52    117 #define JAS_ICC_REFCOLORSPC_XYZ         0x58595a20    118 #define JAS_ICC_REFCOLORSPC_LAB         0x4c616220    121 #define JAS_ICC_PLATFORM_APPL   0x4150504c    122 #define JAS_ICC_PLATFORM_MSFT   0x4d534654    123 #define JAS_ICC_PLATFORM_SGI    0x53474920    124 #define JAS_ICC_PLATFORM_SUNW   0x53554e57    125 #define JAS_ICC_PLATFORM_TGNT   0x54474e54    128 #define JAS_ICC_FLAGS_EMBED     0x01    129 #define JAS_ICC_FLAGS_NOSEP     0x02    132 #define JAS_ICC_ATTR_TRANS      0x01    133 #define JAS_ICC_ATTR_MATTE      0x02    136 #define JAS_ICC_INTENT_PER      0    137 #define JAS_ICC_INTENT_REL      1    138 #define JAS_ICC_INTENT_SAT      2    139 #define JAS_ICC_INTENT_ABS      3    142 #define JAS_ICC_TAG_ATOB0               0x41324230    143 #define JAS_ICC_TAG_ATOB1               0x41324231    144 #define JAS_ICC_TAG_ATOB2               0x41324232    145 #define JAS_ICC_TAG_BLUMATCOL           0x6258595a    146 #define JAS_ICC_TAG_BLUTRC              0x62545243    147 #define JAS_ICC_TAG_BTOA0               0x42324130    148 #define JAS_ICC_TAG_BTOA1               0x42324131    149 #define JAS_ICC_TAG_BTOA2               0x42324132    150 #define JAS_ICC_TAG_CALTIME             0x63616c74    151 #define JAS_ICC_TAG_CHARTARGET          0x74617267    152 #define JAS_ICC_TAG_CPYRT               0x63707274    153 #define JAS_ICC_TAG_CRDINFO             0x63726469    154 #define JAS_ICC_TAG_DEVMAKERDESC        0x646d6e64    155 #define JAS_ICC_TAG_DEVMODELDESC        0x646d6464    156 #define JAS_ICC_TAG_DEVSET              0x64657673    157 #define JAS_ICC_TAG_GAMUT               0x67616d74    158 #define JAS_ICC_TAG_GRYTRC              0x6b545243    159 #define JAS_ICC_TAG_GRNMATCOL           0x6758595a    160 #define JAS_ICC_TAG_GRNTRC              0x67545243    161 #define JAS_ICC_TAG_LUM                 0x6c756d69    162 #define JAS_ICC_TAG_MEASURE             0x6d656173    163 #define JAS_ICC_TAG_MEDIABLKPT          0x626b7074    164 #define JAS_ICC_TAG_MEDIAWHIPT          0x77747074    165 #define JAS_ICC_TAG_NAMCOLR             0x6e636f6c    166 #define JAS_ICC_TAG_NAMCOLR2            0x6e636c32    167 #define JAS_ICC_TAG_OUTRESP             0x72657370    168 #define JAS_ICC_TAG_PREVIEW0            0x70726530    169 #define JAS_ICC_TAG_PREVIEW1            0x70726531    170 #define JAS_ICC_TAG_PREVIEW2            0x70726532    171 #define JAS_ICC_TAG_PROFDESC            0x64657363    172 #define JAS_ICC_TAG_PROFSEQDESC         0x70736571    173 #define JAS_ICC_TAG_PSDCRD0             0x70736430    174 #define JAS_ICC_TAG_PSCRDD1             0x70736431    175 #define JAS_ICC_TAG_PSCRDD2             0x70736432    176 #define JAS_ICC_TAG_PSCRDD3             0x70736433    177 #define JAS_ICC_TAG_PS2CSA              0x70733273    178 #define JAS_ICC_TAG_PS2RENINTENT        0x70733269    179 #define JAS_ICC_TAG_REDMATCOL           0x7258595a    180 #define JAS_ICC_TAG_REDTRC              0x72545243    181 #define JAS_ICC_TAG_SCRNGDES            0x73637264    182 #define JAS_ICC_TAG_SCRNG               0x7363726e    183 #define JAS_ICC_TAG_TECH                0x74656368    184 #define JAS_ICC_TAG_UCRBG               0x62666420    185 #define JAS_ICC_TAG_VIEWCONDDESC        0x76756564    186 #define JAS_ICC_TAG_VIEWCOND            0x76696577    189 #define JAS_ICC_TYPE_CRDINFO            0x63726469    190 #define JAS_ICC_TYPE_CURV               0x63757276    191 #define JAS_ICC_TYPE_DATA               0x64617461    192 #define JAS_ICC_TYPE_TIME               0x6474696d    193 #define JAS_ICC_TYPE_DEVSET             0x64657673    194 #define JAS_ICC_TYPE_LUT16              0x6d667432    195 #define JAS_ICC_TYPE_LUT8               0x6d667431    196 #define JAS_ICC_TYPE_MEASURE            0x6d656173    197 #define JAS_ICC_TYPE_NAMCOLR            0x6e636f6c    198 #define JAS_ICC_TYPE_NAMCOLR2           0x6e636c32    199 #define JAS_ICC_TYPE_PROFSEQDESC        0x70736571    200 #define JAS_ICC_TYPE_RESPCURVSET16      0x72637332    201 #define JAS_ICC_TYPE_SF32               0x73663332    202 #define JAS_ICC_TYPE_SCRNG              0x7363726e    203 #define JAS_ICC_TYPE_SIG                0x73696720    204 #define JAS_ICC_TYPE_TXTDESC            0x64657363    205 #define JAS_ICC_TYPE_TXT                0x74657874    206 #define JAS_ICC_TYPE_UF32               0x75663332    207 #define JAS_ICC_TYPE_UCRBG              0x62666420    208 #define JAS_ICC_TYPE_UI16               0x75693136    209 #define JAS_ICC_TYPE_UI32               0x75693332    210 #define JAS_ICC_TYPE_UI8                0x75693038    211 #define JAS_ICC_TYPE_UI64               0x75693634    212 #define JAS_ICC_TYPE_VIEWCOND           0x76696577    213 #define JAS_ICC_TYPE_XYZ                0x58595a20    215 typedef uint_fast8_t jas_iccuint8_t;
   216 typedef uint_fast16_t jas_iccuint16_t;
   217 typedef uint_fast32_t jas_iccuint32_t;
   218 typedef int_fast32_t jas_iccsint32_t;
   219 typedef int_fast32_t jas_iccs15fixed16_t;
   220 typedef uint_fast32_t jas_iccu16fixed16_t;
   221 typedef uint_fast64_t jas_iccuint64_t;
   222 typedef uint_fast32_t jas_iccsig_t;
   224 typedef jas_iccsig_t jas_icctagsig_t;
   225 typedef jas_iccsig_t jas_icctagtype_t;
   226 typedef jas_iccsig_t jas_iccattrname_t;
   230         jas_iccuint16_t year;
   231         jas_iccuint16_t month;
   233         jas_iccuint16_t hour;
   240         jas_iccs15fixed16_t x;
   241         jas_iccs15fixed16_t y;
   242         jas_iccs15fixed16_t z;
   247         jas_iccuint32_t numents;
   248         jas_iccuint16_t *ents;
   253         jas_iccuint32_t asclen;
   255         jas_iccuint32_t uclangcode; 
   256         jas_iccuint32_t uclen; 
   258         jas_iccuint16_t sccode; 
   259         jas_iccuint8_t maclen; 
   260         jas_uchar macdata[69]; 
   269         jas_iccuint8_t numinchans;
   270         jas_iccuint8_t numoutchans;
   271         jas_iccsint32_t e[3][3];
   272         jas_iccuint8_t clutlen;
   273         jas_iccuint8_t *clut;
   274         jas_iccuint16_t numintabents;
   275         jas_iccuint8_t **intabs;
   276         jas_iccuint8_t *intabsbuf;
   277         jas_iccuint16_t numouttabents;
   278         jas_iccuint8_t **outtabs;
   279         jas_iccuint8_t *outtabsbuf;
   283         jas_iccuint8_t numinchans;
   284         jas_iccuint8_t numoutchans;
   285         jas_iccsint32_t e[3][3];
   286         jas_iccuint8_t clutlen;
   287         jas_iccuint16_t *clut;
   288         jas_iccuint16_t numintabents;
   289         jas_iccuint16_t **intabs;
   290         jas_iccuint16_t *intabsbuf;
   291         jas_iccuint16_t numouttabents;
   292         jas_iccuint16_t **outtabs;
   293         jas_iccuint16_t *outtabsbuf;
   296 struct jas_iccattrval_s;
   299         void (*destroy)(
struct jas_iccattrval_s *);
   300         int (*copy)(
struct jas_iccattrval_s *, 
struct jas_iccattrval_s *);
   301         int (*input)(
struct jas_iccattrval_s *, jas_stream_t *, int);
   302         int (*output)(
struct jas_iccattrval_s *, jas_stream_t *);
   303         int (*getsize)(
struct jas_iccattrval_s *);
   304         void (*dump)(
struct jas_iccattrval_s *, FILE *);
   305 } jas_iccattrvalops_t;
   308 typedef struct jas_iccattrval_s {
   311         jas_iccattrvalops_t *ops; 
   315                 jas_icctxtdesc_t txtdesc;
   318                 jas_icclut16_t lut16;
   324         jas_iccuint32_t size; 
   325         jas_iccsig_t cmmtype; 
   326         jas_iccuint32_t version; 
   328         jas_iccsig_t colorspc; 
   329         jas_iccsig_t refcolorspc; 
   332         jas_iccsig_t platform; 
   333         jas_iccuint32_t flags; 
   336         jas_iccuint64_t attr; 
   339         jas_iccsig_t creator; 
   344         jas_iccattrval_t *val;
   350         jas_iccattr_t *attrs;
   353 typedef struct jas_icctagtabent_s {
   358         struct jas_icctagtabent_s *first;
   359 } jas_icctagtabent_t;
   362         jas_iccuint32_t numents;
   363         jas_icctagtabent_t *ents;
   369         jas_icctagtab_t tagtab;
   370         jas_iccattrtab_t *attrtab;
   374         jas_iccuint32_t type;
   375         jas_iccattrvalops_t ops;
   376 } jas_iccattrvalinfo_t;
   378 JAS_DLLEXPORT jas_iccprof_t *jas_iccprof_load(jas_stream_t *in);
   379 JAS_DLLEXPORT 
int jas_iccprof_save(jas_iccprof_t *prof, jas_stream_t *out);
   380 JAS_DLLEXPORT 
void jas_iccprof_destroy(jas_iccprof_t *prof);
   381 JAS_DLLEXPORT jas_iccattrval_t *jas_iccprof_getattr(jas_iccprof_t *prof,
   382   jas_iccattrname_t name);
   383 JAS_DLLEXPORT 
int jas_iccprof_setattr(jas_iccprof_t *prof, jas_iccattrname_t name,
   384   jas_iccattrval_t *val);
   385 JAS_DLLEXPORT 
void jas_iccprof_dump(jas_iccprof_t *prof, FILE *out);
   386 JAS_DLLEXPORT jas_iccprof_t *jas_iccprof_copy(jas_iccprof_t *prof);
   387 JAS_DLLEXPORT 
int jas_iccprof_gethdr(jas_iccprof_t *prof, jas_icchdr_t *hdr);
   388 JAS_DLLEXPORT 
int jas_iccprof_sethdr(jas_iccprof_t *prof, jas_icchdr_t *hdr);
   390 JAS_DLLEXPORT 
void jas_iccattrval_destroy(jas_iccattrval_t *attrval);
   391 JAS_DLLEXPORT 
void jas_iccattrval_dump(jas_iccattrval_t *attrval, FILE *out);
   392 JAS_DLLEXPORT 
int jas_iccattrval_allowmodify(jas_iccattrval_t **attrval);
   393 JAS_DLLEXPORT jas_iccattrval_t *jas_iccattrval_clone(jas_iccattrval_t *attrval);
   394 JAS_DLLEXPORT jas_iccattrval_t *jas_iccattrval_create(jas_iccuint32_t type);
   396 JAS_DLLEXPORT 
void jas_iccattrtab_dump(jas_iccattrtab_t *attrtab, FILE *out);
   398 extern jas_uchar jas_iccprofdata_srgb[];
   399 extern int jas_iccprofdata_srgblen;
   400 extern jas_uchar jas_iccprofdata_sgray[];
   401 extern int jas_iccprofdata_sgraylen;
   402 JAS_DLLEXPORT jas_iccprof_t *jas_iccprof_createfrombuf(jas_uchar *buf, 
int len);
   403 JAS_DLLEXPORT jas_iccprof_t *jas_iccprof_createfromclrspc(
int clrspc);