Gdal:增加使用createcopy()后获得的图像的尺寸(分辨率)

时间:2015-05-20 22:37:51

标签: visual-c++ gis gdal

我正在使用visual c ++ gdal从我的桌面读取.gis文件,然后输出该文件的图像(png / jpeg)。代码接受" input.gis"文件,然后创建" output.png"。 这是我的工作代码:

GDALDriver *poDriver;
GDALDataset  *poDataset;
char **papszMetadata;
double adfGeoTransform[6];
int nBlockXSize, nBlockYSize;
int bGotMin, bGotMax;
double adfMinMax[2];
GDALAllRegister();
poDataset = (GDALDataset *) GDALOpen("C:\\input.gis", GA_ReadOnly );
if( poDataset == NULL )
{
    MessageBox::Show("cannot open");      
}
else
{   
    poDataset->GetGeoTransform( adfGeoTransform ); 
    GDALRasterBand  *poBand;
    poBand = poDataset->GetRasterBand( 1 );
    float *pafScanline;
    int   nXSize = poBand->GetXSize();

    poBand->GetBlockSize( &nBlockXSize, &nBlockYSize );
    adfMinMax[0] = poBand->GetMinimum( &bGotMin );
    adfMinMax[1] = poBand->GetMaximum( &bGotMax );
    if( ! (bGotMin && bGotMax) )
        GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax);
    poDriver = GetGDALDriverManager()->GetDriverByName("PNG");
    if( poDriver == NULL )
        printf("Cannot create image");
    else
    {
        papszMetadata = poDriver->GetMetadata();
        if( CSLFetchBoolean( papszMetadata, GDAL_DCAP_CREATECOPY, FALSE ) )
        {
            printf( "Driver %s supports CreateCopy() method.\n", "png" );
        }
    }
    GDALDataset *poDstDS;
    poDstDS = poDriver->CreateCopy( "C:\\output.png", poDataset, FALSE, NULL, NULL, NULL );
    if( poDstDS != NULL )
         GDALClose( (GDALDatasetH) poDstDS );
    GDALClose( (GDALDatasetH) poDataset );

}

我的问题是当我使用gdal的createcopy()函数时,图像输出的大小总是99 X 99(我猜是默认大小)。如何增加要输出的图像尺寸(例如512 x 512)?

1 个答案:

答案 0 :(得分:0)

输出数据集output.png的尺寸为99 x 99,因为它们也是输入数据集input.gis的尺寸。要创建具有不同维度的新数据集,您需要使用GDAL tutorial中所述的Create方法。

遗憾的是,PNG驱动程序不支持这种方法,它为您提供了两个选项:

  1. 选择支持Create方法的其他输出格式。
  2. 使用Create方法在内存中创建数据集,然后在其上使用CreateCopy - 如this GIS.SE post
  3. 中所述