ArcGIS Engine下實現地圖輸出

摘要:我們在用ArcGIS Engine定製開發的時候,常常需要將當前的地圖文檔輸出,或者以bmp的形式拷貝到剪貼板,那麼到底該如何實現這些操作呢?這篇文章將會給我們介紹兩種常用的方法。
    我們在用ArcGIS Engine定製開發的時候,常常需要將當前的地圖文檔輸出,或者以bmp的形式拷貝到剪貼板,那麼到底該如何實現這些操作呢?這篇文章將會給我們介紹兩種常用的方法。

一、實現像ArcMap的Edit菜單下Copy Map to Clipboard

實際上AE並沒有提供實現這一功能的方法,但我們可以採用Windows32 API函數來實現。

思路:獲取到MapControl的句柄然後實現一個一般的剪貼板拷貝程序,將MapControl範圍內的視圖以位圖形式複製過去。以下代碼片段供參考:

CWnd *pWndCal =GetDlgItem(IDC_MAPCONTROL1)    //獲取指MapControl的指針

CBitmap bitmap 

CClientDC dc(pWndCal)                       //獲得MapControl客戶區的設備環境

 

memdc.CreateCompatibleDC(&dc)                   //創建和指定dc兼容的內存dc

pWndCal->GetClientRect(rect)                   //獲得MapControl的範圍(Client Rectangle)

 

//創建一個和指定設備環境兼容的位圖bitmap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height())

CBitmap* poldbitmap = memdc.SelectObject(&bitmap)

memdc.BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY)

 

pWndCal->OpenClipboard()                        //打開剪貼板

SetClipboardData(CF_BITMAP,bitmap.GetSafeHandle())              //向剪貼板增加地圖

二、採用ExportMap將地圖輸出爲圖片

AE給我們提供了很多種將地圖輸出的方式,包括文件方式和打印等,這些方式又受不同參數的控制有着不同的效果。要想得到符合我們要求的效果,就必須瞭解這些方法所表達的意思和參數的內容,下面簡要說明一下,其它的可以參考開發文檔。

思路:採用IActiveView接口下的output方法,可以將地圖輸出爲上十種格式,具體的格式受IExport類型限制,如ExportBMP,ExportPNG、ExportJPEG等,下面以輸出爲JPEG格式來說明。

首先定義ExportJPEG的實例pExport,然後設置其相關的參數,過程比較簡單,這裏重點描述一下相關的參數設置。

方法:OutPut(hdc, Dpi, pixelBounds, VisibleBounds, TrackCancel )

1、這裏hdc是輸出設備,由pExport.StartExporting指定;

2、Dpi是輸出圖片的精度,但是這裏這個resolution並不能改變圖片的精度,無論設置多大的dpi,輸出同一範圍圖片的大小、精度都是一樣的。要想改變精度,得指定IOutputRasterSettings::ResampleRatio這個參數,可以設置1—5個級別的採樣率,在輸出圖片很大的時候這個參數能提高圖片的質量;

3、PixelBounds設置的是輸出像素所佔的範圍;

4、VisibleBounds指定地圖可視的範圍,這個範圍是以地圖座標爲單位的,以當前MapExtent爲基準來控制放大、縮小視圖;

5、還有個參數是pExpotrt.PixelBounds,定義的是輸出圖片的大小,即圖片尺寸,相當於畫布大小。當輸出像素的範圍大於圖片大小的時候就會裁切圖片,只輸出部分地圖;當它小於圖片尺寸時地圖會縮小到畫布的一角。

綜上所述,VisibleBounds或者像素範圍和圖片大小都可以設置地圖的輸出範圍,一般按照具體的需要採用其中一種就可以了。

最後一點說明一下,DeviceFrame是當前設備範圍,在ArcMap中就是地圖所在的客戶區,以左上角爲起點(0,0);ExportFrame和DeviceFrame差不多,只是可能比前者略小一點;Map Extent一般是指地圖範圍,採用的是地圖單位。整個AO體系裏面有很多不同的Extent範圍,弄清它們之間的關係對開發人員來說是很必要的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章