我正在使用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)?
答案 0 :(得分:0)
输出数据集output.png
的尺寸为99 x 99,因为它们也是输入数据集input.gis
的尺寸。要创建具有不同维度的新数据集,您需要使用GDAL tutorial中所述的Create
方法。
遗憾的是,PNG驱动程序不支持这种方法,它为您提供了两个选项:
Create
方法的其他输出格式。Create
方法在内存中创建数据集,然后在其上使用CreateCopy
- 如this GIS.SE post