78 #include <jasper/jas_config.h> 
   80 #include <jasper/jas_stream.h> 
   81 #include <jasper/jas_seq.h> 
   82 #include <jasper/jas_cm.h> 
   98 #define JAS_IMAGE_KIBI                  (JAS_CAST(size_t, 1024)) 
   99 #define JAS_IMAGE_MEBI                  (JAS_IMAGE_KIBI * JAS_IMAGE_KIBI) 
  102 #define JAS_IMAGE_INMEMTHRESH   (256 * JAS_IMAGE_MEBI) 
  108 #define JAS_IMAGE_CT_UNKNOWN    0x10000 
  109 #define JAS_IMAGE_CT_COLOR(n)   ((n) & 0x7fff) 
  110 #define JAS_IMAGE_CT_OPACITY    0x08000 
  112 #define JAS_IMAGE_CT_RGB_R      0 
  113 #define JAS_IMAGE_CT_RGB_G      1 
  114 #define JAS_IMAGE_CT_RGB_B      2 
  116 #define JAS_IMAGE_CT_YCBCR_Y    0 
  117 #define JAS_IMAGE_CT_YCBCR_CB   1 
  118 #define JAS_IMAGE_CT_YCBCR_CR   2 
  120 #define JAS_IMAGE_CT_GRAY_Y     0 
  127 typedef int_fast32_t jas_image_coord_t;
 
  128 #define JAS_IMAGE_COORD_MAX INT_FAST32_MAX 
  129 #define JAS_IMAGE_COORD_MIN INT_FAST32_MIN 
  132 typedef int_fast16_t jas_image_colorspc_t;
 
  135 typedef int_fast32_t jas_image_cmpttype_t;
 
  138 typedef int_fast16_t jas_image_smpltype_t;
 
  148         jas_image_coord_t tlx_;
 
  151         jas_image_coord_t tly_;
 
  154         jas_image_coord_t hstep_;
 
  157         jas_image_coord_t vstep_;
 
  160         jas_image_coord_t width_;
 
  163         jas_image_coord_t height_;
 
  178         jas_stream_t *stream_;
 
  184         jas_image_cmpttype_t type_;
 
  193         jas_image_coord_t tlx_;
 
  196         jas_image_coord_t tly_;
 
  199         jas_image_coord_t brx_;
 
  203         jas_image_coord_t bry_;
 
  214         jas_image_cmpt_t **cmpts_;
 
  217         jas_clrspc_t clrspc_;
 
  219         jas_cmprof_t *cmprof_;
 
  231         jas_image_coord_t tlx;
 
  234         jas_image_coord_t tly;
 
  237         jas_image_coord_t hstep;
 
  240         jas_image_coord_t vstep;
 
  243         jas_image_coord_t width;
 
  246         jas_image_coord_t height;
 
  259 } jas_image_cmptparm_t;
 
  265 #define JAS_IMAGE_MAXFMTS       32 
  272         jas_image_t *(*decode)(jas_stream_t *in, 
const char *opts);
 
  275         int (*encode)(jas_image_t *image, jas_stream_t *out, 
const char *opts);
 
  278         int (*validate)(jas_stream_t *in);
 
  281 } jas_image_fmtops_t;
 
  299         jas_image_fmtops_t ops;
 
  302 } jas_image_fmtinfo_t;
 
  309 JAS_DLLEXPORT jas_image_t *jas_image_create(
int numcmpts,
 
  310   jas_image_cmptparm_t *cmptparms, jas_clrspc_t clrspc);
 
  313 JAS_DLLEXPORT jas_image_t *jas_image_create0(
void);
 
  316 JAS_DLLEXPORT jas_image_t *jas_image_copy(jas_image_t *image);
 
  319 JAS_DLLEXPORT 
