• 大小: 12.92MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-10
  • 语言: C/C++
  • 标签: 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  CutImage\bin\
     文件      379865  2016-01-06 10:38  CutImage\bin\1.jpg
     文件      197120  2016-03-22 22:53  CutImage\bin\CutImage.exe
     文件       72086  2016-03-22 22:53  CutImage\bin\CutImage.exp
     文件     1013880  2016-03-22 22:53  CutImage\bin\CutImage.ilk
     文件      119618  2016-03-22 22:53  CutImage\bin\CutImage.lib
     文件     1043456  2016-03-22 22:53  CutImage\bin\CutImage.pdb
     文件     9125376  2015-06-18 07:42  CutImage\bin\gdal110.dll
     目录           0  2016-03-22 22:22  CutImage\CutImage\
     文件        1245  2016-03-22 22:22  CutImage\CutImage.sln
     文件        9728  2016-03-22 22:54  CutImage\CutImage.suo
     文件        5698  2016-03-22 22:23  CutImage\CutImage\CutImage.vcxproj
     文件         942  2016-03-22 22:17  CutImage\CutImage\CutImage.vcxproj.filters
     文件         143  2016-03-22 22:01  CutImage\CutImage\CutImage.vcxproj.user
     目录           0  2016-03-22 22:22  CutImage\CutImage\Debug\
     文件         544  2016-03-22 22:22  CutImage\CutImage\Debug\cl.command.1.tlog
     文件       14320  2016-03-22 22:22  CutImage\CutImage\Debug\CL.read.1.tlog
     文件         312  2016-03-22 22:22  CutImage\CutImage\Debug\CL.write.1.tlog
     文件         381  2016-03-22 22:22  CutImage\CutImage\Debug\CutImage.exe.intermediate.manifest
     文件          55  2016-03-22 22:22  CutImage\CutImage\Debug\CutImage.lastbuildstate
     文件       26220  2016-03-22 22:22  CutImage\CutImage\Debug\CutImage.log
     文件           0  2016-03-22 22:22  CutImage\CutImage\Debug\CutImage.unsuccessfulbuild
     文件         713  2016-03-22 22:17  CutImage\CutImage\Debug\CutImage.vcxprojResolveAssemblyReference.cache
     文件           0  2016-03-22 22:17  CutImage\CutImage\Debug\CutImage.write.1.tlog
     文件           2  2016-03-22 22:22  CutImage\CutImage\Debug\link.command.1.tlog
     文件           2  2016-03-22 22:22  CutImage\CutImage\Debug\link.read.1.tlog
     文件           2  2016-03-22 22:22  CutImage\CutImage\Debug\link.write.1.tlog
     文件      603895  2016-03-22 22:22  CutImage\CutImage\Debug\main.obj
     文件      314368  2016-03-22 22:22  CutImage\CutImage\Debug\vc100.idb
     文件      307200  2016-03-22 22:22  CutImage\CutImage\Debug\vc100.pdb
............此处省略2340个文件信息

评论

共有 条评论