问题描述
我用GDAL读取大图像(24位真彩色)的一部分到内存,然后用GDI+显示内存中的图像,如下:BYTE*buf=newBYTE[bufXSize*bufYSize*3];memset(buf,0,bufXSize*bufYSize*3);m_pDataset->RasterIO(GF_Read,0,0,m_nWidth,m_nHeight,buf,bufXSize,bufYSize,GDT_Byte,m_nBandCount,NULL,m_nBandCount,0,1);然后用gdi+显示内存中的图像,发现图像能显示出来但颜色不对……于是我换用内存映射的方法把图像的实际位图数据读到内存中,同样用gdi+显示,这样就能正确显示。难道gdal读到内存的不是位图的实际数据部分?
解决方案
解决方案二:
Gdal的数据是按波段存取的。24位存为3个波段,我也不清楚顺序是如何排列的你语句中的读取方式估计gdi+识别不了
解决方案三:
引用1楼xzhui的回复:
Gdal的数据是按波段存取的。24位存为3个波段,我也不清楚顺序是如何排列的你语句中的读取方式估计gdi+识别不了
是3个波段的排列顺序问题,这个已经解决了,但是在改变view窗口过程中有时图像会变成灰色,而且图像有变斜了的效果,过后程序就会出错,这是什么原因呢?
解决方案四:
GDAL的默認波段順序是BGR,利用RasterIO時要注意最后三個參數的設置,它們確定了數據在分配的內存中的存儲方式(按波段,按行還是按像素)Xsize的大小應該較正到4的倍數,xSize=(xSize*8+31)/32*4
时间: 2024-11-08 20:08:15