void jas_image_destroy(jas_image_t *image);
 
  322 #define jas_image_width(image) \ 
  323         ((image)->brx_ - (image)->tlx_) 
  326 #define jas_image_height(image) \ 
  327         ((image)->bry_ - (image)->tly_) 
  331 #define jas_image_tlx(image) \ 
  336 #define jas_image_tly(image) \ 
  341 #define jas_image_brx(image) \ 
  346 #define jas_image_bry(image) \ 
  350 #define jas_image_numcmpts(image) \ 
  354 #define jas_image_clrspc(image) \ 
  358 #define jas_image_setclrspc(image, clrspc) \ 
  359         ((image)->clrspc_ = (clrspc)) 
  361 #define jas_image_cmpttype(image, cmptno) \ 
  362         ((image)->cmpts_[(cmptno)]->type_) 
  363 #define jas_image_setcmpttype(image, cmptno, type) \ 
  364         ((image)->cmpts_[(cmptno)]->type_ = (type)) 
  367 #define jas_image_cmptwidth(image, cmptno) \ 
  368         ((image)->cmpts_[cmptno]->width_) 
  371 #define jas_image_cmptheight(image, cmptno) \ 
  372         ((image)->cmpts_[cmptno]->height_) 
  375 #define jas_image_cmptsgnd(image, cmptno) \ 
  376         ((image)->cmpts_[cmptno]->sgnd_) 
  379 #define jas_image_cmptprec(image, cmptno) \ 
  380         ((image)->cmpts_[cmptno]->prec_) 
  383 #define jas_image_cmpthstep(image, cmptno) \ 
  384         ((image)->cmpts_[cmptno]->hstep_) 
  387 #define jas_image_cmptvstep(image, cmptno) \ 
  388         ((image)->cmpts_[cmptno]->vstep_) 
  391 #define jas_image_cmpttlx(image, cmptno) \ 
  392         ((image)->cmpts_[cmptno]->tlx_) 
  395 #define jas_image_cmpttly(image, cmptno) \ 
  396         ((image)->cmpts_[cmptno]->tly_) 
  400 #define jas_image_cmptbrx(image, cmptno) \ 
  401         ((image)->cmpts_[cmptno]->tlx_ + (image)->cmpts_[cmptno]->width_ * \ 
  402           (image)->cmpts_[cmptno]->hstep_) 
  406 #define jas_image_cmptbry(image, cmptno) \ 
  407         ((image)->cmpts_[cmptno]->tly_ + (image)->cmpts_[cmptno]->height_ * \ 
  408           (image)->cmpts_[cmptno]->vstep_) 
  411 JAS_DLLEXPORT 
bool jas_image_cmpt_domains_same(jas_image_t *image);
 
  415 JAS_DLLEXPORT uint_fast32_t jas_image_rawsize(jas_image_t *image);
 
  418 JAS_DLLEXPORT jas_image_t *jas_image_decode(jas_stream_t *in, 
int fmt, 
const char *optstr);
 
  421 JAS_DLLEXPORT 
