[gdal-dev] reading large image files

stephen tan sts5678 at yahoo.com
Wed Jul 16 11:53:21 EDT 2008


I have a nitf image that I am trying to read into an array using gdal-1.5.1.  The file is about 1.5G .

gdalinfo returns the following information:
    Size is 27552, 25196
    ...
    Band 1 Block=1024x1024 Type=UInt16, ColorInterp=Undefined

I have tried to read the image into an array using the following code:
    GDALDataset  *poDataset;

    GDALAllRegister();

    poDataset = (GDALDataset *) GDALOpenShared( fname.c_str(), 
GA_ReadOnly );
    if( poDataset == NULL )
    {
        cerr << "Could not open file: " << fname << endl;
        exit(1);
    }

    int width = poDataset->GetRasterXSize();
    int height = poDataset->GetRasterYSize();
    int bands = poDataset->GetRasterCount();

    GDALRasterBand  *poBand;
    int nBlockXSize, nBlockYSize;
   
    poBand = poDataset->GetRasterBand( 1 );

    poBand->GetBlockSize( &nBlockXSize, &nBlockYSize );

    //float* data;
    //data = (float *) CPLMalloc(sizeof(float)*width*height*bands);

    float* data;
    data = new float[width*height*bands];

    //GByte* data;
    //data = (GByte *) CPLMalloc(sizeof(float)*width*height*bands);

    //GByte data[width*height*bands];

    if(poBand->RasterIO( GF_Read, 0, 0, width, height, data, width, 
height, GDT_Byte, 0, 0 ))
    {
        cerr << "Error: Could not read image data." << endl;
        exit(1);
    }
    GDALClose(poDataset);

No errors are returned.  I let it run for several mins before I hit CTRL+C.
Any C++ suggestions on getting the image into a 1D array and/or 2D array 
would be most helpful.  The above code works for smaller images.  I have also tried different GDALSetCacheMax with no success.

Thanks


      


More information about the gdal-dev mailing list