当前位置: 代码迷 >> GIS >> 使用GDAL库读图的一个有关问题
  详细解决方案

使用GDAL库读图的一个有关问题

热度:610   发布时间:2016-05-05 06:41:06.0
使用GDAL库读图的一个问题
通过gdal库按一行一行的顺序读入某一波段信息,存入位图的数据区
nXSize,nYSize分别表示高宽
C/C++ code
//建立数据区LONG LineBytes = (nXsize*8+31)/32*4;pData= (LPBYTE)new char[LineBytes*nYsize];poBandBlock= (BYTE*)CPLMalloc(sizeof(BYTE)*(nXsize*1));//为各像素赋值for (int i=0; i<nYsize; i++){                    //一次读取一行读取             poBand[dlg.Gray]->RasterIO(GF_Read, 0, i, nXsize,                  i+1, poBandBlock,nXsize, 1,GDT_Byte, 0, 0);    for (int j=0; j<nXsize; j++)        pData[(nYsize-i-1)*LineBytes + j] = poBandBlock[j];            }CPLFree(poBandBlock);


但是这样读取,打开图片后,图片第nYSize/2行开始全部显示出错。这是为什么啊?


------解决方案--------------------
检查一下原因
1、一般24位图像是3个波段的吧,你这里写的是一个波段?

2、创建位图的时候 ,有个选项是要指定的
option = "INTERLEAVE=PIXEL";
poDstDS = poDriver->Create( strTifPath, width,height,3, GDT_Byte, 
&option ); 

3、你分配的内存空间是否足够。
pData= (LPBYTE)new char[LineBytes*nYsize];
nYsize是哪来的,是不是能用new char这种方式,计算有没有问题?