首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

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

2012-02-04 
使用GDAL库读图的一个问题通过gdal库按一行一行的顺序读入某一波段信息,存入位图的数据区nXSize,nYSize分

使用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这种方式,计算有没有问题?

热点排行