SkiaSharp 是一个跨平台的 2D 图形绘图库,允许开发者使用 C# 进行图形处理。理解 SkiaSharp 的坐标系统对于进行图形绘制非常重要。在本篇文章中,我们将详细介绍 SkiaSharp 的坐标系统,并通过实例来展示如何使用它。
在 SkiaSharp 中,坐标系统的原点 (0, 0) 位于画布的左上角。x 坐标向右增加,y 坐标向下增加。这意味着在绘制图形时,右侧和下侧的数值会增大,而左侧和上侧的数值会减小。
SkiaSharp 使用二维坐标系。对于复杂的图形操作,通常涉及以下几个关键概念:
接下来,我们将通过示例展示如何在 SkiaSharp 中操作坐标系统。
以下是一个创建窗口并绘制一个矩形的示例代码:
C#using SkiaSharp;
using SkiaSharp.Views.Desktop;
namespace AppCoordinate
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
override protected void OnPaint(PaintEventArgs e)
{
var info = new SKImageInfo(ClientSize.Width, ClientSize.Height);
using (var surface = SKSurface.Create(info, new SKSurfaceProperties(SKPixelGeometry.RgbHorizontal)))
{
// 获取 SKCanvas
SKCanvas canvas = surface.Canvas;
// 清除背景
canvas.Clear(SKColors.White);
// 创建画笔
var paint = new SKPaint();
paint.Color = SKColors.Blue;
paint.Style = SKPaintStyle.Fill;
paint.StrokeWidth = 5;
// 定义矩形的位置和大小
var rect = new SKRect(50, 50, 200, 200);// x1, y1, x2, y2
canvas.DrawRect(rect, paint);
// 将 SKSurface 渲染到 Windows 窗体
using (var skImageView = new SKControl())
{
var image = surface.Snapshot();
var bitmap = SKBitmap.FromImage(image);
e.Graphics.DrawImage(bitmap.ToBitmap(), 0, 0);
}
}
}
}
}

text(0, 0) ---------> x | | y
在以上示例中,矩形的左上角位于 (50, 50),右下角位于 (200, 200)。
可以使用 SkiaSharp 提供的变换功能对坐标进行变换,例如平移、旋转和缩放操作。在绘图操作之前设置一个变换矩阵,可以影响后续的所有绘图。
以下是一个平移矩形的位置的示例代码:
C#using SkiaSharp;
using SkiaSharp.Views.Desktop;
namespace AppCoordinate
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
override protected void OnPaint(PaintEventArgs e)
{
var info = new SKImageInfo(ClientSize.Width, ClientSize.Height);
using (var surface = SKSurface.Create(info, new SKSurfaceProperties(SKPixelGeometry.RgbHorizontal)))
{
// 获取 SKCanvas
SKCanvas canvas = surface.Canvas;
// 清除背景
canvas.Clear(SKColors.White);
// 创建画笔
var paint = new SKPaint
{
Color = SKColors.Blue,
Style = SKPaintStyle.Fill,
StrokeWidth = 5
};
// 定义矩形的位置和大小
var rect = new SKRect(50, 50, 200, 200); // 原始矩形的位置
// 绘制原始矩形
canvas.DrawRect(rect, paint);
// 保存当前状态
canvas.Save();
// 平移坐标
canvas.Translate(100, 100); // 将坐标向右和向下各移动 100 像素
// 绘制移动后的矩形
canvas.DrawRect(rect, paint);
// 恢复状态
canvas.Restore();
// 将 SKSurface 渲染到 Windows 窗体
using (var skImageView = new SKControl())
{
var image = surface.Snapshot();
var bitmap = SKBitmap.FromImage(image);
e.Graphics.DrawImage(bitmap.ToBitmap(), 0, 0);
}
}
}
}
}

