SKPaint Class
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Holds the style and color information about how to draw geometries, text and bitmaps.
public class SKPaint : SkiaSharp.SKObject
- Inheritance
Examples
Simple Example
The following example shows three different paints, each set up to draw in a different style. The caller can intermix these paints freely, either using them as is, or modifying them as the drawing proceeds.
var info = new SKImageInfo(256, 256);
using (var surface = SKSurface.Create(info)) {
SKCanvas canvas = surface.Canvas;
canvas.Clear(SKColors.White);
var paint1 = new SKPaint {
TextSize = 64.0f,
IsAntialias = true,
Color = new SKColor(255, 0, 0),
Style = SKPaintStyle.Fill
};
var paint2 = new SKPaint {
TextSize = 64.0f,
IsAntialias = true,
Color = new SKColor(0, 136, 0),
Style = SKPaintStyle.Stroke,
StrokeWidth = 3
};
var paint3 = new SKPaint {
TextSize = 64.0f,
IsAntialias = true,
Color = new SKColor(136, 136, 136),
TextScaleX = 1.5f
};
var text = "Skia!";
canvas.DrawText(text, 20.0f, 64.0f, paint1);
canvas.DrawText(text, 20.0f, 144.0f, paint2);
canvas.DrawText(text, 20.0f, 224.0f, paint3);
}
The example above produces the following:
Effects Example
The following example draws using a gradient instead of a single color. To do,
this a SKShader
is assigned to the paint. Anything drawn with that paint
will be drawn with the gradient specified in the call to
SKShader.CreateLinearGradient
.
var info = new SKImageInfo(256, 256);
using (var surface = SKSurface.Create(info)) {
SKCanvas canvas = surface.Canvas;
canvas.Clear(SKColors.White);
// create a gradient
var colors = new[] {
SKColors.Blue,
SKColors.Yellow
};
var shader = SKShader.CreateLinearGradient(
new SKPoint(0.0f, 0.0f),
new SKPoint(256.0f, 256.0f),
colors,
null,
SKShaderTileMode.Clamp);
// assign the gradient to the paint
var paint = new SKPaint {
Shader = shader
};
canvas.DrawPaint(paint);
}
The example above produces the following:
Remarks
Anytime you draw something in SkiaSharp, and want to specify what color it is, or how it blends with the background, or what style or font to draw it in, you specify those attributes in a paint.
Unlike SKCanvas, an paint object does not maintain an internal stack of state. That is, there is no save/restore on a paint. However, paint objects are relatively light-weight, so the client may create and maintain any number of paint objects, each set up for a particular use.
Factoring all of these color and stylistic attributes out of the canvas state, and into (multiple) paint objects, allows the save and restore operations on the SKCanvas to be that much more efficient, as all they have to do is maintain the stack of matrix and clip settings.
Effects
Beyond simple attributes such as color, strokes, and text values, paints support effects. These are subclasses of different aspects of the drawing pipeline, that when referenced by a paint, are called to override some part of the drawing pipeline.
There are five types of effects that can be assigned to an paint object:
Effect | Details |
---|---|
Blend Mode | Blend modes and Duff-Porter transfer modes. |
Color Filter | Modification of the source colors before applying the blend mode. |
Mask Filter | Modification of the alpha mask before it is colorized and drawn (for example, blur). |
Path Effect | Modification of the geometry (path) before the alpha mask is generated (for example, dashing). |
Shader | Gradients and bitmap patterns. |
Constructors
SKPaint() |
Creates a new paint with the default settings. |
SKPaint(SKFont) |
Properties
BlendMode |
Gets or sets the blend mode. |
Color |
Gets or sets the paint's foreground color. |
ColorF | |
ColorFilter |
Gets or sets the paint's color filter. |
DeviceKerningEnabled |
Obsolete.
Gets or sets a value indicating whether device kerning is enabled. |
FakeBoldText |
Gets or sets a value indicating whether fake bold text is enabled. |
FilterQuality |
Gets or sets the filter quality of the current paint. |
FontMetrics |
Gets the font metrics for the current typeface. |
FontSpacing |
Gets the recommend line spacing. |
Handle |
Gets or sets the handle to the underlying native object. (Inherited from SKObject) |
HintingLevel |
Gets or sets the level of hinting to be performed. |
IgnorePublicDispose |
Gets or sets a value indicating whether the call the public Dispose() should be no-op. (Inherited from SKNativeObject) |
ImageFilter |
Gets or sets the image filter. |
IsAntialias |
Gets or sets a value indicating whether anti-aliasing is enabled. |
IsAutohinted |
Gets or sets a value indicating whether auto-hinting is enabled. |
IsDisposed |
Gets or sets a value indicating whether the object has already been disposed. (Inherited from SKNativeObject) |
IsDither |
Gets or sets a value indicating whether dithering is enabled. |
IsEmbeddedBitmapText |
Gets or sets a value indicating whether text is an embedded bitmap. |
IsLinearText |
Gets or sets a value indicating whether text is linear. |
IsStroke |
Gets or sets a value indicating whether to paint a stroke or the fill. |
IsVerticalText |
Obsolete.
Gets or sets a value indicating whether the text is vertical or horizontal is enabled. |
LcdRenderText |
Gets or sets a value indicating whether LCD text rendering is enabled. |
MaskFilter |
Gets or sets the mask filter to use when painting. |
OwnsHandle |
Gets a value indicating whether this object should destroy the underlying native object. (Inherited from SKObject) |
PathEffect |
Gets or sets the path effect to use when painting. |
Shader |
Gets or sets the shader to use when painting. |
StrokeCap |
Gets or sets a value indicating how the start and end of stroked lines and paths are treated. |
StrokeJoin |
Gets or sets the path's join type. |
StrokeMiter |
Gets or sets the paint's miter limit. |
StrokeWidth |
Gets or sets the paint's stroke width. |
Style |
Gets or sets the painting style. |
SubpixelText |
Gets or sets a value indicating whether to use subpixel text positioning. |
TextAlign |
Gets or sets the path's align value. |
TextEncoding |
Gets or sets the encoding used when drawing or measuring text. |
TextScaleX |
Gets or sets paint's horizontal scale factor for text. |
TextSize |
Gets or sets the text height in pixels. |
TextSkewX |
Gets or sets paint's horizontal skew factor for text. |
Typeface |
Gets or sets the typeface used when painting text. May be |
Methods
BreakText(Byte[], Single, Single) |
Measure the text, stopping early if the measured width exceeds |
BreakText(Byte[], Single) |
Measure the text, stopping early if the measured width exceeds |
BreakText(IntPtr, Int32, Single, Single) |
Measure the text buffer, stopping early if the measured width exceeds |
BreakText(IntPtr, Int32, Single) |
Measure the text buffer, stopping early if the measured width exceeds |
BreakText(IntPtr, IntPtr, Single, Single) |
Measure the text buffer, stopping early if the measured width exceeds |
BreakText(IntPtr, IntPtr, Single) |
Measure the text buffer, stopping early if the measured width exceeds |
BreakText(ReadOnlySpan<Byte>, Single, Single) | |
BreakText(ReadOnlySpan<Byte>, Single) | |
BreakText(ReadOnlySpan<Char>, Single, Single) | |
BreakText(ReadOnlySpan<Char>, Single) | |
BreakText(String, Single, Single, String) |
Measure the text, stopping early if the measured width exceeds |
BreakText(String, Single, Single) |
Measure the text, stopping early if the measured width exceeds |
BreakText(String, Single) |
Measure the text, stopping early if the measured width exceeds |
Clone() |
Creates a copy of the current paint. |
ContainsGlyphs(Byte[]) |
Returns a value indicating whether or not all the characters corresponds to a non-zero glyph index. |
ContainsGlyphs(IntPtr, Int32) |
Returns a value indicating whether or not all the characters corresponds to a non-zero glyph index. |
ContainsGlyphs(IntPtr, IntPtr) |
Returns a value indicating whether or not all the characters corresponds to a non-zero glyph index. |
ContainsGlyphs(ReadOnlySpan<Byte>) | |
ContainsGlyphs(ReadOnlySpan<Char>) | |
ContainsGlyphs(String) |
Returns a value indicating whether or not all the characters corresponds to a non-zero glyph index. |
CountGlyphs(Byte[]) |
Returns the number of glyphs in text. |
CountGlyphs(IntPtr, Int32) |
Returns the number of glyphs in text. |
CountGlyphs(IntPtr, IntPtr) |
Returns the number of glyphs in text. |
CountGlyphs(ReadOnlySpan<Byte>) | |
CountGlyphs(ReadOnlySpan<Char>) | |
CountGlyphs(String) |
Returns the number of glyphs in text. |
Dispose() |
Releases all resources used by this SKNativeObject. (Inherited from SKNativeObject) |
Dispose(Boolean) |
Releases the unmanaged resources used by the SKPaint and optionally releases the managed resources. |
DisposeInternal() |
Triggers a dispose, ignoring the value of IgnorePublicDispose. (Inherited from SKNativeObject) |
DisposeManaged() |
Implemented by derived SKObject types to destroy any managed objects. (Inherited from SKObject) |
DisposeNative() |
Implemented by derived SKObject types to destroy any native objects. |
DisposeNative() |
Implemented by derived SKObject types to destroy any native objects. (Inherited from SKObject) |
DisposeUnownedManaged() | (Inherited from SKObject) |
GetFillPath(SKPath, Single) |
Creates a new path from the result of applying any and all effects to a source path. |
GetFillPath(SKPath, SKPath, Single) |
Applies any and all effects to a source path, returning the result in the destination. |
GetFillPath(SKPath, SKPath, SKRect, Single) |
Applies any and all effects to a source path, returning the result in the destination. |
GetFillPath(SKPath, SKPath, SKRect) |
Applies any and all effects to a source path, returning the result in the destination. |
GetFillPath(SKPath, SKPath) |
Applies any and all effects to a source path, returning the result in the destination. |
GetFillPath(SKPath, SKRect, Single) |
Creates a new path from the result of applying any and all effects to a source path. |
GetFillPath(SKPath, SKRect) |
Creates a new path from the result of applying any and all effects to a source path. |
GetFillPath(SKPath) |
Creates a new path from the result of applying any and all effects to a source path. |
GetFontMetrics(SKFontMetrics, Single) |
Obsolete.
Returns the font metrics and line spacing for the current typeface. |
GetFontMetrics(SKFontMetrics) | |
GetGlyphOffsets(IntPtr, Int32, Single) | |
GetGlyphOffsets(ReadOnlySpan<Byte>, Single) | |
GetGlyphOffsets(ReadOnlySpan<Char>, Single) | |
GetGlyphOffsets(String, Single) | |
GetGlyphPositions(IntPtr, Int32, SKPoint) | |
GetGlyphPositions(ReadOnlySpan<Byte>, SKPoint) | |
GetGlyphPositions(ReadOnlySpan<Char>, SKPoint) | |
GetGlyphPositions(String, SKPoint) | |
GetGlyphs(Byte[]) |
Converts text into glyph indices. |
GetGlyphs(IntPtr, Int32) |
Converts text into glyph indices. |
GetGlyphs(IntPtr, IntPtr) |
Converts text into glyph indices. |
GetGlyphs(ReadOnlySpan<Byte>) | |
GetGlyphs(ReadOnlySpan<Char>) | |
GetGlyphs(String) |
Converts text into glyph indices. |
GetGlyphWidths(Byte[], SKRect[]) |
Retrieves the advance and bounds for each glyph in the text. |
GetGlyphWidths(Byte[]) |
Retrieves the advance for each glyph in the text. |
GetGlyphWidths(IntPtr, Int32, SKRect[]) |
Retrieves the advance and bounds for each glyph in the text. |
GetGlyphWidths(IntPtr, Int32) |
Retrieves the advance for each glyph in the text. |
GetGlyphWidths(IntPtr, IntPtr, SKRect[]) |
Retrieves the advance and bounds for each glyph in the text. |
GetGlyphWidths(IntPtr, IntPtr) |
Retrieves the advance for each glyph in the text. |
GetGlyphWidths(ReadOnlySpan<Byte>, SKRect[]) | |
GetGlyphWidths(ReadOnlySpan<Byte>) | |
GetGlyphWidths(ReadOnlySpan<Char>, SKRect[]) | |
GetGlyphWidths(ReadOnlySpan<Char>) | |
GetGlyphWidths(String, SKRect[]) |
Retrieves the advance and bounds for each glyph in the text. |
GetGlyphWidths(String) |
Retrieves the advance for each glyph in the text. |
GetHorizontalTextIntercepts(Byte[], Single[], Single, Single, Single) |
Calculate the intersections of two parallel lines and the glyphs. |
GetHorizontalTextIntercepts(IntPtr, Int32, Single[], Single, Single, Single) |
Calculate the intersections of two parallel lines and the glyphs. |
GetHorizontalTextIntercepts(IntPtr, IntPtr, Single[], Single, Single, Single) |
Calculate the intersections of two parallel lines and the glyphs. |
GetHorizontalTextIntercepts(ReadOnlySpan<Byte>, ReadOnlySpan<Single>, Single, Single, Single) | |
GetHorizontalTextIntercepts(ReadOnlySpan<Char>, ReadOnlySpan<Single>, Single, Single, Single) | |
GetHorizontalTextIntercepts(String, Single[], Single, Single, Single) |
Calculate the intersections of two parallel lines and the glyphs. |
GetPositionedTextIntercepts(Byte[], SKPoint[], Single, Single) |
Calculate the intersections of two parallel lines and the glyphs. |
GetPositionedTextIntercepts(IntPtr, Int32, SKPoint[], Single, Single) |
Calculate the intersections of two parallel lines and the glyphs. |
GetPositionedTextIntercepts(IntPtr, IntPtr, SKPoint[], Single, Single) |
Calculate the intersections of two parallel lines and the glyphs. |
GetPositionedTextIntercepts(ReadOnlySpan<Byte>, ReadOnlySpan<SKPoint>, Single, Single) | |
GetPositionedTextIntercepts(ReadOnlySpan<Char>, ReadOnlySpan<SKPoint>, Single, Single) | |
GetPositionedTextIntercepts(String, SKPoint[], Single, Single) |
Calculate the intersections of two parallel lines and the glyphs. |
GetTextIntercepts(Byte[], Single, Single, Single, Single) |
Calculate the intersections of two parallel lines and the glyphs. |
GetTextIntercepts(IntPtr, Int32, Single, Single, Single, Single) |
Calculate the intersections of two parallel lines and the glyphs. |
GetTextIntercepts(IntPtr, IntPtr, Single, Single, Single, Single) |
Calculate the intersections of two parallel lines and the glyphs. |
GetTextIntercepts(ReadOnlySpan<Byte>, Single, Single, Single, Single) | |
GetTextIntercepts(ReadOnlySpan<Char>, Single, Single, Single, Single) | |
GetTextIntercepts(SKTextBlob, Single, Single) |
Calculate the intersections of two parallel lines and the glyphs. |
GetTextIntercepts(String, Single, Single, Single, Single) |
Calculate the intersections of two parallel lines and the glyphs. |
GetTextPath(Byte[], Single, Single) |
Returns the path (outline) for the specified text. |
GetTextPath(Byte[], SKPoint[]) |
Returns the path (outline) for the specified text. |
GetTextPath(IntPtr, Int32, ReadOnlySpan<SKPoint>) | |
GetTextPath(IntPtr, Int32, Single, Single) |
Returns the path (outline) for the specified text. |
GetTextPath(IntPtr, Int32, SKPoint[]) |
Returns the path (outline) for the specified text. |
GetTextPath(IntPtr, IntPtr, Single, Single) |
Returns the path (outline) for the specified text. |
GetTextPath(IntPtr, IntPtr, SKPoint[]) |
Returns the path (outline) for the specified text. |
GetTextPath(ReadOnlySpan<Byte>, ReadOnlySpan<SKPoint>) | |
GetTextPath(ReadOnlySpan<Byte>, Single, Single) | |
GetTextPath(ReadOnlySpan<Char>, ReadOnlySpan<SKPoint>) | |
GetTextPath(ReadOnlySpan<Char>, Single, Single) | |
GetTextPath(String, Single, Single) |
Returns the path (outline) for the specified text. |
GetTextPath(String, SKPoint[]) |
Returns the path (outline) for the specified text. |
MeasureText(Byte[], SKRect) |
Measures the specified text. |
MeasureText(Byte[]) |
Measures the specified text. |
MeasureText(IntPtr, Int32, SKRect) |
Measures the specified UTF-8 encoded text. |
MeasureText(IntPtr, Int32) |
Measures the specified UTF-8 encoded text. |
MeasureText(IntPtr, IntPtr, SKRect) |
Measures the specified UTF-8 encoded text. |
MeasureText(IntPtr, IntPtr) |
Measures the specified UTF-8 encoded text. |
MeasureText(ReadOnlySpan<Byte>, SKRect) | |
MeasureText(ReadOnlySpan<Byte>) | |
MeasureText(ReadOnlySpan<Char>, SKRect) | |
MeasureText(ReadOnlySpan<Char>) | |
MeasureText(String, SKRect) |
Measures the specified text. |
MeasureText(String) |
Measures the specified text. |
Reset() |
Resets all the paint properties to their defaults. |
SetColor(SKColorF, SKColorSpace) | |
ToFont() |