资源简介
基于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\li
文件 2 2016-03-22 22:22 CutImage\CutImage\Debug\li
文件 2 2016-03-22 22:22 CutImage\CutImage\Debug\li
文件 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个文件信息
- 上一篇:MFC文件搜索程序
- 下一篇:侯捷老师:C++内存管理课件(PDF高清).rar
评论
共有 条评论