SkiaSharp 是 Google's Skia 图形引擎的 .NET 版本,提供了强大的 2D 图形处理能力。本文将详细介绍如何在 WinForm 应用程序中使用 SkiaSharp 绘制各种矩形。
首先需要通过 NuGet 包管理器安装以下包:
C#using SkiaSharp;
using SkiaSharp.Views.Desktop;
namespace AppRectangle
{
public partial class Form1 : Form
{
private SKControl skControl;
public Form1()
{
InitializeComponent();
// 创建 SKControl 控件
skControl = new SKControl();
skControl.Dock = DockStyle.Fill;
skControl.PaintSurface += OnPaintSurface;
this.Controls.Add(skControl);
}
// 绘制事件处理
private void OnPaintSurface(object sender, SKPaintSurfaceEventArgs e)
{
// 获取绘图画布
SKCanvas canvas = e.Surface.Canvas;
// 清空画布(使用白色背景)
canvas.Clear(SKColors.White);
// 在这里添加绘制代码
DrawRectangles(canvas);
}
private void DrawRectangles(SKCanvas canvas)
{
// 创建画笔
using (var paint = new SKPaint())
{
// 启用防锯齿
paint.IsAntialias = true;
// 1. 绘制基础矩形
paint.Color = SKColors.Blue; // 设置颜色为蓝色
paint.Style = SKPaintStyle.Fill; // 设置填充样式
canvas.DrawRect(50, 50, 200, 100, paint);
// 2. 绘制描边矩形
paint.Color = SKColors.Red; // 设置颜色为红色
paint.Style = SKPaintStyle.Stroke; // 设置为描边样式
paint.StrokeWidth = 3; // 设置描边宽度
canvas.DrawRect(50, 200, 200, 100, paint);
// 3. 绘制圆角矩形
paint.Color = SKColors.Green; // 设置颜色为绿色
paint.Style = SKPaintStyle.Fill; // 设置填充样式
canvas.DrawRoundRect(50, 350, 200, 100, 20, 20, paint);
}
}
}
}

SkiaSharp is a powerful cross-platform 2D graphics drawing library derived from Google's Skia graphics library. This article will explore in depth how to use SkiaSharp to draw various types of lines.
C#override protected void OnPaint(PaintEventArgs e)
{
var info=new SKImageInfo(ClientSize.Width, ClientSize.Height);
using (var surface = SKSurface.Create(info))
{
var canvas = surface.Canvas;
canvas.Clear(SKColors.White);
// Create Paint object
using (var paint = new SKPaint())
{
// Set line color to blue
paint.Color = SKColors.Blue;
// Set line width
paint.StrokeWidth = 5;
// Set drawing mode to stroke
paint.Style = SKPaintStyle.Stroke;
// Draw a line from point (50, 50) to point (200, 200)
canvas.DrawLine(50, 50, 200, 200, paint);
}
using(var view=new SKGLControl())
{
// Generate snapshot image from the drawing surface
var image = surface.Snapshot();
// Generate SKBitmap from image
var bitmap = SKBitmap.FromImage(image);
// Convert SKBitmap to GDI+ Bitmap and draw to Graphics object of PaintEventArgs
e.Graphics.DrawImage(bitmap.ToBitmap(), 0, 0);
}
}
}

SkiaSharp是一个强大的跨平台2D图形绘制库,源自Google的Skia图形库。本文将深入探讨如何使用SkiaSharp绘制各种类型的直线。
C#override protected void OnPaint(PaintEventArgs e)
{
var info=new SKImageInfo(ClientSize.Width, ClientSize.Height);
using (var surface = SKSurface.Create(info))
{
var canvas = surface.Canvas;
canvas.Clear(SKColors.White);
// 创建画笔(Paint)对象
using (var paint = new SKPaint())
{
// 设置线条颜色为蓝色
paint.Color = SKColors.Blue;
// 设置线条宽度
paint.StrokeWidth = 5;
// 设置绘制模式为描边
paint.Style = SKPaintStyle.Stroke;
// 绘制从点(50, 50)到点(200, 200)的直线
canvas.DrawLine(50, 50, 200, 200, paint);
}
using(var view=new SKGLControl())
{
// 从绘制的表面生成快照图像
var image = surface.Snapshot();
// 从图像生成 SKBitmap
var bitmap = SKBitmap.FromImage(image);
// 将 SKBitmap 转换为 GDI+ Bitmap,并绘制到 PaintEventArgs 的 Graphics 对象上
e.Graphics.DrawImage(bitmap.ToBitmap(), 0, 0);
}
}
}

SkiaSharp 是一款跨平台的 2D 图形绘图库,广泛用于各种应用程序的图形渲染。为了高效地进行绘图,管理绘图上下文是一个非常重要的主题。本篇文章将详细介绍 SkiaSharp 中的绘图上下文管理,并通过例子加以说明。
绘图上下文(SKCanvas)是 SkiaSharp 提供的一个核心类,用于执行实际的绘图操作。它负责处理所有的绘图命令,包括绘制形状、文本和图像等。每个绘制操作都需要通过一个 SKCanvas 实例来完成。
我们可以通过多种方式创建 SKCanvas。最常见的方式是从一个位图(SKBitmap)或表面(SKSurface)创建。
以下是一个使用 SKBitmap 创建绘图上下文的示例:
C#protected override void OnPaint(PaintEventArgs e)
{
// 创建一个 SKImageInfo 对象,用于定义图像的宽度和高度
var info = new SKImageInfo(ClientSize.Width, ClientSize.Height);
// 创建一个 SKSurface,用于绘制图形
using (var surface = SKSurface.Create(info))
{
// 获取绘图上下文
var canvas = surface.Canvas;
// 清空绘图上下文,设置背景颜色为白色
canvas.Clear(SKColors.White);
// 创建一个 SKPaint 对象,用于定义绘制属性
using (var paint = new SKPaint())
{
paint.Color = SKColors.Red; // 设置绘制颜色为红色
paint.StrokeWidth = 10; // 设置线宽为 10 像素
paint.IsAntialias = true; // 开启抗锯齿,提升绘图质量
// 在绘图上下文中绘制一条红色的线
canvas.DrawLine(100, 100, 700, 500, paint);
}
// 创建一个 SKControl 控件用于显示图像
using (var skImageView = new SKControl())
{
// 从绘制的表面生成快照图像
var image = surface.Snapshot();
// 从图像生成 SKBitmap
var bitmap = SKBitmap.FromImage(image);
// 将 SKBitmap 转换为 GDI+ Bitmap,并绘制到 PaintEventArgs 的 Graphics 对象上
e.Graphics.DrawImage(bitmap.ToBitmap(), 0, 0);
}
}
}
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);
}
}
}
}
}
