I'm very new to GDAL so please be gentle. My searching has found many
references to this problem, but no complete solutions that are explained
clearly enough for me to work through.
I'm using the GDAL API to read in a source image (could be from a variety of
formats), warp it to Spherical Mercator, and then write out the reprojected
image as a GeoTIFF. I would like the parts of the warped TIFF that are not
included in the original image to be represented by fully transparent pixels
instead of the black pixels that are being generated.
I've set "ALPHA" to "YES" in the warp options but this has not helped. I've
also tried adding an extra transparent band, but this made the entire output
image transparent.
Can anybody please explain in very simple terms (for a complete GDAL novice)
how to go about this?
The relevant portion of the code that I'm currently using is below (based
largely on the GDAL warp tutorial).
Thanks in anticipation,
Nik.
void *hTransformArg = GDALCreateGenImgProjTransformer( hSrcDS,
pszSrcWKT, NULL, pszDstWKT, FALSE, 0, 1 );
if ( hTransformArg == NULL )
{
NSLog(@"Failed to create transformation.");
return NULL;
}
// Get approximate output georeferenced bounds and resolution
for file.
double adfDstGeoTransform[6];
int nPixels=0, nLines=0;
if ( GDALSuggestedWarpOutput( hSrcDS, GDALGenImgProjTransform,
hTransformArg, adfDstGeoTransform, &nPixels, &nLines ) != CE_None )
{
NSLog(@"Failed to get suggested warp output.");
return NULL;
}
GDALDestroyGenImgProjTransformer( hTransformArg );
// Create the output file.
char **papszOptions = NULL;
papszOptions = CSLSetNameValue( papszOptions, "ALPHA", "YES" );
hDstDS = GDALCreate( hDriver, [dstPath
cStringUsingEncoding:NSASCIIStringEncoding], nPixels, nLines,
GDALGetRasterCount(hSrcDS), eDT, papszOptions );
if ( hDstDS == NULL )
{
NSLog(@"Failed to open destination file '%@' with
GDALCreate().", [dstPath lastPathComponent]);
return NULL;
}
// Write out the projection definition.
GDALSetProjection( hDstDS, pszDstWKT );
GDALSetGeoTransform( hDstDS, adfDstGeoTransform );
// Copy the color table, if required.
GDALColorTableH hCT;
hCT = GDALGetRasterColorTable( GDALGetRasterBand(hSrcDS,1) );
if( hCT != NULL )
GDALSetRasterColorTable( GDALGetRasterBand(hDstDS,1),
hCT );
// Setup warp options.
GDALWarpOptions *psWarpOptions = GDALCreateWarpOptions();
psWarpOptions->papszWarpOptions =
CSLSetNameValue(psWarpOptions->papszWarpOptions, "INIT_DEST", "NO_DATA" );
psWarpOptions->hSrcDS = hSrcDS;
psWarpOptions->hDstDS = hDstDS;
psWarpOptions->nBandCount = 1;
psWarpOptions->panSrcBands =
(int *) CPLMalloc(sizeof(int) * psWarpOptions->nBandCount );
psWarpOptions->panSrcBands[0] = 1;
psWarpOptions->panDstBands =
(int *) CPLMalloc(sizeof(int) * psWarpOptions->nBandCount );
psWarpOptions->panDstBands[0] = 1;
psWarpOptions->pfnProgress = GDALTermProgress;
// Establish reprojection transformer.
psWarpOptions->pTransformerArg =
GDALCreateGenImgProjTransformer( hSrcDS,
GDALGetProjectionRef(hSrcDS),
hDstDS,
GDALGetProjectionRef(hDstDS),
FALSE, 0.0, 1 );
psWarpOptions->pfnTransformer = GDALGenImgProjTransform;
// Initialize and execute the warp operation.
GDALWarpOperationH oOperation = GDALCreateWarpOperation(
psWarpOptions );
GDALChunkAndWarpImage( oOperation, 0, 0,
GDALGetRasterXSize(
hDstDS ),
GDALGetRasterYSize(
hDstDS ) );
GDALDestroyGenImgProjTransformer(
psWarpOptions->pTransformerArg );
GDALDestroyWarpOptions( psWarpOptions );
GDALDestroyWarpOperation ( oOperation );
_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev