当前位置:编程学习 > 网站相关 >>

请教一个gdal问题

我用GDAL读取大图像(24位真彩色)的一部分到内存,然后用GDI+显示内存中的图像,如下:
 
BYTE* buf = new BYTE[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
补充:企业软件 ,  地理信息系统
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,