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


在SkiaSharp中,颜色使用32位整数表示,包含四个通道:
每个通道占用8位(0-255),其中:
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);
C#// 从预定义颜色创建带透明度的颜色
SKColor transparentBlue = SKColors.Blue.WithAlpha(128);
C#// 使用浮点数表示颜色(范围0.0-1.0)
SKColorF colorF = new SKColorF(1.0f, 0.0f, 0.0f, 0.5f); // 红色,50%透明度
SkiaSharp 提供了丰富的画笔样式设置选项,通过 SKPaint 类可以控制绘制线条的各种属性。本文将详细介绍线宽(StrokeWidth)、线帽(StrokeCap)和线段连接(StrokeJoin)的使用方法。


线宽决定了绘制线条的粗细,通过设置 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);
}
}

在SkiaSharp中,渐变是一种常用的填充效果,主要包括线性渐变(Linear Gradient)和径向渐变(Radial 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);
}
}
}

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

SkiaSharp 是一个强大的 2D 图形引擎,可以用来绘制各种图形,包括贝塞尔曲线。本文将详细介绍如何在 WinForm 应用程序中使用 SkiaSharp 绘制二次贝塞尔曲线和三次贝塞尔曲线。
首先需要通过 NuGet 包管理器安装以下包:
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);
}
}
}
}