int jas_image_encode(jas_image_t *image, jas_stream_t *out, 
int fmt,
 
  427 JAS_DLLEXPORT 
int jas_image_readcmpt(jas_image_t *image, 
int cmptno, jas_image_coord_t x,
 
  428   jas_image_coord_t y, jas_image_coord_t width, jas_image_coord_t height,
 
  432 JAS_DLLEXPORT 
int jas_image_writecmpt(jas_image_t *image, 
int cmptno, jas_image_coord_t x,
 
  433   jas_image_coord_t y, jas_image_coord_t width, jas_image_coord_t height,
 
  437 JAS_DLLEXPORT 
void jas_image_delcmpt(jas_image_t *image, 
int cmptno);
 
  440 JAS_DLLEXPORT 
int jas_image_addcmpt(jas_image_t *image, 
int cmptno,
 
  441   jas_image_cmptparm_t *cmptparm);
 
  444 JAS_DLLEXPORT 
int jas_image_copycmpt(jas_image_t *dstimage, 
int dstcmptno,
 
  445   jas_image_t *srcimage, 
int srccmptno);
 
  447 #define JAS_IMAGE_CDT_GETSGND(dtype) (((dtype) >> 7) & 1) 
  448 #define JAS_IMAGE_CDT_SETSGND(dtype) (((dtype) & 1) << 7) 
  449 #define JAS_IMAGE_CDT_GETPREC(dtype) ((dtype) & 0x7f) 
  450 #define JAS_IMAGE_CDT_SETPREC(dtype) ((dtype) & 0x7f) 
  452 #define jas_image_cmptdtype(image, cmptno) \ 
  453         (JAS_IMAGE_CDT_SETSGND((image)->cmpts_[cmptno]->sgnd_) | JAS_IMAGE_CDT_SETPREC((image)->cmpts_[cmptno]->prec_)) 
  455 JAS_DLLEXPORT 
int jas_image_depalettize(jas_image_t *image, 
int cmptno, 
int numlutents,
 
  456   int_fast32_t *lutents, 
int dtype, 
int newcmptno);
 
  458 JAS_DLLEXPORT 
int jas_image_readcmptsample(jas_image_t *image, 
int cmptno, 
int x, 
int y);
 
  459 JAS_DLLEXPORT 
void jas_image_writecmptsample(jas_image_t *image, 
int cmptno, 
int x, 
int y,
 
  462 JAS_DLLEXPORT 
int jas_image_getcmptbytype(jas_image_t *image, 
int ctype);
 
  469 JAS_DLLEXPORT 
void jas_image_clearfmts(
void);
 
  472 JAS_DLLEXPORT 
int jas_image_addfmt(
int id, 
char *name, 
char *ext, 
char *desc,
 
  473   jas_image_fmtops_t *ops);
 
  476 JAS_DLLEXPORT 
int jas_image_strtofmt(
char *s);
 
  479 JAS_DLLEXPORT 
char *jas_image_fmttostr(
int fmt);
 
  482 JAS_DLLEXPORT jas_image_fmtinfo_t *jas_image_lookupfmtbyid(
int id);
 
  485 JAS_DLLEXPORT jas_image_fmtinfo_t *jas_image_lookupfmtbyname(
const char *name);
 
  488 JAS_DLLEXPORT 
int jas_image_fmtfromname(
char *filename);
 
  491 JAS_DLLEXPORT 
int jas_image_getfmt(jas_stream_t *in);
 
  494 #define jas_image_cmprof(image) ((image)->cmprof_) 
  495 int jas_image_ishomosamp(jas_image_t *image);
 
  496 int jas_image_sampcmpt(jas_image_t *image, 
int cmptno, 
int newcmptno,
 
  497   jas_image_coord_t ho, jas_image_coord_t vo, jas_image_coord_t hs,
 
  498   jas_image_coord_t vs, 
int sgnd, 
int prec);
 
  499 int jas_image_writecmpt2(jas_image_t *image, 
int cmptno, jas_image_coord_t x,
 
  500   jas_image_coord_t y, jas_image_coord_t width, jas_image_coord_t height,
 
  502 int jas_image_readcmpt2(jas_image_t *image, 
int cmptno, jas_image_coord_t x,
 
  503   jas_image_coord_t y, jas_image_coord_t width, jas_image_coord_t height,
 
  506 #define jas_image_setcmprof(image, cmprof) ((image)->cmprof_ = cmprof) 
  507 JAS_DLLEXPORT jas_image_t *jas_image_chclrspc(jas_image_t *image, jas_cmprof_t *outprof,
 
  509 void jas_image_dump(jas_image_t *image, FILE *out);
 
  515 #if !defined(EXCLUDE_JPG_SUPPORT) 
  517 jas_image_t *jpg_decode(jas_stream_t *in, 
const char *optstr);
 
  518 int jpg_encode(jas_image_t *image, jas_stream_t *out, 
const char *optstr);
 
  519 int jpg_validate(jas_stream_t *in);
 
  522 #if !defined(EXCLUDE_MIF_SUPPORT) 
  524 jas_image_t *mif_decode(jas_stream_t *in, 
const char *optstr);
 
  525 int mif_encode(jas_image_t *image, jas_stream_t *out, 
const char *optstr);
 
  526 int mif_validate(jas_stream_t *in);
 
  529 #if !defined(EXCLUDE_PNM_SUPPORT) 
  531 jas_image_t *pnm_decode(jas_stream_t *in, 
const char *optstr);
 
  532 int pnm_encode(jas_image_t *image, jas_stream_t *out, 
const char *optstr);
 
  533 int pnm_validate(jas_stream_t *in);
 
  536 #if !defined(EXCLUDE_RAS_SUPPORT) 
  538 jas_image_t *ras_decode(jas_stream_t *in, 
const char *optstr);
 
  539 int ras_encode(jas_image_t *image, jas_stream_t *out, 
const char *optstr);
 
  540 int ras_validate(jas_stream_t *in);
 
  543 #if !defined(EXCLUDE_BMP_SUPPORT) 
  545 jas_image_t *bmp_decode(jas_stream_t *in, 
const char *optstr);
 
  546 int bmp_encode(jas_image_t *image, jas_stream_t *out, 
const char *optstr);
 
  547 int bmp_validate(jas_stream_t *in);
 
  550 #if !defined(EXCLUDE_JP2_SUPPORT) 
  552 jas_image_t *jp2_decode(jas_stream_t *in, 
const char *optstr);
 
  553 int jp2_encode(jas_image_t *image, jas_stream_t *out, 
const char *optstr);
 
  554 int jp2_validate(jas_stream_t *in);
 
  557 #if !defined(EXCLUDE_JPC_SUPPORT) 
  559 jas_image_t *jpc_decode(jas_stream_t *in, 
const char *optstr);
 
  560 int jpc_encode(jas_image_t *image, jas_stream_t *out, 
const char *optstr);
 
  561 int jpc_validate(jas_stream_t *in);
 
  564 #if !defined(EXCLUDE_PGX_SUPPORT) 
  566 jas_image_t *pgx_decode(jas_stream_t *in, 
const char *optstr);
 
  567 int pgx_encode(jas_image_t *image, jas_stream_t *out, 
const char *optstr);
 
  568 int pgx_validate(jas_stream_t *in);