1. 程式人生 > >開源2D圖形庫AGG研究(一)

開源2D圖形庫AGG研究(一)

      AGG(Anti-Grain Geometry),強大的2D幾何圖形庫。因為GDI+的一些缺陷(不能跨平臺,某些應用場合精度差),我一直在尋求可以替換gdi+繪圖元件的方案,最終我選擇了AGG,提供亞畫素精度顯示效果,反鋸齒效果超好,跨平臺,程式碼精緻亦適合嵌入式開發。網上關於2D圖形庫的元件非常多,類似的還有GOOGLE PICASSO,CAIRO(firefox底層採用的渲染器),QT,OpenGL等等。從易用性的角度來說AGG比較困難,因為官方只給出了C++原始碼,沒有元件庫和封裝好的包,其他語言要想直接用是不可能了。從網上關於使用效果的評論來說,AGG是最高效,跨平臺最好的。

      起初學習是從看中文件開始的,在網上有寫得比較好的文章(目前最全面的),題目是<<用AGG實現高質量圖形輸出>>。如果按照文章大致做下來就能對AGG有一個初步瞭解。參考上述文章,自己動手做一下,感覺稍微能熟悉些,不然直接看原始碼或英文文件比較累。現在是邊用邊看原始碼,翻翻原始文件,感覺學習效率會高一些。因為以前專門寫過一段時間的GIS資料格式解析有一定基礎(要是參考AGG就好了),再過來看AGG原始碼,還是比較過癮的,其間有很多資料結構的寫法其實也適用於GIS(例如各種圖形物件如何用程式表達)。在我看來AGG的程式碼結構非常清晰和優美,原始碼使用C++模版中規中矩(本人非常不贊成奇技淫巧式的C++變態語句)。

      什麼樣的人適合使用AGG類庫?稍微有點計算機圖形學基礎,但是比較熟悉C++的人適合上手。其實一般的開發基本用不上AGG類庫,因為太多人去搞應用開發,很少人會關注繪圖質量,影象變換的底層實現了。AGG的繪圖質量的確很好,在使用者列表中有PDFNet,該公司的SDK產品被AutoDesk公司採用了,而此SDK的底層就是採用的AGG圖形庫。AGG類庫非常用於圖形學實踐,熟悉了原始碼可以自己在現有類的基礎上進行擴充套件。

      介紹了這麼多AGG背景,開始學習使用AGG吧。第一步,Hello World ?不,我們需要下載原始碼。目前最新版本是2.5在以下網址下載 http://www.antigrain.com/download/index.html

。下載後直接解壓,資料夾中羅列了一堆的.cpp、.h檔案。當然我們的開發環境是VC6.0,所以我們下載的是Windows版本。

     1、VC6.0下新建一個Windows Console工程,名稱隨便起,姑且叫AggTest.

     2、關鍵步驟,設定AGG類庫的引用,最野蠻和最有效的方式把Include下的.h檔案連同其下資料夾全部拷貝到VC6安裝目錄下的Microsoft Visual Studio/VC98/Include資料夾中,把解壓目錄中的src資料夾下的cpp檔案都新增到AggTest工程中。

    3、拷貝如下程式碼到你的AggTest.cpp檔案中

        

      4、編譯,當然通不過,你懂的。第一步,如果還有檔案(如agg_platform_support.cpp)沒有找到,你需要新增到工程中。第二步,報錯後,看看是不是有兩處地方沒有修改,stdafx.h是不是註釋掉了(純C++麼);是不是按下圖設定了VC6下.cpp的設定。

      5、這下終於可以編譯通過了,恭喜你程式上可以看到如下內容:

      環境配置還是比較簡單的,能夠成功執行的程式是對我們極大的鼓勵下,後續我們開始研究程式碼。