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
127typedef 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
132typedef int_fast16_t jas_image_colorspc_t;
135typedef int_fast32_t jas_image_cmpttype_t;
138typedef 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);
299 jas_image_fmtops_t ops;
302} jas_image_fmtinfo_t;
309JAS_DLLEXPORT jas_image_t *jas_image_create(
int numcmpts,
310 jas_image_cmptparm_t *cmptparms, jas_clrspc_t clrspc);
313JAS_DLLEXPORT jas_image_t *jas_image_create0(
void);
316JAS_DLLEXPORT jas_image_t *jas_image_copy(jas_image_t *image);
319JAS_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_)
411JAS_DLLEXPORT
bool jas_image_cmpt_domains_same(jas_image_t *image);
415JAS_DLLEXPORT uint_fast32_t jas_image_rawsize(jas_image_t *image);
418JAS_DLLEXPORT jas_image_t *jas_image_decode(jas_stream_t *in,
int fmt,
const char *optstr);
421JAS_DLLEXPORT
int jas_image_encode(jas_image_t *image, jas_stream_t *out,
int fmt,
427JAS_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,
432JAS_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,
437JAS_DLLEXPORT
void jas_image_delcmpt(jas_image_t *image,
int cmptno);
440JAS_DLLEXPORT
int jas_image_addcmpt(jas_image_t *image,
int cmptno,
441 jas_image_cmptparm_t *cmptparm);
444JAS_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_))
455JAS_DLLEXPORT
int jas_image_depalettize(jas_image_t *image,
int cmptno,
int numlutents,
456 int_fast32_t *lutents,
int dtype,
int newcmptno);
458JAS_DLLEXPORT
int jas_image_readcmptsample(jas_image_t *image,
int cmptno,
int x,
int y);
459JAS_DLLEXPORT
void jas_image_writecmptsample(jas_image_t *image,
int cmptno,
int x,
int y,
462JAS_DLLEXPORT
int jas_image_getcmptbytype(jas_image_t *image,
int ctype);
469JAS_DLLEXPORT
void jas_image_clearfmts(
void);
472JAS_DLLEXPORT
int jas_image_addfmt(
int id,
char *name,
char *ext,
char *desc,
473 jas_image_fmtops_t *ops);
476JAS_DLLEXPORT
int jas_image_strtofmt(
char *s);
479JAS_DLLEXPORT
char *jas_image_fmttostr(
int fmt);
482JAS_DLLEXPORT jas_image_fmtinfo_t *jas_image_lookupfmtbyid(
int id);
485JAS_DLLEXPORT jas_image_fmtinfo_t *jas_image_lookupfmtbyname(
const char *name);
488JAS_DLLEXPORT
int jas_image_fmtfromname(
char *filename);
491JAS_DLLEXPORT
int jas_image_getfmt(jas_stream_t *in);
494#define jas_image_cmprof(image) ((image)->cmprof_)
495int jas_image_ishomosamp(jas_image_t *image);
496int 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);
499int 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,
502int 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)
507JAS_DLLEXPORT jas_image_t *jas_image_chclrspc(jas_image_t *image, jas_cmprof_t *outprof,
509void jas_image_dump(jas_image_t *image, FILE *out);
515#if !defined(EXCLUDE_JPG_SUPPORT)
517jas_image_t *jpg_decode(jas_stream_t *in,
const char *optstr);
518int jpg_encode(jas_image_t *image, jas_stream_t *out,
const char *optstr);
519int jpg_validate(jas_stream_t *in);
522#if !defined(EXCLUDE_MIF_SUPPORT)
524jas_image_t *mif_decode(jas_stream_t *in,
const char *optstr);
525int mif_encode(jas_image_t *image, jas_stream_t *out,
const char *optstr);
526int mif_validate(jas_stream_t *in);
529#if !defined(EXCLUDE_PNM_SUPPORT)
531jas_image_t *pnm_decode(jas_stream_t *in,
const char *optstr);
532int pnm_encode(jas_image_t *image, jas_stream_t *out,
const char *optstr);
533int pnm_validate(jas_stream_t *in);
536#if !defined(EXCLUDE_RAS_SUPPORT)
538jas_image_t *ras_decode(jas_stream_t *in,
const char *optstr);
539int ras_encode(jas_image_t *image, jas_stream_t *out,
const char *optstr);
540int ras_validate(jas_stream_t *in);
543#if !defined(EXCLUDE_BMP_SUPPORT)
545jas_image_t *bmp_decode(jas_stream_t *in,
const char *optstr);
546int bmp_encode(jas_image_t *image, jas_stream_t *out,
const char *optstr);
547int bmp_validate(jas_stream_t *in);
550#if !defined(EXCLUDE_JP2_SUPPORT)
552jas_image_t *jp2_decode(jas_stream_t *in,
const char *optstr);
553int jp2_encode(jas_image_t *image, jas_stream_t *out,
const char *optstr);
554int jp2_validate(jas_stream_t *in);
557#if !defined(EXCLUDE_JPC_SUPPORT)
559jas_image_t *jpc_decode(jas_stream_t *in,
const char *optstr);
560int jpc_encode(jas_image_t *image, jas_stream_t *out,
const char *optstr);
561int jpc_validate(jas_stream_t *in);
564#if !defined(EXCLUDE_PGX_SUPPORT)
566jas_image_t *pgx_decode(jas_stream_t *in,
const char *optstr);
567int pgx_encode(jas_image_t *image, jas_stream_t *out,
const char *optstr);
568int pgx_validate(jas_stream_t *in);