Click or drag to resize

GM_CreateCustomRasterLayer

Creates a new custom layer that represents an in-memory raster. The handle to the newly created layer is returned. You must call GM_CloseLayer on the returned handle when you are done with it. If a problem occurs, NULL is returned for the layer handle.

The layer handle returned can be used just like any other layer handle.

Syntax
GM_LayerHandle_t32 __stdcall GM_CreateCustomRasterLayer

(

const char*                 aDescription,       // IN: Description to use for layer (can be NULL to use default)

const GM_Projection_t*      aProj,              // IN: Native projection of new layer

const GM_RasterLayout_t*    aRasterLayout,      // IN: Raster layer layout

const void*                 aDataBuf            // IN: Grid of raster data values in row-major order

)
Example

EXAMPLE: - Create a Square 24-bit RGB Raster Layer

// Setup raster layout

const sint32 thePixWidth = 128;

const sint32 thePixHeight = 128;

GM_RasterLayout_t theLayout;

memset( &theLayout, 0, sizeof theLayout );

theLayout.mFlags = GM_RasterLayout_CopyData; // copy data buffer so we can free ours

theLayout.mTopLeft.mX = -90.0;   // place it in the US somewhere

theLayout.mTopLeft.mY = 35.0;

theLayout.mXPixelSize = 1.0 / 3600.0;   // one arc second in size

theLayout.mYPixelSize = 1.0 / 3600.0;   // one arc second in size

theLayout.mPixelWidth = thePixWidth;

theLayout.mPixelHeight = thePixHeight;

theLayout.mNumBands = 3;

theLayout.mBitsPerBand = 8;



// Setup projection as lat/lon

GM_Projection_t theGeoProj;

memset( &theGeoProj, 0, sizeof theGeoProj );

theGeoProj.mProjSys = GM_PRJ_GEO;

theGeoProj.mDatum = GM_DATUM_WGS_84;

theGeoProj.mUnit = GM_PRJ_UNIT_ARC_DEGREES;



// Allocate color buffer

uint8* theColorBuf = (uint8*)malloc( ( theLayout.mPixelWidth * theLayout.mPixelHeight * theLayout.mNumBands * theLayout.mBitsPerBand + 7 ) / 8 );

if ( NULL == theColorBuf )

{

    // Out of memory

    return;

}



// Fill in the color buffer. We'll just generate some basic colors

uint8* theCurColorPos = theColorBuf;

for ( sint32 i = 0; i < theLayout.mPixelHeight; i++ )

{

    for ( sint32 j = 0; j < theLayout.mPixelWidth; j++ )

    {

        *theCurColorPos++ = i % 256; // set red

        *theCurColorPos++ = ( i + j ) % 256; // set green

        *theCurColorPos++ = j % 256; // set blue

    }

}



// Create custom raster layer

GM_LayerHandle_t32 theRasterLayer = GM_CreateCustomRasterLayer

    (

    "My Custom Raster Layer", &theGeoProj, &theLayout, theColorBuf

    );



// Free the color buffer

free( theColorBuf );