int main(int argc, char *argv[]) { char *vectorFile; /* Vector file name */ char *inputFile; /* Input file name */ char *outputFile; /* Output file name */ FILE *vector; /* File stream for input vector */ /* Arguments for new */ test_nitf_ImageIOConstructArgs *newArgs; /* Arguments for read */ test_nitf_ImageIOReadArgs *readArgs; char *errorStr; /* Error string */ nitf_Record *record; /* Record used for input and output */ nitf_FileHeader *fileHdr; /* File header */ nitf_ImageSegment *imgSeg; /* New image segment */ nitf_Writer *writer; /* Writer for output */ nitf_ImageWriter *imgWriter; /* Image writer */ nitf_ImageSource *imgSource; /* Image source */ nitf_IOHandle out; /* Handle for output */ nitf_Error error; /* Error object */ nitf_Uint8 ***data; /* Generated data [band][row][col] */ if (argc < 4) { fprintf(stderr, "test_make_pattern vector input output\n"); exit(-1); } vectorFile = argv[1]; inputFile = argv[2]; outputFile = argv[3]; vector = fopen(vectorFile, "r"); if (vector == NULL) { fprintf(stderr, "Error opening vector file %s\n", vectorFile); exit(-1); } newArgs = test_nitf_ImageIOReadConstructArgs(vector, &errorStr); if (newArgs == NULL) { fprintf(stderr, "%s\n", errorStr); return(-1); } fclose(vector); /* Create the input record which will be used for output */ record = readRecord(inputFile); /* Setup the image segment */ imgSeg = nitf_Record_newImageSegment(record, &error); if (imgSeg == NULL) { nitf_Error_print(&error, stderr, "Error reading input "); exit(EXIT_FAILURE); } setupImageSubheader(newArgs, record, imgSeg); /* Create Image */ if (strcmp(newArgs->dataPattern, "brcI4") == 0) { data = (nitf_Uint8 ***) test_nitf_ImageIO_brcI4(newArgs, &errorStr); if (data == NULL) { fprintf(stderr, "%s\n", errorStr); exit(-1); } } else if (strcmp(newArgs->dataPattern, "brcC8") == 0) { data = (nitf_Uint8 ***) test_nitf_ImageIO_brcC8(newArgs, &errorStr); if (data == NULL) { fprintf(stderr, "%s\n", errorStr); exit(-1); } } else if (strncmp(newArgs->dataPattern, "blocks_", 7) == 0) { data = (nitf_Uint8 ***) test_nitf_ImageIO_block(newArgs, &errorStr); if (data == NULL) { fprintf(stderr, "%s\n", errorStr); exit(-1); } } else { fprintf(stderr, "Invalid pattern method %s\n"); exit(-1); } /* Create output file */ out = nitf_IOHandle_create(outputFile, NITF_ACCESS_WRITEONLY, NITF_CREATE | NITF_TRUNCATE, &error); if (NITF_INVALID_HANDLE(out)) { nitf_Error_print(&error, stderr, "Error creating output file"); exit(1); } writer = nitf_Writer_construct(&error); if (writer == NULL) { nitf_Error_print(&error, stderr, "Error creating writer object"); exit(1); } if (!nitf_Writer_prepare(writer, record, out, &error)) { nitf_Error_print(&error, stderr, "Error setting up write"); exit(1); } imgWriter = nitf_Writer_newImageWriter(writer, 0, &error); if (imgWriter == NULL) { nitf_Error_print(&error, stderr, "Error setting up write"); exit(1); } imgSource = makeImageSource(newArgs, (char ***) data); nitf_ImageWriter_setWriteCaching(imgWriter, 1); if (!nitf_ImageWriter_attachSource(imgWriter, imgSource, &error)) { nitf_Error_print(&error, stderr, "Error setting up write"); exit(1); } if (!nitf_Writer_write(writer, &error)) { nitf_Error_print(&error, stderr, "Error writing up write"); exit(1); } /* Destroy things */ test_nitf_ImageIO_freeArray(data); nitf_IOHandle_close(out); exit(0); }
int main(int argc, char *argv[]) { FILE *vector; /* File stream for input vector */ /* Arguments for new */ test_nitf_ImageIOConstructArgs *newArgs; /* Arguments for read */ test_nitf_ImageIOReadArgs *readArgs; char *errorStr; /* Error string */ nitf_ImageSubheader *subheader; /* Subheader for ImageIO constructor */ nitf_IOHandle io; /* Handle for output */ nitf_Error error; /* Error object */ nitf_ImageIO *image; /* ImageIO for image */ nitf_Uint8 *user[NUM_BANDS_MAX]; /* User buffer for write rows */ nitf_Uint8 ***data; /* Generated data [band][row][col] */ nitf_Uint32 band; /* Current band */ nitf_Uint32 row; /* Current row */ nitf_Uint32 col; /* Current column*/ if (argc < 3) { fprintf(stderr, "Not enough arguments\n"); exit(-1); } vector = fopen(argv[1], "r"); if (vector == NULL) { fprintf(stderr, "Error opening vector file %s\n", argv[1]); exit(-1); } newArgs = test_nitf_ImageIOReadConstructArgs(vector, &errorStr); if (newArgs == NULL) { fprintf(stderr, "%s\n", errorStr); return(-1); } fclose(vector); /* Create a fake image subheader to give to ImageIO constructor */ subheader = test_nitf_ImageIO_fakeSubheader(newArgs, &errorStr); if (subheader == NULL) { fprintf(stderr, "%s", error); return(-1); } /* Create Image */ if (strcmp(newArgs->dataPattern, "brcI4") == 0) { data = (nitf_Uint8 ***) test_nitf_ImageIO_brcI4(newArgs, &errorStr); if (data == NULL) { fprintf(stderr, "%s\n", errorStr); exit(-1); } } else if (strcmp(newArgs->dataPattern, "brcC8") == 0) { data = (nitf_Uint8 ***) test_nitf_ImageIO_brcC8(newArgs, &errorStr); if (data == NULL) { fprintf(stderr, "%s\n", errorStr); exit(-1); } } else { fprintf(stderr, "Invalid pattern method %s\n"); exit(-1); } /* Create output file */ io = nitf_IOHandle_create(argv[2], NITF_ACCESS_WRITEONLY, NITF_CREATE | NITF_TRUNCATE, &error); if (NITF_INVALID_HANDLE(io)) { nitf_Error_print(&error, stderr, "Error creating output file"); exit(1); } /* Create the ImageIO structure */ /* What about segment length in write ?? */ image = nitf_ImageIO_construct(subheader, 0, 0, NULL, NULL, &error); if (image == NULL) { nitf_Error_print(&error, stderr, "Error creating ImageIO"); exit(1); } /* Setup for write */ nitf_ImageIO_setPadPixel(image, newArgs->padValue, NITF_NBPP_TO_BYTES(newArgs->nBits)); if (nitf_ImageIO_writeSequential(image, io, &error) == 0) { nitf_Error_print(&error, stderr, "Error creating ImageIO"); exit(1); } /* Write rows */ for (row = 0;row < newArgs->nRows;row++) { for (band = 0;band < newArgs->nBands;band++) user[band] = (nitf_Uint8 *) & (data[band][row][0]); if (!nitf_ImageIO_writeRows(image, io, 1, user, &error)) { nitf_Error_print(&error, stderr, "Writing rows"); exit(1); } } if (!nitf_ImageIO_writeDone(image, io, &error)) { nitf_Error_print(&error, stderr, "Writing rows"); exit(1); } /* Destroy things */ test_nitf_ImageIO_freeArray(data); nitf_ImageIO_destruct(&image); nitf_IOHandle_close(io); exit(0); }