20#if OPENJPEG_VER <= JP2K_VER_15
39 if (jp->image!=NULL) {
40 opj_image_destroy(jp->image);
48 if (jp==NULL || jp->image==NULL || jp->image->comps==NULL)
return;
50 jp->xs = jp->image->x1 - jp->image->x0;
51 jp->ys = jp->image->y1 - jp->image->y0;
53 int fac = (int)jp->image->comps->factor;
54 jp->ws = (jp->xs + (1<<fac) - 1)>>fac;
55 jp->hs = (jp->ys + (1<<fac) - 1)>>fac;
57 jp->col = (int)jp->image->numcomps;
75 int depth = (int)jp->image->comps->bpp;
76 DEBUG_MODE PRINT_MESG(
"JBXL::JPEG2KIMage::setup_image: INFO: xs = %d, ys = %d, col = %d, depth = %d\n", jp->xs, jp->ys, jp->col, depth);
77 if (depth==0 || depth==8) {
83 PRINT_MESG(
"JBXL::JPEG2KIMage::setup_image: unknown color mode: col = %d, depth = %d\n", jp->col, depth);
87#if OPENJPEG_VER > JP2K_VER_12
88 freeNull(jp->image->icc_profile_buf);
89 jp->image->icc_profile_len = 0;
103 int format = JP2K_FMT_NONE;
105 if (!memcmp(
buf, JP2K_MAGIC_RFC3745_JP2, 12) || !memcmp(
buf, JP2K_MAGIC_JP2, 4)) {
106 format = JP2K_FMT_JP2;
108 else if (!memcmp(
buf, JP2K_MAGIC_J2K, 4)) {
109 format = JP2K_FMT_J2K;
117 unsigned char head[12];
131 FILE* fp = fopen(fname,
"rb");
137 unsigned char* data = (
unsigned char*)malloc(
len);
143 memset(data, 0,
len);
145 rs = fread(head, 12, 1, fp);
148 if (format==JP2K_FMT_NONE) format = JP2K_FMT_JPT;
150 rs = fread(data,
len, 1, fp);
165 opj_dinfo_t* codec = NULL;
166 opj_cio_t* stream = NULL;
168 opj_dparameters_t parameters;
169 opj_set_default_decoder_parameters(¶meters);
171 if (format==JP2K_FMT_J2K) {
172 codec = opj_create_decompress(CODEC_J2K);
174 else if (format==JP2K_FMT_JP2) {
175 codec = opj_create_decompress(CODEC_JP2);
177 else if (format==JP2K_FMT_JPT) {
178 codec = opj_create_decompress(CODEC_JPT);
181 PRINT_MESG(
"ERROR: JBXL::readJPEG2KData: unknown file format!\n");
186 opj_setup_decoder(codec, ¶meters);
187 stream = opj_cio_open((opj_common_ptr)codec, data,
len);
188 jp.image = opj_decode(codec, stream);
189 if (jp.image==NULL) {
190 opj_cio_close(stream);
191 opj_destroy_decompress(codec);
198 opj_cio_close(stream);
199 opj_destroy_decompress(codec);
208 int i, j, k, yp, yz, zp;
210 memset(&vp, 0,
sizeof(
BSGraph));
211 if (jp.image==NULL || jp.image->comps==NULL) {
217 if (vp.
gp==NULL)
return vp;
219 for (k=0; k<jp.col; k++) {
221 for (j=0; j<jp.hs; j++) {
224 for (i=0; i<jp.ws; i++) {
225 vp.
gp[yz + i] = (
uByte)jp.image->comps[k].data[yp + i];
BSGraph make_BSGraph(int xs, int ys, int zs)
#define JBXL_GRAPH_IVDARG_ERROR
無効な引数
#define JBXL_GRAPH_NODATA_ERROR
データが無い
#define JBXL_GRAPH_OPFILE_ERROR
ファイルのオープンエラー
#define JBXL_GRAPH_MEMORY_ERROR
メモリエラー
#define JBXL_GRAPH_IVDDATA_ERROR
無効なデータ
uByte * gp
グラフィックデータへのポインタ. xs*ys*zs*1Byte.