コード例 #1
0
ファイル: test_make_pattern.c プロジェクト: mdaus/nitro
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);
}
コード例 #2
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);
}