开发环境:win7,GDAL,VS2010,QT4.7
遥感图像的数据类型多种,如何使用模板函数进行方便处理呢?我的处理方式如下:
class c { public: void computeScatter(int nBandx,int nBandy,int xScale,int yScale, QVector<QVector<int>> &vecScatter,double *pMinMaxX,double *pMinMaxY); private: template <class T> void computeScatterPriv(int nBandx,int nBandy,int xScale,int yScale, QVector<QVector<int>> &vecScatter,double *pMinMaxX,double *pMinMaxY); } C::computeScatter(int nBandx,int nBandy,int xScale,int yScale, QVector<QVector<int>> &vecScatter,double *pMinMaxX,double *pMinMaxY) { int nBandCount=getBandCount(); if(nBandCount<=0) return ; int dataType=getDataType(nBandx); switch(dataType) { case GDT_Byte: computeScatterPriv<unsigned char>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY); break; case GDT_UInt16: computeScatterPriv<unsigned short int>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY); break; case GDT_Int16: computeScatterPriv<short int>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY); break; case GDT_UInt32: computeScatterPriv<unsigned int>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY); break; case GDT_Int32: computeScatterPriv<int>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY); break; case GDT_Float32: computeScatterPriv<float>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY); break; case GDT_Float64: computeScatterPriv<double>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY); break; } } template <class T> void C::computeScatterPriv(int nBandx,int nBandy,int xScale, int yScale, QVector<QVector<int>> &vecScatter,double *pMinMaxOutX,double *pMinMaxOutY) { T*=new T[20]; //...... //自己的处理 //.... }
在使用时使用调用computeScatter函数即可,可以对不同数据类型的遥感数据进行处理。
原文:http://blog.csdn.net/kupepoem/article/details/20155855