Change CMakeLists.txt to build examples by default (image_to_j2k and j2k_to_image).
[openjpeg.git] / codec / j2k_to_image.c
index feee30a0671c59f61718238e31455515ed4b9bcd..3b1915c74547afce9c7ed4f3235eb53d1ec56724 100644 (file)
@@ -41,8 +41,9 @@
 #include "index.h"
 
 #ifndef WIN32
-#define stricmp strcasecmp
-#define strnicmp strncasecmp
+#include <strings.h>
+#define _stricmp strcasecmp
+#define _strnicmp strncasecmp
 #endif
 
 /* ----------------------------------------------------------------------- */
@@ -58,7 +59,7 @@
 #define TIF_DFMT 14
 #define RAW_DFMT 15
 #define TGA_DFMT 16
-
+#define PNG_DFMT 17
 /* ----------------------------------------------------------------------- */
 
 typedef struct dircnt{
@@ -73,7 +74,7 @@ typedef struct img_folder{
        /** The directory path of the folder containing input images*/
        char *imgdirpath;
        /** Output format*/
-       char *out_format;
+       const char *out_format;
        /** Enable option*/
        char set_imgdir;
        /** Enable Cod Format for output*/
@@ -188,15 +189,15 @@ int load_images(dircnt_t *dirptr, char *imgdirpath){
 
 int get_file_format(char *filename) {
        unsigned int i;
-       static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp","tif", "raw", "tga", "j2k", "jp2", "jpt", "j2c" };
-       static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT };
+       static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp","tif", "raw", "tga", "png", "j2k", "jp2", "jpt", "j2c", "jpc" };
+       static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT, J2K_CFMT };
        char * ext = strrchr(filename, '.');
        if (ext == NULL)
                return -1;
        ext++;
        if(ext) {
                for(i = 0; i < sizeof(format)/sizeof(*format); i++) {
-                       if(strnicmp(ext, extension[i], 3) == 0) {
+                       if(_strnicmp(ext, extension[i], 3) == 0) {
                                return format[i];
                        }
                }
@@ -286,6 +287,7 @@ int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,i
                                        case TIF_DFMT:
                                        case RAW_DFMT:
                                        case TGA_DFMT:
+                                       case PNG_DFMT:
                                                break;
                                        default:
                                                fprintf(stderr, "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!! \n", outfile);
@@ -323,6 +325,9 @@ int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,i
                                        case TGA_DFMT:
                                                img_fol->out_format = "raw";
                                                break;
+                                       case PNG_DFMT:
+                                               img_fol->out_format = "png";
+                                               break;
                                        default:
                                                fprintf(stderr, "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!! \n", outformat);
                                                return 1;
@@ -548,18 +553,18 @@ int main(int argc, char **argv) {
                        dirptr->filename = (char**) malloc(num_images*sizeof(char*));
 
                        if(!dirptr->filename_buf){
-                               return 0;
+                               return 1;
                        }
                        for(i=0;i<num_images;i++){
                                dirptr->filename[i] = dirptr->filename_buf + i*OPJ_PATH_LEN;
                        }
                }
                if(load_images(dirptr,img_fol.imgdirpath)==1){
-                       return 0;
+                       return 1;
                }
                if (num_images==0){
                        fprintf(stdout,"Folder is empty\n");
-                       return 0;
+                       return 1;
                }
        }else{
                num_images=1;
@@ -786,6 +791,15 @@ int main(int argc, char **argv) {
                                fprintf(stdout,"Successfully generated Outfile %s\n",parameters.outfile);
                        }
                        break;
+
+               case PNG_DFMT:                  /* PNG */
+                       if(imagetopng(image, parameters.outfile)){
+                               fprintf(stdout,"Error generating png file. Outfile %s not generated\n",parameters.outfile);
+                       }
+                       else {
+                               fprintf(stdout,"Successfully generated Outfile %s\n",parameters.outfile);
+                       }
+                       break;
                }
 
                /* free remaining structures */