GeoGeo大图
GeoGeo大图可以创建和处理很大的图像,这是和大数据集的可视化对应的功能。大图和大数据集一样也使用TFS,将一个非常大的图像分解为若干的Tiles。
一、创建大图
创建普通的图像使用CreateBitmap函数,或者从文件加载位图使用LoadBitmap函数。创建了一个位图后。GeoGeo为其建立了一个位图对象,使用CreateBitmap或LoadBitmap函数返回的位图ID即可访问这个对象。内存对象使用完毕后需要使用DeleteBitmap函数删除这个对象。
显示位图时除可以使用DrawBitmap函数直接在指定的窗口显示外,还有一种方法是建立1个与显示设备对应的缓存,如果窗口拥有这个缓存空间,GeoGeo就自动将该缓存的内容映射到显示区域。建立缓存使用SetViewDCBuffer函数,将位图对象加载到DC缓存使用BitmapToDCBuffer函数。例如:
STRING str = "G:\\Tulips.bmp";
int bmpID = LoadBitmap(str);
int winID = CreateWindow("新建窗口",2);
SetViewDCBuffer(winID,10000,10000);
BitmapToDCBuffer(winID,bmpID,10,10,0.5);
上述代码加载1个位图并创建窗口,然后创建1个10000*10000像元的DC缓存,再将位图加载到这个DC缓存,也同样实现了图像显示。
对于大图,无法创建很大的位图对象。除了位图结构无法使用大于4G的位图外,很大的位图操作起来效率也受限制。
因此,大图仅使用很大的DC缓存但不使用大位图对象。使用SetViewDCBufferEx函数创建大DC缓存。如:
SetViewDCBufferEx(winID,480000,320000);
为ID为winID的窗口建立了一个480000*320000像元的DC缓存。
大图的操作均为对这个DC缓存空间的操作。
二、大图加载位图
可以使用BitmapToDCBufferEx函数将前面所讲的由CreateBitmap函数和LoadBitmap函数创建的位图对象加载到大图的缓存。
其它一些操作大图的函数参见相关技术文档。
三、关闭/打开大图
大图数据的建立和数据的处理通常需要较多的处理成本,有理由保存这些数据供后续的处理使用。大图是与窗口关联的,由SetViewDCBufferEx创建的大图在窗口关闭时默认保留这些大图数据。
DeleteDCBufferEx函数来显式指定销毁或保留这些大图DC缓存的数据。
int DeleteDCBufferEx(int winID, int delTileFlag);
第2个参数是是否销毁大图数据的指示,指定0时表示不销毁大图数据,1或者不指定时销毁大图数据。
重新打开大图使用OpenDCBufferEx函数。
四、保存大图到位图
保存大图到位图是将大图保存为一个个独立的小位图(每个位图大小不超过4G)。
使用DCBufferToBitmapEx函数从大图DC缓存中先创建一个位图对象。
int DCBufferToBitmapEx(int winID, int x, int y, int width, int height);
第1个参数是窗口ID;第2、3个参数是DC缓存中要创建位图对象的开始位置,第4、5个参数是位图对象的宽度和高度。这样就可以从大图内任意区域创建位图。然后就可以使用SaveBitmap函数保存位图。
int SaveBitmap(int bmpID, STRING str);
五、保存大图
保存大图是保存原始的TFS还是独立文件,以及涉及压缩等问题还需要进一步研究。
更多关于GeoGeo大图内容见《GEOGEO-PART1》GeoGeo脚本基础第9章第7节大图。
示例程序清单中9-32~9-35提供了有关分布式窗口与事件的示例代码以供参考。
http://download.csdn.net/detail/gordon3000/7922555