SkiaSharp 轉換
了解顯示 SkiaSharp 圖形的轉換
SkiaSharp 支援實作為物件方法 SKCanvas
的傳統圖形轉換。 在數學上,轉換會隨著圖形化物件轉譯而改變您在繪圖函式中指定的 SKCanvas
座標和大小。 轉換通常方便繪製重複圖形或動畫。 某些技術,例如旋轉點陣圖或文字,在不使用轉換的情況下是不可能的。
SkiaSharp 轉換支援下列作業:
- 轉譯 為將座標從某個位置移轉至另一個位置
- 調整 以增加或減少座標和大小
- 旋轉 以繞點旋轉座標
- 傾斜以水準或垂直方式移動座標,讓矩形變成平行投影
這些稱為 仿射 轉換。 Affine 轉換一律會保留平行線條,而且永遠不會造成座標或大小變成無限。 方塊永遠不會轉換成平行方圖以外的任何專案,而且圓形永遠不會轉換成橢圓形以外的任何專案。
SkiaSharp 也支援以標準 3-by-3 轉換矩陣為基礎的非仿射轉換(也稱為 投影 或 透視 轉換)。 非仿射轉換可讓正方形轉換成任何凸面四邊形,這是一個四面圖,所有內部角度小於180度。 非仿射轉換可能會導致座標或大小變成無限,但它們對 3D 效果至關重要。
SkiaSharp 與 Xamarin.Forms Transform 之間的差異
Xamarin.Forms 也支援與 SkiaSharp 中類似的轉換。 類別 Xamarin.FormsVisualElement
會定義下列轉換屬性:
RotationX
和 RotationY
屬性是建立准 3D 效果的透視轉換。
SkiaSharp 轉換和 Xamarin.Forms 轉換之間有幾個重要差異:
第一個差異在於,當轉換套用至個別VisualElement
衍生專案時,Xamarin.FormsSkiaSharp 轉換會套用至整個SKCanvas
物件。 (您可以將轉換套用 Xamarin.Forms 至 SKCanvasView
物件本身,因為 SKCanvasView
衍生自 VisualElement
,但在此 SKCanvasView
中,會套用 SkiaSkarp 轉換。
SkiaSharp 轉換相對於 的左上角 SKCanvas
,而 Xamarin.Forms 轉換則相對於套用轉換的 VisualElement
左上角。 套用縮放和旋轉轉換時,這種差異很重要,因為這些轉換一律相對於特定點。
真正的差異在於,SKiaSharp 轉換是屬性時Xamarin.Forms的方法。 這是語法差異以外的語意差異:SkiaSharp 轉換會在轉換設定狀態時 Xamarin.Forms 執行作業。 SkiaSharp 轉換會套用至後續繪製的圖形物件,但不適用於套用轉換之前繪製的圖形物件。 相反地, Xamarin.Forms 一旦設定 屬性,轉換就會套用至先前轉譯的專案。 當呼叫 方法時,SkiaSharp 轉換會累計; Xamarin.Forms 當屬性設定為另一個值時,會取代轉換。
本節中的所有範例程式會顯示在 範例程式的 SkiaSharp Transforms 區段中。 您可以在解決方案的 Transforms 資料夾中找到原始程式碼。
平移轉換
瞭解如何使用翻譯轉換來轉移 SkiaSharp 圖形。
縮放轉換
探索 SkiaSharp 縮放比例轉換,以將物件調整成各種大小。
旋轉轉換
使用 SkiaSharp 旋轉轉換來探索可能的效果和動畫。
傾斜轉換
查看扭曲轉換如何建立傾斜的圖形化物件。
矩陣轉換
深入瞭解使用多用途轉換矩陣的SkiaSharp轉換。
觸控操作
使用矩陣轉換來實作觸控操作來拖曳、縮放和旋轉。
非仿射轉換
超越具有非仿射轉換效果的 Oridinary。
3D 旋轉
使用非仿射轉換在 3D 空間中旋轉 2D 物件。