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
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to