I've not reviewed closely your code, but I'd suggest you to study the source code for gdalwarp, that probably contains the missing bit. I think you should probably try using GDALCreateGenImgProjTransformer2() instead of GDALCreateGenImgProjTransformer(). That's what gdalwarp.cpp does... http://trac.osgeo.org/gdal/browser/trunk/gdal/apps/gdalwarp.cpp