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