关键代码:主要流程是先将16位的像素指针强制转成uint16_t*,方便进行指针运算,因为原始的指针是char*。
注意:指针移动的字节长度等与指针所指类型的字节长度(原来指针类型强制转换这么有用)
然后通过uint16_t获取16位像素的值,再赋值给8位像素值。
通过指针运算进行取值,不同类型的指针移动长度不一样,同时取值时根据指针类型进行取值。
if (eDT ==GDT_UInt16)
{
// 申请所有数据所需要的缓存,如果图像太大应该用分块处理
char *pDataBuff =(char *) malloc(iDstWidth*iDstHeight*iBandCount*eDT);
int res=pSrcDS->RasterIO(GF_Read, iStartX, iStartY, iDstWidth, iDstHeight,
pDataBuff, iDstWidth, iDstHeight, eDT, iBandCount, pBandMap, 0, 0, 0);
//转化为8位--lj (指针操作真复杂,用会了真方便!)
char *pDataBuff8 =(char *) malloc(iDstWidth*iDstHeight*iBandCount);
uint16_t* pDataBuff16=(uint16_t*)pDataBuff;
for (int w=0;w<iDstWidth;w++)
{
for (int h=0;h<iDstHeig