Enables the creation of JP2 files
This commit is contained in:
parent
688a82dfd9
commit
a41ed768c9
|
@ -87,7 +87,7 @@ void help_display()
|
||||||
printf
|
printf
|
||||||
("-i : source file (-i source.pnm also *.pgm, *.ppm) required\n");
|
("-i : source file (-i source.pnm also *.pgm, *.ppm) required\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("-o : destination file (-o dest.j2k) required\n");
|
printf("-o : destination file (-o dest.j2k or .jp2) required\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("-help : Display the help information optional\n ");
|
printf("-help : Display the help information optional\n ");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
@ -276,6 +276,9 @@ int main(int argc, char **argv)
|
||||||
int ir = 0;
|
int ir = 0;
|
||||||
int res_spec = 0; /* For various precinct sizes specification */
|
int res_spec = 0; /* For various precinct sizes specification */
|
||||||
char sep;
|
char sep;
|
||||||
|
char *outbuf;
|
||||||
|
FILE *f;
|
||||||
|
|
||||||
|
|
||||||
/* default value */
|
/* default value */
|
||||||
/* ------------- */
|
/* ------------- */
|
||||||
|
@ -308,6 +311,8 @@ int main(int argc, char **argv)
|
||||||
tcp_init = &cp_init.tcps[0];
|
tcp_init = &cp_init.tcps[0];
|
||||||
tcp_init->numlayers = 0;
|
tcp_init->numlayers = 0;
|
||||||
|
|
||||||
|
cp.intermed_file=1;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
int c = getopt(argc, argv,
|
int c = getopt(argc, argv,
|
||||||
"i:o:r:q:f:t:n:c:b:x:p:s:d:h:P:S:E:M:R:T:C:I");
|
"i:o:r:q:f:t:n:c:b:x:p:s:d:h:P:S:E:M:R:T:C:I");
|
||||||
|
@ -358,6 +363,29 @@ int main(int argc, char **argv)
|
||||||
/* ----------------------------------------------------- */
|
/* ----------------------------------------------------- */
|
||||||
case 'o': /* OUT fill */
|
case 'o': /* OUT fill */
|
||||||
outfile = optarg;
|
outfile = optarg;
|
||||||
|
while (*outfile) {
|
||||||
|
outfile++;
|
||||||
|
}
|
||||||
|
outfile--;
|
||||||
|
S3 = *outfile;
|
||||||
|
outfile--;
|
||||||
|
S2 = *outfile;
|
||||||
|
outfile--;
|
||||||
|
S1 = *outfile;
|
||||||
|
|
||||||
|
outfile = optarg;
|
||||||
|
|
||||||
|
if ((S1 == 'j' && S2 == '2' && S3 == 'k') || (S1 == 'J' && S2 == '2' && S3 == 'K'))
|
||||||
|
cp.JPEG2000_format=0;
|
||||||
|
else if ((S1 == 'j' && S2 == 'p' && S3 == '2') || (S1 == 'J' && S2 == 'P' && S3 == '2'))
|
||||||
|
cp.JPEG2000_format=1;
|
||||||
|
else {
|
||||||
|
fprintf(stderr,"Unknown output format image *.%c%c%c [only *.j2k, *.jp2]!! \n",S1,S2,S3);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
/* ----------------------------------------------------- */
|
/* ----------------------------------------------------- */
|
||||||
case 'r': /* rates rates/distorsion */
|
case 'r': /* rates rates/distorsion */
|
||||||
|
@ -577,7 +605,7 @@ int main(int argc, char **argv)
|
||||||
/* -------------- */
|
/* -------------- */
|
||||||
if (!infile || !outfile) {
|
if (!infile || !outfile) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"usage: image_to_j2k -i image-file -o j2k-file (+ options)\n");
|
"usage: image_to_j2k -i image-file -o j2k/jp2-file (+ options)\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -763,11 +791,67 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cp.JPEG2000_format==0) { /* J2K format output */
|
||||||
|
if (cp.intermed_file==1) { /* After the encoding of each tile, j2k_encode
|
||||||
|
stores the data in the file*/
|
||||||
len = j2k_encode(&img, &cp, outfile, cp.tdx * cp.tdy * 2, index);
|
len = j2k_encode(&img, &cp, outfile, cp.tdx * cp.tdy * 2, index);
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
fprintf(stderr, "failed to encode image\n");
|
fprintf(stderr, "failed to encode image\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
outbuf = (char *) malloc( cp.tdx * cp.tdy * 2);
|
||||||
|
cio_init(outbuf, cp.tdx * cp.tdy * 2);
|
||||||
|
len = j2k_encode(&img, &cp, outbuf, cp.tdx * cp.tdy * 2, index);
|
||||||
|
if (len == 0) {
|
||||||
|
fprintf(stderr, "failed to encode image\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
f = fopen(outfile, "wb");
|
||||||
|
if (!f) {
|
||||||
|
fprintf(stderr, "failed to open %s for writing\n", outfile);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
fwrite(outbuf, 1, len, f);
|
||||||
|
free(outbuf);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else /* JP2 format output */
|
||||||
|
{
|
||||||
|
jp2_struct_t * jp2_struct;
|
||||||
|
jp2_struct = (jp2_struct_t *) malloc(sizeof(jp2_struct_t));
|
||||||
|
jp2_struct->image = &img;
|
||||||
|
|
||||||
|
/* Initialising the standard JP2 box content*/
|
||||||
|
/* If you wish to modify those boxes, you have to modify the jp2_struct content*/
|
||||||
|
if (jp2_init_stdjp2(jp2_struct, &img))
|
||||||
|
{
|
||||||
|
fprintf(stderr,"Error with jp2 initialization");
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (cp.intermed_file==1) {
|
||||||
|
/*For the moment, JP2 format does not use intermediary files for each tile*/
|
||||||
|
cp.intermed_file=0;
|
||||||
|
}
|
||||||
|
outbuf = (char *) malloc( cp.tdx * cp.tdy * 2);
|
||||||
|
cio_init(outbuf, cp.tdx * cp.tdy * 2);
|
||||||
|
len = jp2_encode(jp2_struct, &cp, outbuf, index);
|
||||||
|
if (len == 0) {
|
||||||
|
fprintf(stderr, "failed to encode image\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
f = fopen(outfile, "wb");
|
||||||
|
if (!f) {
|
||||||
|
fprintf(stderr, "failed to open %s for writing\n", outfile);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
fwrite(outbuf, 1, len, f);
|
||||||
|
free(outbuf);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
||||||
/* Remove the temporary files */
|
/* Remove the temporary files */
|
||||||
/* -------------------------- */
|
/* -------------------------- */
|
||||||
|
|
Loading…
Reference in New Issue