2025-11-10
C#
00

目录

SKPaint 概述
SKPaint 的创建
SKPaint 的主要属性
Color 属性
Style 属性
StrokeWidth 属性
IsAntialias属性
TextSize 属性 (过时)
Typeface 属性(过时)
SKFont 用于字体设置
Shader 属性
StrokeCap 属性
StrokeJoin 属性
SKPaint 的使用示例
结论

SKPaint 是 SkiaSharp 中用于描述绘制样式和颜色的类。它包含了许多属性,可以控制绘制的外观,包括颜色、样式、字体、抗锯齿等。本文将详细介绍 SKPaint 的主要属性,并通过示例来演示其用法。

SKPaint 概述

在 SkiaSharp 中,SKPaint 是绘制图形、文本和图像时的核心类。通过设置 SKPaint 的属性,开发者可以控制绘制的颜色、样式、线宽、字体等。

SKPaint 的创建

首先,我们需要创建一个 SKPaint 实例。以下是创建 SKPaint 的基本步骤:

C#
using SkiaSharp; // 创建 SKPaint 实例 using var paint = new SKPaint();

SKPaint 的主要属性

Color 属性

Color 属性用于设置绘制的颜色。可以使用 SKColors 类中的常量来指定颜色。

C#
paint.Color = SKColors.Blue; // 设置颜色为蓝色

Style 属性

Style 属性用于设置绘制的样式。可以选择填充(SKPaintStyle.Fill)或描边(SKPaintStyle.Stroke)。

C#
paint.Style = SKPaintStyle.Fill; // 设置为填充样式

StrokeWidth 属性

StrokeWidth 属性用于设置描边的宽度,仅在样式为描边时有效。

C#
paint.Style = SKPaintStyle.Stroke; paint.StrokeWidth = 5; // 设置描边宽度为 5 像素

IsAntialias属性

IsAntialias 属性用于启用或禁用抗锯齿效果。启用抗锯齿可以使绘制的图形边缘更加平滑。

C#
paint.IsAntialias = true; // 启用抗锯齿

TextSize 属性 (过时)

TextSize 属性用于设置文本的大小,仅在绘制文本时有效。

C#
paint.TextSize = 40; // 设置文本大小为 40 像素

Typeface 属性(过时)

Typeface 属性用于设置字体样式。可以通过 SKTypeface 创建自定义字体。

C#
paint.Typeface = SKTypeface.FromFamilyName("Arial"); // 设置字体为 Arial

SKFont 用于字体设置

C#
// 设置字体 SKFont font = new SKFont(SKTypeface.FromFamilyName("Arial")); font.Size = 40; font.Edging = SKFontEdging.Antialias; font.Hinting = SKFontHinting.Full; font.BaselineSnap = true;
  1. Typeface: 字体样式,定义了字体的类型(如粗体、斜体等)。
  2. Size: 字体的大小,以点(pt)为单位。
  3. Edging: 字体的边缘风格,控制字体的边缘如何渲染。
  4. Hinting: 字形的提示,控制在不同分辨率下如何渲染字体,以提高可读性。
  5. BaselineSnap: 是否将文本基线对齐到像素网格,以提高渲染质量。

Shader 属性

Shader 属性用于设置渐变或图案填充。可以使用 SKShader 创建复杂的填充效果。

C#
var shader = SKShader.CreateLinearGradient( new SKPoint(0, 0), new SKPoint(100, 100), new[] { SKColors.Red, SKColors.Blue }, null, SKShaderTileMode.Repeat); paint.Shader = shader; // 设置渐变填充
  1. SKPoint(0, 0): 渐变的起点。这里设置为 (0, 0),表示渐变从坐标原点开始。
  2. SKPoint(100, 100): 渐变的终点。设置为 (100, 100),表示渐变到达该坐标的结束位置。
  3. new[] { SKColors.Red, SKColors.Blue }: 渐变中的颜色数组。在该示例中,渐变从红色(SKColors.Red)平滑过渡到蓝色(SKColors.Blue)。您可以添加更多颜色以创造更复杂的渐变效果。
  4. null: 颜色分布的数组。在此处设置为 null,表示颜色在渐变中线性均匀分布。如果需要自定义颜色分布,可以提供一个浮点数数组,表示每个颜色在渐变中的位置(范围从 0.01.0)。
  5. SKShaderTileMode.Repeat: 渐变的平铺模式。在这个例子中,使用 Repeat,这意味着当绘制内容超出渐变的范围时,渐变将会重复。其他选项还包括:
    • Clamp: 渐变会在边界处停止,而不会重复。
    • Mirror: 渐变在边界处反转并重复。

