编辑
2025-11-18
C#
00

在SkiaSharp中,透明度(Alpha通道)控制是一个非常重要的特性,它可以让我们创建半透明效果,实现更丰富的视觉表现。本文将详细介绍如何在SkiaSharp中控制透明度。

Nuget 安装包

image.png

image.png

基础概念

在SkiaSharp中,颜色使用32位整数表示,包含四个通道:

  • Alpha (透明度)
  • Red (红色)
  • Green (绿色)
  • Blue (蓝色)

每个通道占用8位(0-255),其中:

  • 0 表示完全透明
  • 255 表示完全不透明

创建带透明度的颜色

使用SKColor构造函数

C#
// 创建一个50%透明度的红色 // 参数顺序:red, green, blue, alpha SKColor color1 = new SKColor(255, 0, 0, 128); // 红色,50%透明度 // 使用byte类型参数 byte alpha = 128; byte red = 255; byte green = 0; byte blue = 0; SKColor color2 = new SKColor(red, green, blue, alpha);

使用SKColors预定义颜色并调整透明度

C#
// 从预定义颜色创建带透明度的颜色 SKColor transparentBlue = SKColors.Blue.WithAlpha(128);

使用SKColorF(浮点数表示)

C#
// 使用浮点数表示颜色(范围0.0-1.0) SKColorF colorF = new SKColorF(1.0f, 0.0f, 0.0f, 0.5f); // 红色,50%透明度
编辑
2025-11-18
C#
00

SkiaSharp 提供了丰富的画笔样式设置选项,通过 SKPaint 类可以控制绘制线条的各种属性。本文将详细介绍线宽(StrokeWidth)、线帽(StrokeCap)和线段连接(StrokeJoin)的使用方法。

Nuget 安装包

image.png

image.png

线宽 (StrokeWidth)

线宽决定了绘制线条的粗细,通过设置 SKPaint.StrokeWidth 属性来控制。

