GDAL截取图片

利用GDAL的RasterIO函数可以从原图中抠出一块矩形图片。如下面的代码:

pSrcDS->GetRasterBand(1)->RasterIO(GF_Read, 矩形左上角到图片左边的距离(单位像素)iStartX, 
矩形左上角到图片上边的距离(单位像素)iStartY, 矩形宽度iWidth, 矩形高度iHeight, 
存储数据的首地址pDataBuff, 地址宽度iWidth, 地址高度iHeight, 
数据类型,如GDT_Byte, 0, 0);

示例代码将从一块3色的jpg图片中,提取第一个波段里的一块矩形(300乘300,矩形的左上角距离原图左边和上边的距离分别是600像素)数据,然后保存到一个名为part.tif的图片中:


#include "stdafx.h"
#include "gdal_priv.h"


#pragma comment(lib, "gdal_i.lib")



int _tmain(int argc, _TCHAR* argv[])
{
	GDALAllRegister();
 
	//读取图片的一部分
	GDALDataset* pSrcDS=(GDALDataset*)GDALOpen("C:\\ziji\\yaogan.jpg", GA_ReadOnly);
	unsigned char * pDataBuff = new unsigned char[300 * 300];
	pSrcDS->GetRasterBand(1)->RasterIO(GF_Read, 600, 600, 300, 300, pDataBuff, 300, 300, GDT_Byte, 0, 0);
	GDALClose(pSrcDS);

	//写入新文件
	GDALDriver * poDriver = GetGDALDriverManager()->GetDriverByName("GTiff");
	GDALDataset* pDstDS = poDriver->Create("part.tif", 300, 300, 1, GDT_Byte, NULL);
	pDstDS->GetRasterBand(1)->RasterIO(GF_Write, 0, 0, 300, 300, pDataBuff, 300, 300, GDT_Byte, 0, 0);
	GDALClose(pDstDS);

	delete [] pDataBuff;
	return 0;
}

效果:

被截取的矩形部分大致位于红色圆圈包括部分。右方是截取结果。

发布了148 篇原创文章 · 获赞 46 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/liji_digital/article/details/103689895
今日推荐