Enables the creation of JP2 files

This commit is contained in:
Francois-Olivier Devaux 2004-07-07 07:35:12 +00:00
parent 688a82dfd9
commit a41ed768c9
1 changed files with 90 additions and 6 deletions

View File

@ -87,7 +87,7 @@ void help_display()
printf
("-i : source file (-i source.pnm also *.pgm, *.ppm) required\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("-help : Display the help information optional\n ");
printf("\n");
@ -276,6 +276,9 @@ int main(int argc, char **argv)
int ir = 0;
int res_spec = 0; /* For various precinct sizes specification */
char sep;
char *outbuf;
FILE *f;
/* default value */
/* ------------- */
@ -308,6 +311,8 @@ int main(int argc, char **argv)
tcp_init = &cp_init.tcps[0];
tcp_init->numlayers = 0;
cp.intermed_file=1;
while (1) {
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");
@ -358,6 +363,29 @@ int main(int argc, char **argv)
/* ----------------------------------------------------- */
case 'o': /* OUT fill */
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;
/* ----------------------------------------------------- */
case 'r': /* rates rates/distorsion */
@ -577,7 +605,7 @@ int main(int argc, char **argv)
/* -------------- */
if (!infile || !outfile) {
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;
}
@ -763,10 +791,66 @@ int main(int argc, char **argv)
}
}
len = j2k_encode(&img, &cp, outfile, cp.tdx * cp.tdy * 2, index);
if (len == 0) {
fprintf(stderr, "failed to encode image\n");
return 1;
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);
if (len == 0) {
fprintf(stderr, "failed to encode image\n");
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 */