介紹兩個 2D 圖形庫

來源:互聯網
上載者:User

http://blog.2ndboy.net/%E4%BB%8B%E7%BB%8D%E4%B8%A4%E4%B8%AA-2d-%E5%9B%BE%E5%BD%A2%E5%BA%93/

最近的項目需要找到一款跨平台的 2D 圖形庫,最好能在使用介面上相容 MicroSoft 的 GDI+,經過一番搜尋跟對比,總結了一些這方面的資訊放在這裡做個筆記。

  首先介紹一下 Cairo 庫,沒聽說過沒關係,FireFox 總聽說過吧?!FireFox 的 render 引擎用的就是這個庫。Cairo 是一個跨平台的 2D 圖形庫,支援很多 GDI+ 的進階特性,比如 Anti-alias,矩陣變換等等,但是據說
Cairo 的效率不是很好,跟其它庫有一定的差距。

  用 Cairo 最爽的地方在於有個跟它相配合的 libGDIPlus 庫,這個庫對 Cairo 進行了封裝,對外提供了一個 GDI+ Flat API 相容的使用介面,這樣就為把 Windows 平台下的 GDI+ 代碼移植到 Unix 或者
Mac 平台下提供了一條捷徑。

  下面要介紹的是 AGG(Anti-Grain Geometry),這個庫貌似效率很好,可以去它的Demo
展示頁面去看看,裡面的小例子都非常的酷!

  AGG 也有一個類似於 libGDIPlus 那樣的封裝,叫做 AggPlus。但是美中不足的是 AggPlus 對 GDI+ 介面的封裝充其量只實現了 20%,基本上沒有實用價值,但是拿來跟 GDI+ 做效能比較測試還是比較方便的。其實在 AggPlus
的下載包裡面就有這麼個效能測試程式,在某些基本圖形的 render 測試中 AGG 居然比 GDI+ 快 10 倍以上!

  Cairo 跟 AGG 都是非常不錯的 2D 圖形庫,雖然我始終沒辦法在 Cairo 跟 AGG 之間做效能測試,但是貌似 AGG 比 Cairo 的效能要好;在特性方面,他倆似乎不分伯仲,GDI+ 1.0 裡有的 feature 幾乎都能在這兩個庫裡找到對應物;在 interface 方面,Cairo + libGDIPlus 是一對黃金搭檔,只要你熟悉 GDI+ 的 Flat interface,很快就能把 Cairo 加到自己的項目裡面;AGG 的 interface 比較另類,完全基於 C++ Template
寫就,基本上屬於看了文檔還感覺很暈的那種,有人說要想把 AGG 用起來,要有比較好的圖形學知識,深以為然!

  從跨平台和編譯上比,AGG 全面勝出,在 Windows/Unix/Mac 三個平台下都輕鬆通過,Cairo 就稍差一點點,在 Windows 平台下需要經過一定的修改(當然首先要熟悉一下才能修改)。在 Windows 下編譯 libGDIPlus 貌似就是不可能完成的任務,至少我花了一些時間後放棄了這個念頭。

  在跟同事解釋 Cairo + libGDIPlus 和 AGG 的最顯著區別時我打了個比方,前者就像是一輛整裝待命的國產車,後者就像是一堆精緻的進口汽車配件。把前者用起來比較容易,但是可能效能一般;把後者用起來需要花很多時間,還要有專業知識,但是一旦跑起來那就很爽!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.