GDAL图片裁剪程序


基于GDAL使用C++编写的图像裁剪程序,并内置了GDAL开发库。
资源截图
代码片段和文件信息
/********************************************************************
 Author: zhoushun
  Email: shunzhou@foxmail.coms
   Date: 2016/03/22
   bri:
*/

#include “assert.h“

#include “../gdal/include/gdal.h“
#include “../gdal/include/gdal_priv.h“

#pragma comment(lib “../gdal/gdal_i.lib“)
/******************************************************************************
函数名:
readImageGDAL
功能:
读取图像一块区域
参数:
unsigned char **pImageData - 指向图像数据指针的指针,将由new操作符动态创建,需要在函数外部由调用者使用delete[]销毁,否则内存泄露
int x int y               - 读取区域的位置
int widthint height       - 图像宽度、高度,由于是引用,可以作为返回值。
nChannels                  - 图像通道,可选值为1或3。1代表灰度图像,3代表RGB图像-1表示按照图像自身通道数目读取。
const char *filePath       - 图像文件路径名称
说明:******************************************************************************/
bool readImageGDAL(unsigned char **pImageData int x int y int width int height 
int &nChannels const char *filePath)
{
GDALAllRegister();
GDALDataset *poDataset = NULL;
poDataset=(GDALDataset*) GDALOpen(filePathGA_ReadOnly);
if(poDataset == NULL)
{
GDALClose(poDataset);
return false;
}
int w = poDataset->GetRasterXSize();
int h = poDataset->GetRasterYSize();

GDALRasterBand* pBand;
int i = 0;
int nRastercount = poDataset->GetRasterCount();
if (nRastercount == 1) //只有1个通道,则为灰度图像
{
nChannels = 1;
pBand = poDataset->GetRasterBand(1); 
*pImageData = new unsigned char[width * height];
pBand->RasterIO(GF_Read
xy //nXOffnYOff:从左上角坐标point(nXOffnYOff)处读取图像数据
widthheight //nXSizenXSize:要读取的图像数据尺寸,注意可以不是band的实际尺寸,这样就是读取roi区域数据
*pImageData //pData:读取的数据即将存储的目的地址。
widthheight //nBufXSizenBufYSize:目的地址处图像的尺寸,如果与roi尺寸不一致,则缩放。
GDT_Byte //eBufType:读取图像后,将要存储为的类型
0 //nPixelSpace:控制同一行相邻像素间隔,0代表使用目的数据类型大小
0); //nLineSpace:控制相邻行的行间隔,0代表使用[目的数据类型大小 * nXsize]
GDALClose(poDataset);
return true;
}
else if ( nRastercount == 3 && (nChannels == 3 || nChannels < 0) ) //有3个通道,并且输出为RGB图像
{
nChannels = 3;
*pImageData = new unsigned char[nRastercount * width * height];
for (i = 1; i <= nRastercount; ++ i)
{
//GDAL内band存储顺序为RGB,需要转换为我们一般的BGR存储,即低地址->高地址为:B G R
unsigned char *pImageOffset = *pImageData + i - 1;
GDALRasterBand* pBand = poDataset->GetRasterBand(nRastercount-i+1);

pBand->RasterIO(
GF_Read
xy
widthheight
pImageOffset
widthheight
GDT_Byte
3
0);
}
GDALClose(poDataset);
return true;
}
else if ( nRastercount == 3 && nChannels == 1 ) //有3个通道,但是要求输出灰度图像
{
unsigned char **img = new unsigned char*[nRastercount];
for (i = 0; i < nRastercount; i++)
{
img[i] = new unsigned char[width * height];
}
for (i = 1; i <= nRastercount; ++ i)
{
//GDAL内band存储顺序为RGB,需要转换为我们一般的BGR存储,即低地址->高地址为:B G R
pBand = poDataset->GetRasterBand(nRastercount-i+1); 
pBand->RasterIO(GF_Read
xy
widthheight

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-03-22 22:54  CutImage
     目录           0  2016-03-22 22:53  CutImagein
     文件      379865  2016-01-06 10:38  CutImagein1.jpg
     文件      197120  2016-03-22 22:53  CutImageinCutImage.exe
     文件       72086  2016-03-22 22:53  CutImageinCutImage.exp
     文件     1013880  2016-03-22 22:53  CutImageinCutImage.ilk
     文件      119618  2016-03-22 22:53  CutImageinCutImage.lib
     文件     1043456  2016-03-22 22:53  CutImageinCutImage.pdb
     文件     9125376  2015-06-18 07:42  CutImageingdal110.dll
     目录           0  2016-03-22 22:22  CutImageCutImage
     文件        1245  2016-03-22 22:22  CutImageCutImage.sln
     文件        9728  2016-03-22 22:54  CutImageCutImage.suo
     文件        5698  2016-03-22 22:23  CutImageCutImageCutImage.vcxproj
     文件         942  2016-03-22 22:17  CutImageCutImageCutImage.vcxproj.filters
     文件         143  2016-03-22 22:01  CutImageCutImageCutImage.vcxproj.user
     目录           0  2016-03-22 22:22  CutImageCutImageDebug
     文件         544  2016-03-22 22:22  CutImageCutImageDebugcl.command.1.tlog
     文件       14320  2016-03-22 22:22  CutImageCutImageDebugCL.read.1.tlog
     文件         312  2016-03-22 22:22  CutImageCutImageDebugCL.write.1.tlog
     文件         381  2016-03-22 22:22  CutImageCutImageDebugCutImage.exe.intermediate.manifest
     文件          55  2016-03-22 22:22  CutImageCutImageDebugCutImage.lastbuildstate
     文件       26220  2016-03-22 22:22  CutImageCutImageDebugCutImage.log
     文件           0  2016-03-22 22:22  CutImageCutImageDebugCutImage.unsuccessfulbuild
     文件         713  2016-03-22 22:17  CutImageCutImageDebugCutImage.vcxprojResolveAssemblyReference.cache
     文件           0  2016-03-22 22:17  CutImageCutImageDebugCutImage.write.1.tlog
     文件           2  2016-03-22 22:22  CutImageCutImageDebuglink.command.1.tlog
     文件           2  2016-03-22 22:22  CutImageCutImageDebuglink.read.1.tlog
     文件           2  2016-03-22 22:22  CutImageCutImageDebuglink.write.1.tlog
     文件      603895  2016-03-22 22:22  CutImageCutImageDebugmain.obj
     文件      314368  2016-03-22 22:22  CutImageCutImageDebugvc100.idb
     文件      307200  2016-03-22 22:22  CutImageCutImageDebugvc100.pdb
............此处省略2340个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)