C#
public partial class Form1 : Form { SKGLControl skControl; public Form1() { InitializeComponent(); skControl = new SKGLControl(); skControl.Dock = DockStyle.Fill; skControl.PaintSurface += SkControl_PaintSurface; this.Controls.Add(skControl); this.BackColor = System.Drawing.Color.Black; } private void SkControl_PaintSurface(object sender, SKPaintGLSurfaceEventArgs e) { SKCanvas canvas = e.Surface.Canvas; canvas.Clear(SKColors.Black); // 创建画笔对象 using var paint = new SKPaint { Style = SKPaintStyle.Stroke, // 设置为描边模式 Color = SKColors.Blue, // 设置颜色 StrokeWidth = 10 // 设置线宽为10像素 }; // 使用画笔绘制一条直线 canvas.DrawLine(50, 50, 200, 50, paint); } }

image.png

编辑
2025-11-18
C#
00

在SkiaSharp中,渐变是一种常用的填充效果,主要包括线性渐变(Linear Gradient)和径向渐变(Radial Gradient)。本文将详细介绍这两种渐变的使用方法和实际案例。

线性渐变(Linear Gradient)

线性渐变是沿着一条直线方向进行颜色过渡的渐变效果。在SkiaSharp中,使用SKShader.CreateLinearGradient()方法来创建线性渐变。

基本语法

C#
using SkiaSharp; using SkiaSharp.Views.Desktop; namespace AppStyle { public partial class Form1 : Form { private SKGLControl skControl; public Form1() { InitializeComponent(); // 创建 SKGLControl skControl = new SKGLControl(); skControl.Dock = DockStyle.Fill; skControl.PaintSurface += SkControl_PaintSurface; // 将控件添加到窗体 this.Controls.Add(skControl); } private void SkControl_PaintSurface(object sender, SKPaintGLSurfaceEventArgs e) { // 获取画布 SKCanvas canvas = e.Surface.Canvas; // 清除背景 canvas.Clear(SKColors.White); // 创建画笔 using (var paint = new SKPaint()) { // 定义渐变的起点和终点 float x1 = 0; float y1 = 0; float x2 = skControl.Width; float y2 = skControl.Height; // 创建线性渐变 using (var shader = SKShader.CreateLinearGradient( new SKPoint(x1, y1), // 起点 new SKPoint(x2, y2), // 终点 new SKColor[] { // 渐变颜色数组 SKColors.Blue, // 起始颜色 SKColors.Red // 结束颜色 }, new float[] { 0, 1 }, // 颜色位置 SKShaderTileMode.Clamp)) // 平铺模式 { // 设置画笔的着色器 paint.Shader = shader; // 绘制一个填充整个控件的矩形 canvas.DrawRect(0, 0, skControl.Width, skControl.Height, paint); } } } protected override void OnLoad(EventArgs e) { base.OnLoad(e); // 设置窗体的初始大小 this.ClientSize = new System.Drawing.Size(400, 300); } } }

image.png

编辑
2025-11-18
C#
00

在SkiaSharp中,颜色是通过SKColor结构体来表示的。它支持RGB(红、绿、蓝)和ARGB(透明度、红、绿、蓝)两种主要的颜色表示方式。本文将详细介绍如何在SkiaSharp中设置和使用颜色。

基础颜色创建

使用RGB值创建颜色

C#
// 创建纯红色 SKColor red = new SKColor(255, 0, 0); // R=255, G=0, B=0 // 创建纯绿色 SKColor green = new SKColor(0, 255, 0); // R=0, G=255, B=0 // 创建纯蓝色 SKColor blue = new SKColor(0, 0, 255); // R=0, G=0, B=255 // 创建白色 SKColor white = new SKColor(255, 255, 255); // R=255, G=255, B=255 // 创建黑色 SKColor black = new SKColor(0, 0, 0); // R=0, G=0, B=0

image.png

使用ARGB值创建颜色

编辑
2025-11-18
C#
00

简介

SkiaSharp 是一个强大的 2D 图形引擎,可以用来绘制各种图形,包括贝塞尔曲线。本文将详细介绍如何在 WinForm 应用程序中使用 SkiaSharp 绘制二次贝塞尔曲线和三次贝塞尔曲线。

环境准备

首先需要通过 NuGet 包管理器安装以下包:

  • SkiaSharp
  • SkiaSharp.Views.WindowsForms

完整示例代码

C#
using SkiaSharp; using SkiaSharp.Views.Desktop; namespace AppBezier { public partial class Form1 : Form { private SKGLControl skControl; public Form1() { InitializeComponent(); InitializeSkiaSharp(); } private void InitializeSkiaSharp() { // 创建 SKGLControl 控件 skControl = new SKGLControl(); skControl.Dock = DockStyle.Fill; skControl.PaintSurface += SkControl_PaintSurface; this.Controls.Add(skControl); } private void SkControl_PaintSurface(object sender, SKPaintGLSurfaceEventArgs e) { // 获取画布 SKCanvas canvas = e.Surface.Canvas; // 清空画布 canvas.Clear(SKColors.White); // 创建画笔 using (var paint = new SKPaint { Style = SKPaintStyle.Stroke, Color = SKColors.Blue, StrokeWidth = 2, IsAntialias = true }) { // 绘制二次贝塞尔曲线 DrawQuadraticBezier(canvas, paint); // 修改画笔颜色 paint.Color = SKColors.Red; // 绘制三次贝塞尔曲线 DrawCubicBezier(canvas, paint); // 绘制控制点和辅助线 DrawControlPoints(canvas); } } private void DrawQuadraticBezier(SKCanvas canvas, SKPaint paint) { // 定义二次贝塞尔曲线的点 var path = new SKPath(); // 起点 float startX = 50; float startY = 200; // 控制点 float controlX = 150; float controlY = 50; // 终点 float endX = 250; float endY = 200; // 移动到起点 path.MoveTo(startX, startY); // 绘制二次贝塞尔曲线 path.QuadTo(controlX, controlY, endX, endY); // 绘制路径 canvas.DrawPath(path, paint); } private void DrawCubicBezier(SKCanvas canvas, SKPaint paint) { // 定义三次贝塞尔曲线的点 var path = new SKPath(); // 起点 float startX = 300; float startY = 200; // 第一个控制点 float control1X = 400; float control1Y = 50; // 第二个控制点 float control2X = 500; float control2Y = 350; // 终点 float endX = 600; float endY = 200; // 移动到起点 path.MoveTo(startX, startY); // 绘制三次贝塞尔曲线 path.CubicTo(control1X, control1Y, control2X, control2Y, endX, endY); // 绘制路径 canvas.DrawPath(path, paint); } private void DrawControlPoints(SKCanvas canvas) { // 创建控制点画笔 using (var pointPaint = new SKPaint { Style = SKPaintStyle.Fill, Color = SKColors.Green, IsAntialias = true }) using (var linePaint = new SKPaint { Style = SKPaintStyle.Stroke, Color = SKColors.Gray, StrokeWidth = 1, PathEffect = SKPathEffect.CreateDash(new float[] { 5, 5 }, 0), IsAntialias=true }) { // 二次贝塞尔曲线的控制点 canvas.DrawCircle(50, 200, 4, pointPaint); // 起点 canvas.DrawCircle(150, 50, 4, pointPaint); // 控制点 canvas.DrawCircle(250, 200, 4, pointPaint); // 终点 // 绘制辅助线 canvas.DrawLine(50, 200, 150, 50, linePaint); canvas.DrawLine(150, 50, 250, 200, linePaint); // 三次贝塞尔曲线的控制点 canvas.DrawCircle(300, 200, 4, pointPaint); // 起点 canvas.DrawCircle(400, 50, 4, pointPaint); // 控制点1 canvas.DrawCircle(500, 350, 4, pointPaint); // 控制点2 canvas.DrawCircle(600, 200, 4, pointPaint); // 终点 // 绘制辅助线 canvas.DrawLine(300, 200, 400, 50, linePaint); canvas.DrawLine(400, 50, 500, 350, linePaint); canvas.DrawLine(500, 350, 600, 200, linePaint); } } } }

image.png