使用 GDAL C 编写栅格 API
Write Raster using GDAL C API
我正在努力了解 GDAL C API。
我有一些包含 int、float 或 double 值的数组,当我尝试使用 GDALRasterIO 将它们转储到 tiff 文件时,我得到垂直带与 0 值交替出现的栅格(我怀疑未初始化的值...
这是一个最小的例子:
#include "gdal.h"
void create_new_tiff(char * DstFilename, int nx, int ny);
int main()
{
char filename[10] = "test.tif";
int nx, ny;
nx = 600;
ny = 500;
create_new_tiff(filename, nx, ny);
return 0;
}
和 create_new_tiff 函数:
void create_new_tiff(char * DstFilename, int nx, int ny)
{
const char *pszFormat = "GTiff";
int test[nx*ny];
GDALDatasetH hDstDS;
GDALRasterBandH hBand;
char **papszOptions = NULL;
GDALAllRegister();
GDALDriverH hDriver = GDALGetDriverByName( pszFormat );
hDstDS = GDALCreate( hDriver, DstFilename, nx, ny, 1, GDT_Int16, papszOptions);
hBand = GDALGetRasterBand( hDstDS, 1 );
for(int i=0; i<nx*ny; i++) test[i] = 4;
CPLErr Err = GDALRasterIO( hBand, GF_Write, 0, 0, nx, ny, test, nx, ny, GDT_Int16, 0, 0);
GDALClose( hDstDS );
}
看起来我混淆了数据类型,但无法弄清楚哪里出了问题...
谢谢
PS:这是栅格在 QGis 中的样子:
这个错误是因为我假设 "int" 默认情况下实际上是 2 个字节,这是错误的。 int 的大小取决于实现。参见 is int by default long int in C?
查看凯尔评论
我正在努力了解 GDAL C API。 我有一些包含 int、float 或 double 值的数组,当我尝试使用 GDALRasterIO 将它们转储到 tiff 文件时,我得到垂直带与 0 值交替出现的栅格(我怀疑未初始化的值...
这是一个最小的例子:
#include "gdal.h"
void create_new_tiff(char * DstFilename, int nx, int ny);
int main()
{
char filename[10] = "test.tif";
int nx, ny;
nx = 600;
ny = 500;
create_new_tiff(filename, nx, ny);
return 0;
}
和 create_new_tiff 函数:
void create_new_tiff(char * DstFilename, int nx, int ny)
{
const char *pszFormat = "GTiff";
int test[nx*ny];
GDALDatasetH hDstDS;
GDALRasterBandH hBand;
char **papszOptions = NULL;
GDALAllRegister();
GDALDriverH hDriver = GDALGetDriverByName( pszFormat );
hDstDS = GDALCreate( hDriver, DstFilename, nx, ny, 1, GDT_Int16, papszOptions);
hBand = GDALGetRasterBand( hDstDS, 1 );
for(int i=0; i<nx*ny; i++) test[i] = 4;
CPLErr Err = GDALRasterIO( hBand, GF_Write, 0, 0, nx, ny, test, nx, ny, GDT_Int16, 0, 0);
GDALClose( hDstDS );
}
看起来我混淆了数据类型,但无法弄清楚哪里出了问题...
谢谢
PS:这是栅格在 QGis 中的样子:
这个错误是因为我假设 "int" 默认情况下实际上是 2 个字节,这是错误的。 int 的大小取决于实现。参见 is int by default long int in C?
查看凯尔评论