使用C++版GDAL裁剪一个单波段的TIF影像
时间: 2024-02-28 13:53:49 浏览: 126
GDAL图片裁剪程序
5星 · 资源好评率100%
好的,你可以参考以下代码来使用C++版GDAL裁剪一个单波段的TIF影像:
```c++
#include <iostream>
#include "gdal_priv.h"
using namespace std;
int main()
{
// 打开原始影像
GDALDataset* src_ds = (GDALDataset*)GDALOpen("input.tif", GA_ReadOnly);
// 设置裁剪窗口
int xoff = 100; // 起始列
int yoff = 100; // 起始行
int xsize = 500; // 列数
int ysize = 500; // 行数
// 创建输出影像
GDALDriver* driver = GetGDALDriverManager()->GetDriverByName("GTiff"); // 获取驱动
GDALDataset* dst_ds = driver->CreateCopy("output.tif", src_ds, FALSE, NULL, NULL, NULL); // 创建输出影像
int band_num = 1; // 波段数
// 设置输出影像的尺寸和起始位置
int dst_xoff = 0;
int dst_yoff = 0;
int dst_xsize = xsize;
int dst_ysize = ysize;
// 读取数据
float* data = new float[xsize * ysize];
GDALRasterBand* src_band = src_ds->GetRasterBand(band_num);
src_band->RasterIO(GF_Read, xoff, yoff, xsize, ysize, data, xsize, ysize, GDT_Float32, 0, 0);
// 写入数据
GDALRasterBand* dst_band = dst_ds->GetRasterBand(band_num);
dst_band->RasterIO(GF_Write, dst_xoff, dst_yoff, dst_xsize, dst_ysize, data, dst_xsize, dst_ysize, GDT_Float32, 0, 0);
// 释放资源
delete[] data;
GDALClose(src_ds);
GDALClose(dst_ds);
return 0;
}
```
在上述代码中,我们首先打开原始影像,然后设置裁剪窗口的起始位置和尺寸。接着,我们使用GDAL库的CreateCopy函数创建输出影像,并设置输出影像的尺寸和起始位置。然后,我们读取原始影像的数据,并将其写入到输出影像中。最后,我们释放申请的资源,并关闭数据集。
你可以根据自己的需求,修改代码中的输入输出文件名、裁剪窗口的起始位置和尺寸,以及数据类型等参数。
阅读全文