canvas.Save() 保存当前的绘图状态。canvas.Translate(100, 100) 平移所有后续绘图的坐标。canvas.Restore() 恢复到平移之前的状态。SkiaSharp 的坐标系统相对简单直观,熟悉坐标系的原点位置以及如何进行坐标转换是进行图形绘制的基础。通过各种变换操作,开发者可以灵活地控制图形的显示位置和形态。希望通过本篇文章的介绍和示例,能够帮助你更好地理解和运用 SkiaSharp 进行图形绘制。
SkiaSharp 是一个跨平台的 2D 图形绘图库,允许开发者使用 C# 进行图形处理。理解 SkiaSharp 的坐标系统对于进行图形绘制非常重要。在本篇文章中,我们将详细介绍 SkiaSharp 的坐标系统,并通过实例来展示如何使用它。
在 SkiaSharp 中,坐标系统的原点 (0, 0) 位于画布的左上角。x 坐标向右增加,y 坐标向下增加。这意味着在绘制图形时,右侧和下侧的数值会增大,而左侧和上侧的数值会减小。
SkiaSharp 使用二维坐标系。对于复杂的图形操作,通常涉及以下几个关键概念:
接下来,我们将通过示例展示如何在 SkiaSharp 中操作坐标系统。
以下是一个创建窗口并绘制一个矩形的示例代码:
C#using SkiaSharp;
using SkiaSharp.Views.Desktop;
namespace AppCoordinate
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
override protected void OnPaint(PaintEventArgs e)
{
var info = new SKImageInfo(ClientSize.Width, ClientSize.Height);
using (var surface = SKSurface.Create(info, new SKSurfaceProperties(SKPixelGeometry.RgbHorizontal)))
{
// 获取 SKCanvas
SKCanvas canvas = surface.Canvas;
// 清除背景
canvas.Clear(SKColors.White);
// 创建画笔
var paint = new SKPaint();
paint.Color = SKColors.Blue;
paint.Style = SKPaintStyle.Fill;
paint.StrokeWidth = 5;
// 定义矩形的位置和大小
var rect = new SKRect(50, 50, 200, 200);// x1, y1, x2, y2
canvas.DrawRect(rect, paint);
// 将 SKSurface 渲染到 Windows 窗体
using (var skImageView = new SKControl())
{
var image = surface.Snapshot();
var bitmap = SKBitmap.FromImage(image);
e.Graphics.DrawImage(bitmap.ToBitmap(), 0, 0);
}
}
}
}
}

text(0, 0) ---------> x | | y
在以上示例中,矩形的左上角位于 (50, 50),右下角位于 (200, 200)。
可以使用 SkiaSharp 提供的变换功能对坐标进行变换,例如平移、旋转和缩放操作。在绘图操作之前设置一个变换矩阵,可以影响后续的所有绘图。
以下是一个平移矩形的位置的示例代码:
C#using SkiaSharp;
using SkiaSharp.Views.Desktop;
namespace AppCoordinate
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
override protected void OnPaint(PaintEventArgs e)
{
var info = new SKImageInfo(ClientSize.Width, ClientSize.Height);
using (var surface = SKSurface.Create(info, new SKSurfaceProperties(SKPixelGeometry.RgbHorizontal)))
{
// 获取 SKCanvas
SKCanvas canvas = surface.Canvas;
// 清除背景
canvas.Clear(SKColors.White);
// 创建画笔
var paint = new SKPaint
{
Color = SKColors.Blue,
Style = SKPaintStyle.Fill,
StrokeWidth = 5
};
// 定义矩形的位置和大小
var rect = new SKRect(50, 50, 200, 200); // 原始矩形的位置
// 绘制原始矩形
canvas.DrawRect(rect, paint);
// 保存当前状态
canvas.Save();
// 平移坐标
canvas.Translate(100, 100); // 将坐标向右和向下各移动 100 像素
// 绘制移动后的矩形
canvas.DrawRect(rect, paint);
// 恢复状态
canvas.Restore();
// 将 SKSurface 渲染到 Windows 窗体
using (var skImageView = new SKControl())
{
var image = surface.Snapshot();
var bitmap = SKBitmap.FromImage(image);
e.Graphics.DrawImage(bitmap.ToBitmap(), 0, 0);
}
}
}
}
}

canvas.Save() 保存当前的绘图状态。canvas.Translate(100, 100) 平移所有后续绘图的坐标。canvas.Restore() 恢复到平移之前的状态。SkiaSharp 的坐标系统相对简单直观,熟悉坐标系的原点位置以及如何进行坐标转换是进行图形绘制的基础。通过各种变换操作,开发者可以灵活地控制图形的显示位置和形态。希望通过本篇文章的介绍和示例,能够帮助你更好地理解和运用 SkiaSharp 进行图形绘制。
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!