對於很多剛接觸 .NET 跨平台開發的工程師來說,可能會在 .NET MAUI 或 Uno Platform 的專案中看到 SkiaSharp 這個名稱。簡單來說,SkiaSharp 是 Skia 圖形引擎的 .NET 封裝(Binding)。Skia 本身是一個強大的開源 2D 圖形庫,Google Chrome、Android 和 Flutter 都在使用它。而 SkiaSharp 讓 .NET 開發者能用 C# 呼叫這些底層能力,在手機、電腦、網頁(WebAssembly)甚至伺服器上,畫出像素級精準的文字、圖形與影像。
最近微軟發布了 SkiaSharp 4.0 Preview 1,這次更新不僅是版本號的跳升,更是一次底層引擎的全面大換血。
底層引擎的全面升級
這次 4.0 版本最核心的改變是將底層的 Skia 引擎更新到了 Milestone 147。這意味著過去兩年半中,所有在原廠 Skia 專案中開發的新功能與優化,現在全部同步到了 .NET 環境中。
對於開發者而言,最棒的是許多提升是自動化的。只要升級版本,不需要修改程式碼,就能獲得以下好處:
影像品質提升。現在縮小圖片時會預設開啟 Mipmap Sharpening(一種減少縮圖鋸齒的技術),讓圖片看起來更銳利。同時,影像解碼器現在會自動讀取 Exif 旋轉元數據,你不再需要手動判斷照片是橫向還是縱向。
大圖處理能力。當圖片太大超過 GPU 的紋理限制(Texture Limits)時,系統現在會自動進行分塊處理(Tiling),避免程式崩潰或無法顯示。
色彩準確度。針對 Rec.709、HLG 和 PQ 等業界標準色彩空間修正了傳輸函數,這對於需要高色彩精準度的專業圖形應用至關重要。
效能與安全性。整體的渲染速度有所提升,特別是在 Noise Shaders(雜訊著色器)和 Canvas 操作上。同時,所有平台都啟用了現代編譯器的緩衝區保護等安全機制。
開發者的新工具與能力
除了底層優化,4.0 Preview 1 引入了幾個對實務開發非常有幫助的新功能:
可變字體 Variable Fonts。這是現代字體的趨勢。以前我們要粗體、細體得準備多個字體檔,現在透過 OpenType 可變字體,你可以直接在程式碼中控制字體的粗細(Weight)、寬度(Width)或傾斜度(Slant),甚至自定義軸線,實現極其靈活的排版。
彩色字體調色盤 Color Font Palettes。針對 Emoji 或圖標字體,現在可以切換不同的 CPAL 調色盤,甚至單獨覆蓋某個字元的顏色。
SKPathBuilder 的引入。在舊版本中,SKPath 是可變的,但在底層這會帶來效能與管理上的挑戰。新版本引入了 SKPathBuilder,將路徑的構建過程與最終的路徑物件分離。現在 SKPath 變成了不可變(Immutable)物件,而你使用 SKPathBuilder 來執行 MoveTo 或 LineTo 等操作。這符合現代 API 設計趨勢,能提高執行效率並減少意外修改。
生態系與維護模式的改變
這次更新另一個重要的訊息是 Uno Platform 正式成為 SkiaSharp 的共同維護者(Co-maintainer)。
為什麼這很重要?因為 SkiaSharp 是許多跨平台框架的基石。Uno Platform 深度依賴它來實現 UI 渲染,因此他們有強烈的動機讓這個庫保持最新且穩定。由微軟與 Uno Platform 共同維護,意味著 Bug 修復速度會加快,對 Android 新版本(如 API 36)的適配會更及時,且對 WebAssembly 的支援會更強大。
實作建議與資源
如果你目前的專案依賴 SkiaSharp 且對圖形品質或效能有要求,建議可以嘗試 4.0 Preview 版本。
為了降低學習門檻,官方目前正開發一個基於 Blazor WebAssembly 的互動式畫廊,讓開發者可以直接在瀏覽器中測試 Shader、路徑效果和可變字體。此外,由 Uno Platform 提供支持的 SkiaFiddle 也是一個非常實用的線上 Playground,可以用來快速驗證程式碼片段。
來源:devblogs.microsoft.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。