GeoGeo大图

GeoGeo大图

 

GeoGeo大图可以创建和处理很大的图像,这是和大数据集的可视化对应的功能。大图和大数据集一样也使用TFS,将一个非常大的图像分解为若干的Tiles

一、创建大图

创建普通的图像使用CreateBitmap函数,或者从文件加载位图使用LoadBitmap函数。创建了一个位图后。GeoGeo为其建立了一个位图对象,使用CreateBitmapLoadBitmap函数返回的位图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个位图并创建窗口,然后创建110000*10000像元的DC缓存,再将位图加载到这个DC缓存,也同样实现了图像显示。

对于大图,无法创建很大的位图对象。除了位图结构无法使用大于4G的位图外,很大的位图操作起来效率也受限制。

因此,大图仅使用很大的DC缓存但不使用大位图对象。使用SetViewDCBufferEx函数创建大DC缓存。如:

SetViewDCBufferEx(winID,480000,320000);

IDwinID的窗口建立了一个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;第23个参数是DC缓存中要创建位图对象的开始位置,第45个参数是位图对象的宽度和高度。这样就可以从大图内任意区域创建位图。然后就可以使用SaveBitmap函数保存位图。

int SaveBitmap(int bmpID, STRING str);

五、保存大图

保存大图是保存原始的TFS还是独立文件,以及涉及压缩等问题还需要进一步研究。

更多关于GeoGeo大图内容见《GEOGEO-PART1GeoGeo脚本基础第9章第7节大图。

示例程序清单中9-32~9-35提供了有关分布式窗口与事件的示例代码以供参考。

 

 

http://download.csdn.net/detail/gordon3000/7922555

 

猜你喜欢

转载自blog.csdn.net/gordon3000/article/details/39545033