Agg vs. Cairo 二維繪圖引擎之比較和選擇 .
Agg vs. Cairo 二維繪圖引擎之比較和選擇
cheungmine
當今時代對于作為二維圖形軟件開發者, 是幸運的。因為除了Windows GDI/GDI+之外,我們還有很多其他的選擇。而且這些選擇除了能跨平臺之外,性能上與原始GDI/GDI+相比,都不遜色。
如果不考慮繪圖的效果,使用Win32 GDI函數直接繪圖的效率大約是同樣的GDI Plus的10倍以上。為了反走樣的美觀,只有犧牲效率了。老式的程序還在使用GDI繪圖,不是這些程序不想提升到GDI+,可能這樣改動的代碼量太大,所謂船大不好掉頭所致。
因此,后發的優勢就是可以利用當今軟件發展的最新成果,快速切入一個領域,所謂迎頭趕上。
言歸正傳。仍以我們假定的目標:開發一個二維圖形軟件為例。對于繪圖核心引擎這塊,有幾種選擇:
1、使用Windows/Linux原生的GDI繪圖原語。
2、使用開源的繪圖核心。
開源的軟件目前越來越顯示出強大的生命力。因此,目前雖然直接調用底層GDI/GDIPlus的函數,可以獲得比較靈活的性能,但是對于商業應用軟件的開發來說都不是最優的。連google這樣的大公司,都有采用開源的繪圖引擎(skia-后來被google收購),因此我們有理由相信,選擇一個適合的引擎是必要的。
網絡上對AGG的陳述不乏溢美之詞:
“AGG,全名:Anti-Grain Geometry,是一個開源的、高效的2D圖形庫,它的網站: http://www.antigrain.com/ 。AGG的功能與GDI+的功能非常類似,但提供了比GDI+更靈活的編程接口,其產生的圖形的質量也非常高,而且它是跨平臺的,其宣傳可以在非常多的操作系統上運行,至少在Windows、Wince、Linux三個臺平上測試通過。”
“在設計上,它是師出Boost庫,在其中使用了大量的現代標準C++語言的語法規則,包括模板、仿函數等處理,但是為了能在更多的平臺上使用,它并沒有直接使用Boost和STL庫,而是自己實現了部分STL功能。”
AGG 2.5 License
Anti-Grain Geometry is an Open Source, free library released under the terms and conditions of GNU GPL license.
再看看另外一個大名鼎鼎的繪圖引擎Cairo:
“cairo 的目標是以跨平臺的方式在打印機和屏幕上產生相同的輸出,它正在成為 Linux® 圖形領域的重要軟件。GNOME、GTK+、Pango 等許多軟件已經使用了它提供的 2D 功能。 cairo 是一個免費的矢量繪圖軟件庫,它可以繪制多種輸出格式。cairo 支持許多平臺,包括 Linux、BSD、Microsoft® Windows® 和 OSX(BeOS 和 OS2 后端也正在開發)。Linux 繪圖可以通過 X Window 系統、Quartz、圖像緩沖格式或 OpenGL 上下文來實現。另外,cairo 還支持生成 PostScript 或 PDF 輸出,從而產生高質量的打印結果。在理想情況下,cairo 的用戶可以在打印機和屏幕上獲得非常接近的輸出效果。”
“cairo 的一項主要設計目標是提供盡可能接近的輸出。這種一致的輸出使 cairo 非常適合 GUI 工具集編程和跨平臺應用程序開發。使用同一個繪圖庫打印高分辨率的屏幕和繪制屏幕內容,這種功能具有顯著的優點。另外,在支持的每種目標平臺上,cairo 嘗試智能化地使用底層硬件和軟件支持。高質量矢量圖形和高性能的結合使 cairo 成為優秀的 UNIX® 繪圖系統。”
“cairo 是用 C 編寫的,但是為大多數常用的語言提供了綁定。選用 C 語言有助于創建新的綁定,同時在進行 C 語言調用時可以提供高性能。應該特別注意 Python 綁定,它支持快速原型開發,而且降低了學習 cairo 繪圖 API 的門檻。 ”
Cairo is free software and is available to be redistributed and/or modified under the terms of either the GNU Lesser General Public License (LGPL) version 2.1 or the Mozilla Public License (MPL) version 1.1 at your option.
原諒我引用了3個段落來描述Cairo這個精巧的東西。因為從網絡上搜索得出的結果不成正比的偏向于Cairo。
經過測試分析,我總結出不宜使用AGG的幾點原因:
1)AGG是C++編寫的,因此,它不能被C語言很好地調用。由于 其中使用了大量的現代標準C++語言的語法規則,包括模板、仿函數等處理 ,導致這樣的庫的學習過程將是痛苦的。
2)AGG采用的版權協議是GNU GPL的。而Cairo至少是LGPL的。AGG采用的協議表明它不適合用于商業的閉源軟件開發。
3)Cairo的繪圖效率是接近GDI/GDIPlus的。經過優化算法,可以做到完全忽略繪圖效率上的差別。
4)AGG自從2006年之后就沒有更新過。我懷疑這個社區已經不存在了。對于這樣一個發展中的引擎,在長達5年的時間里沒有更新,無論如何是說不過去的,也是無法讓人信賴的。
5)Cairo社區至今保持著旺盛的生命力。作為名震江湖的FireFox的核心繪圖引擎,作為Linux的繪圖引擎,我們可以足夠信賴它。
6)具體到庫中的功能,只有用過才知道孰優孰劣。
7)C語言相比C++更具有簡潔和高效的特性。更適合跨平臺軟件的開發。
當然,我的孤陋寡聞可能導致忽略了目前存在的更優秀的繪圖引擎,請您不妨告訴我,這樣把它們都加入到這個討論之中。
最后,請相信Linux的選擇,請相信FireFox的選擇。同時也是我的選擇。
from:http://blog.csdn.net/ubuntu64fan/article/details/5927909
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成