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;
}

效果:

被截取的矩形部分大致位於紅色圓圈包括部分。右方是截取結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章