Ejemplo n.º 1
0
NITF_BOOL makeImageSource(imgInfo *img, nitf_Writer *writer, nitf_Error *error)
{
    nitf_ImageSource *source;     /* Image source for image writer */
    nitf_BandSource *bandSource;  /* Current band source */
    int i;

    img->imgWriter = nitf_Writer_newImageWriter(writer, img->index, error);
    source = nitf_ImageSource_construct(error);
    if (source == NULL)
        return(NITF_FAILURE);

    for (i = 0;i < img->nBands;i++)
    {
        bandSource = nitf_MemorySource_construct((char *) (img->buffers[i]),
                     img->imgSize, (nitf_Off) 0, 0, 0, error);
        if (!bandSource)
            return(NITF_FAILURE);

        if (!nitf_ImageSource_addBand(source, bandSource, error))
            return(NITF_FAILURE);
    }

    img->imgSource = source;

    if (!nitf_ImageWriter_attachSource(img->imgWriter, source, error))
        return(NITF_FAILURE);

    nitf_ImageIO_setPadPixel(img->imgWriter->imageBlocker,
                             img->padValue, img->bytes);

    return(NITF_SUCCESS);
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
void doWrite(nitf_Record * record, char *inRootFile, char *outFile)
{
    nitf_ListIterator iter;

    nitf_ImageWriter *iWriter;
    nitf_ImageSource *iSource;

    nitf_SegmentWriter *segmentWriter;
    nitf_SegmentSource *segmentSource;

    nitf_ListIterator end;
    int i;
    int numImages;
    int numTexts;
    int numDataExtensions;
    nitf_Writer *writer = NULL;
    nitf_Error error;
    nitf_IOHandle output_io = nitf_IOHandle_create(outFile,
                              NITF_ACCESS_WRITEONLY,
                              NITF_CREATE,
                              &error);

    if (NITF_INVALID_HANDLE(output_io))
    {
        goto CATCH_ERROR;
    }

    writer = nitf_Writer_construct(&error);
    if (!writer)
    {
        goto CATCH_ERROR;
    }
    if (!nitf_Writer_prepare(writer, record, output_io, &error))
    {
        goto CATCH_ERROR;
    }

    if (!nitf_Field_get
            (record->header->numImages, &numImages, NITF_CONV_INT,
             NITF_INT32_SZ, &error))
    {
        nitf_Error_print(&error, stderr, "nitf::Value::get() failed");
        numImages = 0;
    }

    if (!nitf_Field_get
            (record->header->numTexts, &numTexts, NITF_CONV_INT,
             NITF_INT32_SZ, &error))
    {
        nitf_Error_print(&error, stderr, "nitf::Value::get() failed");
        numTexts = 0;
    }

    if (!nitf_Field_get
            (record->header->numDataExtensions, &numDataExtensions, NITF_CONV_INT,
             NITF_INT32_SZ, &error))
    {
        nitf_Error_print(&error, stderr, "nitf::Value::get() failed");
        numDataExtensions = 0;
    }

    if (record->images)
    {
        end = nitf_List_end(record->images);
        for (i = 0; i < numImages; i++)
        {
            int nbands;
            nitf_ImageSegment *imseg = NULL;
            iter = nitf_List_at(record->images, i);
            assert(nitf_ListIterator_notEqualTo(&iter, &end));

            imseg = (nitf_ImageSegment *) nitf_ListIterator_get(&iter);
            assert(imseg);

            if (!nitf_Field_get
                    (imseg->subheader->numImageBands, &nbands, NITF_CONV_INT,
                     NITF_INT32_SZ, &error))
                goto CATCH_ERROR;

            iWriter = nitf_Writer_newImageWriter(writer, i, &error);
            if (!iWriter)
            {
                goto CATCH_ERROR;
            }
            iSource = setupBands(nbands, i, inRootFile);
            if (!iSource)
                goto CATCH_ERROR;
            if (!nitf_ImageWriter_attachSource(iWriter, iSource, &error))
                goto CATCH_ERROR;
        }
    }

    if (record->texts)
    {
        end = nitf_List_end(record->texts);
        for (i = 0; i < numTexts; i++)
        {
            nitf_TextSegment *textSeg = NULL;
            char *inFile = NULL;
            nitf_IOHandle sourceHandle;

            iter = nitf_List_at(record->texts, i);
            assert(nitf_ListIterator_notEqualTo(&iter, &end));

            textSeg = (nitf_TextSegment *) nitf_ListIterator_get(&iter);
            assert(textSeg);

            segmentWriter = nitf_Writer_newTextWriter(writer, i, &error);
            if (!segmentWriter)
            {
                goto CATCH_ERROR;
            }

            /* setup file */
            inFile = makeBandName(inRootFile, "text", i, -1);
            sourceHandle =
                nitf_IOHandle_create(inFile, NITF_ACCESS_READONLY,
                                     NITF_OPEN_EXISTING, &error);
            if (NITF_INVALID_HANDLE(sourceHandle))
                goto CATCH_ERROR;

            freeBandName(&inFile);

            segmentSource = nitf_SegmentFileSource_construct(sourceHandle, 0, 0, &error);
            if (!segmentSource)
                goto CATCH_ERROR;
            if (!nitf_SegmentWriter_attachSource(segmentWriter, segmentSource, &error))
                goto CATCH_ERROR;
        }
    }

    if (record->dataExtensions)
    {
        end = nitf_List_end(record->dataExtensions);
        for (i = 0; i < numDataExtensions; i++)
        {
            nitf_DESegment *DESeg = NULL;
            char *inFile = NULL;
            nitf_IOHandle sourceHandle;

            iter = nitf_List_at(record->dataExtensions, i);
            assert(nitf_ListIterator_notEqualTo(&iter, &end));

            DESeg = (nitf_DESegment *) nitf_ListIterator_get(&iter);
            assert(DESeg);

            segmentWriter = nitf_Writer_newDEWriter(writer, i, &error);
            if (!segmentWriter)
            {
                goto CATCH_ERROR;
            }

            /* setup file */
            inFile = makeBandName(inRootFile, "DE", i, -1);
            sourceHandle =
                nitf_IOHandle_create(inFile, NITF_ACCESS_READONLY,
                                     NITF_OPEN_EXISTING, &error);
            if (NITF_INVALID_HANDLE(sourceHandle))
                goto CATCH_ERROR;

            freeBandName(&inFile);

            segmentSource = nitf_SegmentFileSource_construct(sourceHandle, 0, 0, &error);
            if (!segmentSource)
                goto CATCH_ERROR;
            if (!nitf_SegmentWriter_attachSource(segmentWriter, segmentSource, &error))
                goto CATCH_ERROR;

        }
    }

    if (!nitf_Writer_write(writer, &error))
    {
        goto CATCH_ERROR;
    }


    /*nitf_ImageSource_destruct(&iSource);*/
    nitf_IOHandle_close(output_io);
    nitf_Writer_destruct(&writer);
    return;
CATCH_ERROR:
    nitf_Error_print(&error, stderr, "During write");
    exit(EXIT_FAILURE);
}