StrokeCap 属性

StrokeCap 属性用于设置描边的端点样式,可以选择平头(SKStrokeCap.Butt)、圆头(SKStrokeCap.Round)或方头(SKStrokeCap.Square)。

C#
paint.StrokeCap = SKStrokeCap.Round; // 设置描边为圆头

StrokeJoin 属性

StrokeJoin 属性用于设置描边的连接样式,可以选择圆角(SKStrokeJoin.Round)、斜角(SKStrokeJoin.Miter)或贝塞尔曲线(SKStrokeJoin.Bevel)。

C#
paint.StrokeJoin = SKStrokeJoin.Round; // 设置连接样式为圆角

SKPaint 的使用示例

以下是一个完整的示例,演示如何使用 SKPaint 的不同属性来绘制图形和文本。

C#
using SkiaSharp; using SkiaSharp.Views.Desktop; namespace AppSKPaint { public partial class Form1 : Form { public Form1() { InitializeComponent(); } override protected void OnPaint(PaintEventArgs e) { // 创建 SKImageInfo var info = new SKImageInfo(ClientSize.Width, ClientSize.Height); // 使用 SKSurface.Create 创建绘图表面 using (var surface = SKSurface.Create(info, new SKSurfaceProperties(SKPixelGeometry.RgbHorizontal))) { // 获取 SKCanvas SKCanvas canvas = surface.Canvas; // 清除背景 canvas.Clear(SKColors.White); // 创建 SKPaint 实例 using var paint = new SKPaint { Color = SKColors.Blue, Style = SKPaintStyle.Fill, IsAntialias = true }; // 绘制填充矩形 canvas.DrawRect(new SKRect(50, 50, 200, 200), paint); // 设置描边样式 paint.Style = SKPaintStyle.Stroke; paint.StrokeWidth = 5; paint.Color = SKColors.Red; // 绘制描边矩形 canvas.DrawRect(new SKRect(250, 50, 400, 200), paint); // 设置文本样式 paint.Style = SKPaintStyle.Fill; paint.Color = SKColors.Black; // 设置字体 SKFont font = new SKFont(SKTypeface.FromFamilyName("Arial")); font.Size = 40; font.Edging = SKFontEdging.Antialias; font.Hinting = SKFontHinting.Full; font.BaselineSnap = true; var shader = SKShader.CreateLinearGradient( new SKPoint(0, 0), new SKPoint(100, 100), new[] { SKColors.Red, SKColors.Blue }, null, SKShaderTileMode.Repeat); paint.Shader = shader; // 设置渐变填充 // 绘制文本 canvas.DrawText("Hello, SkiaSharp!", 50, 300, font, paint); // 将 SKSurface 渲染到 Windows 窗体 using (var skImageView = new SKControl()) { var image = surface.Snapshot(); var bitmap = SKBitmap.FromImage(image); e.Graphics.DrawImage(bitmap.ToBitmap(), 0, 0); } } } } }

image.png

结论

SKPaint 是 SkiaSharp 中一个非常重要的类,它的属性可以帮助开发者控制绘制的外观。通过本文的介绍和示例,您应该能够理解 SKPaint 的主要属性,并在自己的项目中应用这些知识。无论是绘制简单的形状、文本,还是处理复杂的样式,SKPaint 都能满足您的需求。

希望这篇文章能帮助您更好地理解和使用 SkiaSharp 的 SKPaint!如果您有任何问题或需要进一步的示例,请随时询问。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!