<ahref="SkCanvas_Reference#Canvas">Canvas</a> provides an interface for drawing, and how the drawing is clipped and transformed.
<ahref="SkCanvas_Reference#Canvas">Canvas</a> contains a stack of <ahref="SkCanvas_Reference#Matrix">Matrix</a> and <ahref="SkCanvas_Reference#Clip">Clip</a> values.
<ahref="SkCanvas_Reference#Canvas">Canvas</a> and <ahref="SkPaint_Reference#Paint">Paint</a> together provide the state to draw into <ahref="undocumented#Surface">Surface</a> or <ahref="undocumented#Device">Device</a>.
Each <ahref="SkCanvas_Reference#Canvas">Canvas</a> draw call transforms the geometry of the object by the concatenation of all
<ahref="SkCanvas_Reference#Matrix">Matrix</a> values in the stack. The transformed geometry is clipped by the intersection
of all of <ahref="SkCanvas_Reference#Clip">Clip</a> values in the stack. The <ahref="SkCanvas_Reference#Canvas">Canvas</a> draw calls use <ahref="SkPaint_Reference#Paint">Paint</a> to supply drawing
state such as <ahref="undocumented#Color">Color</a>, <ahref="undocumented#Typeface">Typeface</a>, text size, stroke width, <ahref="undocumented#Shader">Shader</a> and so on.
To draw to a pixel-based destination, create <ahref="undocumented#Raster_Surface">Raster Surface</a> or <ahref="undocumented#GPU_Surface">GPU Surface</a>.
Request <ahref="SkCanvas_Reference#Canvas">Canvas</a> from <ahref="undocumented#Surface">Surface</a> to obtain the interface to draw.
<ahref="SkCanvas_Reference#Canvas">Canvas</a> generated by <ahref="undocumented#Raster_Surface">Raster Surface</a> draws to memory visible to the <ahref="undocumented#CPU">CPU</a>.
<ahref="SkCanvas_Reference#Canvas">Canvas</a> generated by <ahref="undocumented#GPU_Surface">GPU Surface</a> uses <ahref="undocumented#Vulkan">Vulkan</a> or <ahref="undocumented#OpenGL">OpenGL</a> to draw to the <ahref="undocumented#GPU">GPU</a>.
To draw to a document, obtain <ahref="SkCanvas_Reference#Canvas">Canvas</a> from <ahref="undocumented#Canvas">SVG Canvas</a>, <ahref="undocumented#PDF">Document PDF</a>, or <ahref="undocumented#Recorder">Picture Recorder</a>.
Document-based <ahref="SkCanvas_Reference#Canvas">Canvas</a> and other <ahref="SkCanvas_Reference#Canvas">Canvas</a> subclasses reference <ahref="undocumented#Device">Device</a> describing the
<ahref="SkCanvas_Reference#Canvas">Canvas</a> can be constructed to draw to <ahref="undocumented#Bitmap">Bitmap</a> without first creating <ahref="undocumented#Raster_Surface">Raster Surface</a>.
Create the desired type of <ahref="undocumented#Surface">Surface</a> to obtain its <ahref="SkCanvas_Reference#Canvas">Canvas</a> when possible. <ahref="SkCanvas_Reference#Overview_Constructors">Constructors</a> are useful
when no <ahref="undocumented#Surface">Surface</a> is required, and some helpers implicitly create <ahref="undocumented#Raster_Surface">Raster Surface</a>.
| <ahref="SkCanvas_Reference#MakeRasterDirect">MakeRasterDirect</a> | Creates from <ahref="undocumented#SkImageInfo">SkImageInfo</a> and <ahref="undocumented#Storage">Pixel Storage</a>. |
| <ahref="SkCanvas_Reference#MakeRasterDirectN32">MakeRasterDirectN32</a> | Creates from image data and <ahref="undocumented#Storage">Pixel Storage</a>. |
| <ahref="SkCanvas_Reference#accessTopLayerPixels">accessTopLayerPixels</a> | Returns writable pixel access if available. |
| <ahref="SkCanvas_Reference#accessTopRasterHandle">accessTopRasterHandle</a> | Returns context that tracks <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a>. |
| <ahref="SkCanvas_Reference#clear">clear</a> | Fills <ahref="SkCanvas_Reference#Clip">Clip</a> with <ahref="undocumented#Color">Color</a>. |
| <ahref="SkCanvas_Reference#clipPath">clipPath</a> | Combines <ahref="SkCanvas_Reference#Clip">Clip</a> with <ahref="SkPath_Reference#Path">Path</a>. |
| <ahref="SkCanvas_Reference#clipRRect">clipRRect</a> | Combines <ahref="SkCanvas_Reference#Clip">Clip</a> with <ahref="undocumented#Round_Rect">Round Rect</a>. |
| <ahref="SkCanvas_Reference#clipRect">clipRect</a> | Combines <ahref="SkCanvas_Reference#Clip">Clip</a> with <ahref="undocumented#Rect">Rect</a>. |
| <ahref="SkCanvas_Reference#clipRegion">clipRegion</a> | Combines <ahref="SkCanvas_Reference#Clip">Clip</a> with <ahref="undocumented#Region">Region</a>. |
| <ahref="SkCanvas_Reference#concat">concat</a> | Multiplies <ahref="SkCanvas_Reference#Matrix">Matrix</a> by <ahref="SkCanvas_Reference#Matrix">Matrix</a>. |
| <ahref="SkCanvas_Reference#discard">discard</a> | Makes <ahref="SkCanvas_Reference#Canvas">Canvas</a> contents undefined. |
| <ahref="SkCanvas_Reference#drawAnnotation">drawAnnotation</a> | Associates a <ahref="undocumented#Rect">Rect</a> with a key-value pair. |
| <ahref="SkCanvas_Reference#drawArc">drawArc</a> | Draws <ahref="undocumented#Arc">Arc</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a>. |
| <ahref="SkCanvas_Reference#drawAtlas">drawAtlas</a> | Draws sprites using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a>. |
| <ahref="SkCanvas_Reference#drawBitmap">drawBitmap</a> | Draws <ahref="undocumented#Bitmap">Bitmap</a> at (x, y) position. |
| <ahref="SkCanvas_Reference#drawBitmapLattice">drawBitmapLattice</a> | Draws differentially stretched <ahref="undocumented#Bitmap">Bitmap</a>. |
| <ahref="SkCanvas_Reference#drawBitmapNine">drawBitmapNine</a> | Draws <ahref="undocumented#Nine_Patch">Nine Patch</a><ahref="undocumented#Bitmap">Bitmap</a>. |
| <ahref="SkCanvas_Reference#drawBitmapRect">drawBitmapRect</a> | Draws <ahref="undocumented#Bitmap">Bitmap</a>, source <ahref="undocumented#Rect">Rect</a> to destination <ahref="undocumented#Rect">Rect</a>. |
| <ahref="SkCanvas_Reference#drawCircle">drawCircle</a> | Draws <ahref="undocumented#Circle">Circle</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a>. |
| <ahref="SkCanvas_Reference#drawColor">drawColor</a> | Fills <ahref="SkCanvas_Reference#Clip">Clip</a> with <ahref="undocumented#Color">Color</a> and <ahref="undocumented#Blend_Mode">Blend Mode</a>. |
| <ahref="SkCanvas_Reference#drawDRRect">drawDRRect</a> | Draws double <ahref="undocumented#Round_Rect">Round Rect</a> stroked or filled. |
| <ahref="SkCanvas_Reference#drawDrawable">drawDrawable</a> | Draws <ahref="undocumented#Drawable">Drawable</a>, encapsulated drawing commands. |
| <ahref="SkCanvas_Reference#drawIRect">drawIRect</a> | Draws <ahref="undocumented#IRect">IRect</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a>. |
| <ahref="SkCanvas_Reference#drawImage">drawImage</a> | Draws <ahref="undocumented#Image">Image</a> at (x, y) position. |
| <ahref="SkCanvas_Reference#drawImageLattice">drawImageLattice</a> | Draws differentially stretched <ahref="undocumented#Image">Image</a>. |
| <ahref="SkCanvas_Reference#drawImageNine">drawImageNine</a> | Draws <ahref="undocumented#Nine_Patch">Nine Patch</a><ahref="undocumented#Image">Image</a>. |
| <ahref="SkCanvas_Reference#drawImageRect">drawImageRect</a> | Draws <ahref="undocumented#Image">Image</a>, source <ahref="undocumented#Rect">Rect</a> to destination <ahref="undocumented#Rect">Rect</a>. |
| <ahref="SkCanvas_Reference#drawLine">drawLine</a> | Draws line segment between two points. |
| <ahref="SkCanvas_Reference#drawOval">drawOval</a> | Draws <ahref="undocumented#Oval">Oval</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a>. |
| <ahref="SkCanvas_Reference#drawPaint">drawPaint</a> | Fills <ahref="SkCanvas_Reference#Clip">Clip</a> with <ahref="SkPaint_Reference#Paint">Paint</a>. |
| <ahref="SkCanvas_Reference#drawPatch">drawPatch</a> | Draws cubic <ahref="undocumented#Coons">Coons</a> patch. |
| <ahref="SkCanvas_Reference#drawPath">drawPath</a> | Draws <ahref="SkPath_Reference#Path">Path</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a>. |
| <ahref="SkCanvas_Reference#drawPicture">drawPicture</a> | Draws <ahref="undocumented#Picture">Picture</a> using <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a>. |
| <ahref="SkCanvas_Reference#drawPoint">drawPoint</a> | Draws point at (x, y) position. |
| <ahref="SkCanvas_Reference#drawPoints">drawPoints</a> | Draws array as points, lines, polygon. |
| <ahref="SkCanvas_Reference#drawPosText">drawPosText</a> | Draws text at array of (x, y) positions. |
| <ahref="SkCanvas_Reference#drawPosTextH">drawPosTextH</a> | Draws text at x positions with common baseline. |
| <ahref="SkCanvas_Reference#drawRRect">drawRRect</a> | Draws <ahref="undocumented#Round_Rect">Round Rect</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a>. |
| <ahref="SkCanvas_Reference#drawRect">drawRect</a> | Draws <ahref="undocumented#Rect">Rect</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a>. |
| <ahref="SkCanvas_Reference#drawRegion">drawRegion</a> | Draws <ahref="undocumented#Region">Region</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a>. |
| <ahref="SkCanvas_Reference#drawRoundRect">drawRoundRect</a> | Draws <ahref="undocumented#Round_Rect">Round Rect</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a>. |
| <ahref="SkCanvas_Reference#drawText">drawText</a> | Draws text at (x, y), using font advance. |
| <ahref="SkCanvas_Reference#drawTextBlob">drawTextBlob</a> | Draws text with arrays of positions and <ahref="SkPaint_Reference#Paint">Paint</a>. |
| <ahref="SkCanvas_Reference#drawTextOnPath">drawTextOnPath</a> | Draws text following <ahref="SkPath_Reference#Path">Path</a> contour. |
| <ahref="SkCanvas_Reference#drawTextOnPathHV">drawTextOnPathHV</a> | Draws text following <ahref="SkPath_Reference#Path">Path</a> with offsets. |
| <ahref="SkCanvas_Reference#drawTextRSXform">drawTextRSXform</a> | Draws text with array of <ahref="undocumented#RSXform">RSXform</a>. |
| <ahref="SkCanvas_Reference#drawString">drawString</a> | Draws null terminated string at (x, y) using font advance. |
| <ahref="SkCanvas_Reference#drawVertices">drawVertices</a> | Draws <ahref="undocumented#Vertices">Vertices</a>, a triangle mesh. |
| <ahref="SkCanvas_Reference#flush">flush</a> | Triggers execution of all pending draw operations. |
| <ahref="SkCanvas_Reference#getBaseLayerSize">getBaseLayerSize</a> | Gets size of base layer in global coordinates. |
| <ahref="SkCanvas_Reference#getDeviceClipBounds">getDeviceClipBounds</a> | Returns <ahref="undocumented#IRect">IRect</a> bounds of <ahref="SkCanvas_Reference#Clip">Clip</a>. |
| <ahref="SkCanvas_Reference#getDrawFilter">getDrawFilter</a> | Legacy; to be deprecated. |
| <ahref="SkCanvas_Reference#getGrContext">getGrContext</a> | Returns <ahref="undocumented#GPU_Context">GPU Context</a> of the <ahref="undocumented#GPU_Surface">GPU Surface</a>. |
| <ahref="SkCanvas_Reference#getLocalClipBounds">getLocalClipBounds</a> | Returns <ahref="SkCanvas_Reference#Clip">Clip</a> bounds in source coordinates. |
| <ahref="SkCanvas_Reference#getMetaData">getMetaData</a> | Associates additional data with the canvas. |
| <ahref="SkCanvas_Reference#getProps">getProps</a> | Copies <ahref="undocumented#Properties">Surface Properties</a> if available. |
| <ahref="SkCanvas_Reference#getSaveCount">getSaveCount</a> | Returns depth of stack containing <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a>. |
| <ahref="SkCanvas_Reference#imageInfo">imageInfo</a> | Returns <ahref="undocumented#Info">Image Info</a> for <ahref="SkCanvas_Reference#Canvas">Canvas</a>. |
| <ahref="SkCanvas_Reference#isClipEmpty">isClipEmpty</a> | Returns if <ahref="SkCanvas_Reference#Clip">Clip</a> is empty. |
| <ahref="SkCanvas_Reference#isClipRect">isClipRect</a> | Returns if <ahref="SkCanvas_Reference#Clip">Clip</a> is <ahref="undocumented#Rect">Rect</a> and not empty. |
| <ahref="SkCanvas_Reference#MakeRasterDirect">MakeRasterDirect</a> | Creates <ahref="SkCanvas_Reference#Canvas">Canvas</a> from <ahref="undocumented#SkImageInfo">SkImageInfo</a> and pixel data. |
| <ahref="SkCanvas_Reference#MakeRasterDirectN32">MakeRasterDirectN32</a> | Creates <ahref="SkCanvas_Reference#Canvas">Canvas</a> from image specifications and pixel data. |
| <ahref="SkCanvas_Reference#makeSurface">makeSurface</a> | Creates <ahref="undocumented#Surface">Surface</a> matching <ahref="undocumented#SkImageInfo">SkImageInfo</a> and <ahref="undocumented#SkSurfaceProps">SkSurfaceProps</a>. |
| <ahref="SkCanvas_Reference#peekPixels">peekPixels</a> | Returns if <ahref="SkCanvas_Reference#Canvas">Canvas</a> has direct access to its pixels. |
| <ahref="SkCanvas_Reference#quickReject">quickReject</a> | Returns if <ahref="undocumented#Rect">Rect</a> is outside <ahref="SkCanvas_Reference#Clip">Clip</a>. |
| <ahref="SkCanvas_Reference#readPixels">readPixels</a> | Copies and converts rectangle of pixels from <ahref="SkCanvas_Reference#Canvas">Canvas</a>. |
| <ahref="SkCanvas_Reference#resetMatrix">resetMatrix</a> | Resets <ahref="SkCanvas_Reference#Matrix">Matrix</a> to identity. |
| <ahref="SkCanvas_Reference#restore">restore</a> | Restores changes to <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a>, pops save stack. |
| <ahref="SkCanvas_Reference#restoreToCount">restoreToCount</a> | Restores changes to <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a> to given depth. |
| <ahref="SkCanvas_Reference#save">save</a> | Saves <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a> on stack. |
| <ahref="SkCanvas_Reference#saveLayer">saveLayer</a> | Saves <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a> on stack; creates offscreen. |
| <ahref="SkCanvas_Reference#saveLayerAlpha">saveLayerAlpha</a> | Saves <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a> on stack; creates offscreen; sets opacity. |
| <ahref="SkCanvas_Reference#saveLayerPreserveLCDTextRequests">saveLayerPreserveLCDTextRequests</a> | Saves <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a> on stack; creates offscreen for <ahref="undocumented#LCD">LCD</a> text. |
| <ahref="SkCanvas_Reference#writePixels">writePixels</a> | Copies and converts rectangle of pixels to <ahref="SkCanvas_Reference#Canvas">Canvas</a>. |
Allocates raster <ahref="SkCanvas_Reference#Canvas">Canvas</a> that will draw directly into <ahref="SkCanvas_Reference#MakeRasterDirect">pixels</a>.
To access <ahref="SkCanvas_Reference#MakeRasterDirect">pixels</a> after drawing, call <ahref="SkCanvas_Reference#flush">flush</a> or <ahref="SkCanvas_Reference#peekPixels">peekPixels</a>.
<ahref="SkCanvas_Reference#MakeRasterDirect">info</a> dimensions are zero or positive;
<ahref="SkCanvas_Reference#MakeRasterDirect">info</a> contains <ahref="undocumented#Color_Type">Image Color Type</a> and <ahref="undocumented#Alpha_Type">Image Alpha Type</a> supported by <ahref="undocumented#Raster_Surface">Raster Surface</a>;
<ahref="SkCanvas_Reference#MakeRasterDirect">pixels</a> is not nullptr;
<ahref="SkCanvas_Reference#MakeRasterDirect">rowBytes</a> is zero or large enough to contain <ahref="SkCanvas_Reference#MakeRasterDirect">info</a> width <ahref="SkCanvas_Reference#MakeRasterDirect">pixels</a> of <ahref="undocumented#Color_Type">Image Color Type</a>.
Pass zero for <ahref="SkCanvas_Reference#MakeRasterDirect">rowBytes</a> to compute <ahref="SkCanvas_Reference#MakeRasterDirect">rowBytes</a> from <ahref="SkCanvas_Reference#MakeRasterDirect">info</a> width and size of pixel.
If <ahref="SkCanvas_Reference#MakeRasterDirect">rowBytes</a> is greater than zero, it must be equal to or greater than
<ahref="SkCanvas_Reference#MakeRasterDirect">info</a> width times bytes required for <ahref="undocumented#Color_Type">Image Color Type</a>.
<ahref="undocumented#Pixel">Pixel</a> buffer size should be <ahref="SkCanvas_Reference#MakeRasterDirect">info</a> height times computed <ahref="SkCanvas_Reference#MakeRasterDirect">rowBytes</a>.
Allocates raster <ahref="SkCanvas_Reference#Canvas">Canvas</a> specified by inline image specification. Subsequent <ahref="SkCanvas_Reference#Canvas">Canvas</a>
calls draw into <ahref="SkCanvas_Reference#MakeRasterDirectN32">pixels</a>.
<ahref="undocumented#Color_Type">Image Color Type</a> is set to <ahref="undocumented#SkColorType">kN32 SkColorType</a>.
<ahref="undocumented#Alpha_Type">Image Alpha Type</a> is set to <ahref="undocumented#SkAlphaType">kPremul SkAlphaType</a>.
To access <ahref="SkCanvas_Reference#MakeRasterDirectN32">pixels</a> after drawing, call <ahref="SkCanvas_Reference#flush">flush</a> or <ahref="SkCanvas_Reference#peekPixels">peekPixels</a>.
<ahref="SkCanvas_Reference#MakeRasterDirectN32">rowBytes</a> is zero or large enough to contain <ahref="SkCanvas_Reference#width">width</a><ahref="SkCanvas_Reference#MakeRasterDirectN32">pixels</a> of <ahref="undocumented#SkColorType">kN32 SkColorType</a>.
Pass zero for <ahref="SkCanvas_Reference#MakeRasterDirectN32">rowBytes</a> to compute <ahref="SkCanvas_Reference#MakeRasterDirectN32">rowBytes</a> from fo <ahref="SkCanvas_Reference#width">width</a> and size of pixel.
If <ahref="SkCanvas_Reference#MakeRasterDirectN32">rowBytes</a> is greater than zero, it must be equal to or greater than
<ahref="SkCanvas_Reference#width">width</a> times bytes required for <ahref="undocumented#Color_Type">Image Color Type</a>.
<ahref="undocumented#Pixel">Pixel</a> buffer size should be <ahref="SkCanvas_Reference#height">height</a> times <ahref="SkCanvas_Reference#MakeRasterDirectN32">rowBytes</a>.
pointer to destination <ahref="SkCanvas_Reference#MakeRasterDirectN32">pixels</a> buffer; buffer size should be <ahref="SkCanvas_Reference#height">height</a>
If <ahref="SkCanvas_Reference#int_int_const_SkSurfaceProps_star">props</a> equals nullptr, <ahref="undocumented#Properties">Surface Properties</a> are created with <ahref="undocumented#Properties_Legacy_Font_Host">Surface Properties Legacy Font Host</a> settings,
<td><aname="SkCanvas::ColorBehavior::kLegacy"></a><code><strong>SkCanvas::ColorBehavior::kLegacy </strong></code></td><td>0</td><td>Is a placeholder to allow specialized constructor; has no meaning.</td>
Construct a canvas that draws into <ahref="SkCanvas_Reference#const_SkBitmap_const_SkSurfaceProps">bitmap</a>.
Use <ahref="SkCanvas_Reference#const_SkBitmap_const_SkSurfaceProps">props</a> to match the device characteristics, like <ahref="undocumented#LCD">LCD</a> striping.
<ahref="SkCanvas_Reference#const_SkBitmap_const_SkSurfaceProps">bitmap</a> is copied so that subsequently editing <ahref="SkCanvas_Reference#const_SkBitmap_const_SkSurfaceProps">bitmap</a> will not affect
<div><fiddle-embedname="b7bc91ff16c9b9351b2a127f35394b82"><div><ahref="SkCanvas_Reference#Canvas">Canvas</a> offscreen draws into bitmap. <ahref="SkCanvas_Reference#saveLayerAlpha">saveLayerAlpha</a> sets up an additional
Returns <ahref="undocumented#Info">Image Info</a> for <ahref="SkCanvas_Reference#Canvas">Canvas</a>. If <ahref="SkCanvas_Reference#Canvas">Canvas</a> is not associated with <ahref="undocumented#Raster_Surface">Raster Surface</a> or
<ahref="undocumented#GPU_Surface">GPU Surface</a>, returned <ahref="undocumented#Color_Type">Image Color Type</a> is set to <ahref="undocumented#SkColorType">kUnknown SkColorType</a>.
If <ahref="SkCanvas_Reference#Canvas">Canvas</a> is associated with <ahref="undocumented#GPU_Surface">GPU Surface</a>, resolves all pending <ahref="undocumented#GPU">GPU</a> operations.
Creates <ahref="undocumented#Surface">Surface</a> matching <ahref="SkCanvas_Reference#info">info</a> and <ahref="SkCanvas_Reference#props">props</a>, and associates it with <ahref="SkCanvas_Reference#Canvas">Canvas</a>.
If <ahref="SkCanvas_Reference#props">props</a> is nullptr, matches <ahref="undocumented#Properties">Surface Properties</a> in <ahref="SkCanvas_Reference#Canvas">Canvas</a>. If <ahref="SkCanvas_Reference#props">props</a> is nullptr and <ahref="SkCanvas_Reference#Canvas">Canvas</a>
does not have <ahref="undocumented#Properties">Surface Properties</a>, creates <ahref="undocumented#Surface">Surface</a> with default <ahref="undocumented#Properties">Surface Properties</a>.
<ahref="undocumented#Surface">Surface</a> matching <ahref="SkCanvas_Reference#info">info</a> and <ahref="SkCanvas_Reference#props">props</a>, or nullptr if no match is available
Returns <ahref="undocumented#GPU_Context">GPU Context</a> of the <ahref="undocumented#GPU_Surface">GPU Surface</a> associated with <ahref="SkCanvas_Reference#Canvas">Canvas</a>.
Returns the pixel base address, <ahref="undocumented#Info">Image Info</a>, <ahref="SkCanvas_Reference#rowBytes">rowBytes</a>, and <ahref="SkCanvas_Reference#accessTopLayerPixels">origin</a> if the pixels
while <ahref="SkCanvas_Reference#Canvas">Canvas</a> is in scope and unchanged. Any <ahref="SkCanvas_Reference#Canvas">Canvas</a> call or <ahref="undocumented#Surface">Surface</a> call
If pixels are inaccessible, <ahref="SkCanvas_Reference#info">info</a>, <ahref="SkCanvas_Reference#rowBytes">rowBytes</a>, and <ahref="SkCanvas_Reference#accessTopLayerPixels">origin</a> are unchanged.
Use <ahref="undocumented#Raster_Handle_Allocator">Raster Handle Allocator</a> to blend <ahref="undocumented#Skia">Skia</a> drawing with custom drawing, typically performed
<ahref="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>, or <ahref="SkCanvas_Reference#Canvas">Canvas</a> is the base of a utility class
<ahref="SkCanvas_Reference#Canvas">Canvas</a> or <ahref="undocumented#Surface">Surface</a> call may invalidate the <ahref="SkCanvas_Reference#peekPixels">pixmap</a> values.
Copies rectangle of pixels from <ahref="SkCanvas_Reference#Canvas">Canvas</a> into <ahref="SkCanvas_Reference#dstPixels">dstPixels</a>. <ahref="SkCanvas_Reference#Matrix">Matrix</a> and <ahref="SkCanvas_Reference#Clip">Clip</a> are
ignored. Source rectangle corners are (<ahref="SkCanvas_Reference#srcX">srcX</a>, <ahref="SkCanvas_Reference#srcY">srcY</a>) and
Destination rectangle corners are (0, 0) and (<ahref="SkCanvas_Reference#dstInfo">dstInfo</a>.width(), <ahref="SkCanvas_Reference#dstInfo">dstInfo</a>.height()).
Copies each readable pixel intersecting both rectangles, without scaling,
converting to <ahref="SkCanvas_Reference#dstInfo">dstInfo</a>.colorType() and <ahref="SkCanvas_Reference#dstInfo">dstInfo</a>.alphaType() if required.
Pixels are readable when <ahref="undocumented#Device">Device</a> is raster, or backed by a <ahref="undocumented#GPU">GPU</a>.
Pixels are not readable when <ahref="SkCanvas_Reference#SkCanvas">SkCanvas</a> is returned by <ahref="undocumented#beginPage">SkDocument::beginPage</a>,
returned by <ahref="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>, or <ahref="SkCanvas_Reference#Canvas">Canvas</a> is the base of a utility
class like <ahref="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
<ahref="undocumented#Pixel">Pixel</a> values are converted only if <ahref="undocumented#Color_Type">Image Color Type</a> and <ahref="undocumented#Alpha_Type">Image Alpha Type</a>
do not match. Only pixels within both source and destination rectangles
are copied. <ahref="SkCanvas_Reference#dstPixels">dstPixels</a> contents outside the rectangle intersection are unchanged.
Pass negative values for <ahref="SkCanvas_Reference#srcX">srcX</a> or <ahref="SkCanvas_Reference#srcY">srcY</a> to offset pixels across or down destination.
<td>Source and destination rectangles do not intersect.</td></tr><tr>
<td><ahref="SkCanvas_Reference#Canvas">Canvas</a> pixels could not be converted to <ahref="SkCanvas_Reference#dstInfo">dstInfo</a>.colorType() or <ahref="SkCanvas_Reference#dstInfo">dstInfo</a>.alphaType().</td></tr><tr>
<td><ahref="SkCanvas_Reference#Canvas">Canvas</a> pixels are not readable; for instance, <ahref="SkCanvas_Reference#Canvas">Canvas</a> is document-based.</td></tr><tr>
width, height, <ahref="undocumented#Color_Type">Image Color Type</a>, and <ahref="undocumented#Alpha_Type">Image Alpha Type</a> of <ahref="SkCanvas_Reference#dstPixels">dstPixels</a></td>
storage for pixels; <ahref="SkCanvas_Reference#dstInfo">dstInfo</a>.height() times <ahref="SkCanvas_Reference#dstRowBytes">dstRowBytes</a>, or larger</td>
<div><fiddle-embedname="481e990e923a0ed34654f4361b94f096"><div><ahref="SkCanvas_Reference#Canvas">Canvas</a> returned by <ahref="undocumented#Raster_Surface">Raster Surface</a> has premultiplied pixel values.
<ahref="SkCanvas_Reference#clear">clear</a> takes unpremultiplied input with <ahref="undocumented#Alpha">Color Alpha</a> equal 0x80
and <ahref="undocumented#RGB">Color RGB</a> equal 0x55, 0xAA, 0xFF. <ahref="undocumented#RGB">Color RGB</a> is multipled by <ahref="undocumented#Alpha">Color Alpha</a>
to generate premultipled value 0x802B5580. <ahref="SkCanvas_Reference#readPixels">readPixels</a> converts pixel back
Copies rectangle of pixels from <ahref="SkCanvas_Reference#Canvas">Canvas</a> into <ahref="SkCanvas_Reference#pixmap">pixmap</a>. <ahref="SkCanvas_Reference#Matrix">Matrix</a> and <ahref="SkCanvas_Reference#Clip">Clip</a> are
ignored. Source rectangle corners are (<ahref="SkCanvas_Reference#srcX">srcX</a>, <ahref="SkCanvas_Reference#srcY">srcY</a>) and
Pixels are readable when <ahref="undocumented#Device">Device</a> is raster, or backed by a <ahref="undocumented#GPU">GPU</a>.
Pixels are not readable when <ahref="SkCanvas_Reference#SkCanvas">SkCanvas</a> is returned by <ahref="undocumented#beginPage">SkDocument::beginPage</a>,
returned by <ahref="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>, or <ahref="SkCanvas_Reference#Canvas">Canvas</a> is the base of a utility
class like <ahref="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
<ahref="undocumented#Pixel">Pixel</a> values are converted only if <ahref="undocumented#Color_Type">Image Color Type</a> and <ahref="undocumented#Alpha_Type">Image Alpha Type</a>
do not match. Only pixels within both source and destination rectangles
are copied. <ahref="SkCanvas_Reference#pixmap">pixmap</a> pixels contents outside the rectangle intersection are unchanged.
Pass negative values for <ahref="SkCanvas_Reference#srcX">srcX</a> or <ahref="SkCanvas_Reference#srcY">srcY</a> to offset pixels across or down <ahref="SkCanvas_Reference#pixmap">pixmap</a>.
<td>Source and destination rectangles do not intersect.</td></tr><tr>
<td><ahref="SkCanvas_Reference#Canvas">Canvas</a> pixels could not be converted to <ahref="SkCanvas_Reference#pixmap">pixmap</a>.colorType() or <ahref="SkCanvas_Reference#pixmap">pixmap</a>.alphaType().</td></tr><tr>
<td><ahref="SkCanvas_Reference#Canvas">Canvas</a> pixels are not readable; for instance, <ahref="SkCanvas_Reference#Canvas">Canvas</a> is document-based.</td></tr><tr>
<td><ahref="undocumented#Pixmap">Pixmap</a> pixels could not be allocated.</td></tr><tr>
<td><ahref="SkCanvas_Reference#pixmap">pixmap</a>.rowBytes() is too small to contain one row of pixels.</td></tr>
<div><fiddle-embedname="85f199032943b6483722c34a91c4e20f"><div><ahref="SkCanvas_Reference#clear">clear</a> takes unpremultiplied input with <ahref="undocumented#Alpha">Color Alpha</a> equal 0x80
and <ahref="undocumented#RGB">Color RGB</a> equal 0x55, 0xAA, 0xFF. <ahref="undocumented#RGB">Color RGB</a> is multipled by <ahref="undocumented#Alpha">Color Alpha</a>
Copies rectangle of pixels from <ahref="SkCanvas_Reference#Canvas">Canvas</a> into <ahref="SkCanvas_Reference#bitmap">bitmap</a>. <ahref="SkCanvas_Reference#Matrix">Matrix</a> and <ahref="SkCanvas_Reference#Clip">Clip</a> are
ignored. Source rectangle corners are (<ahref="SkCanvas_Reference#srcX">srcX</a>, <ahref="SkCanvas_Reference#srcY">srcY</a>) and
Destination rectangle corners are (0, 0) and (<ahref="SkCanvas_Reference#bitmap">bitmap</a>.width(), <ahref="SkCanvas_Reference#bitmap">bitmap</a>.height()).
Copies each readable pixel intersecting both rectangles, without scaling,
converting to <ahref="SkCanvas_Reference#bitmap">bitmap</a>.colorType() and <ahref="SkCanvas_Reference#bitmap">bitmap</a>.alphaType() if required.
Pixels are readable when <ahref="undocumented#Device">Device</a> is raster, or backed by a <ahref="undocumented#GPU">GPU</a>.
Pixels are not readable when <ahref="SkCanvas_Reference#SkCanvas">SkCanvas</a> is returned by <ahref="undocumented#beginPage">SkDocument::beginPage</a>,
returned by <ahref="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>, or <ahref="SkCanvas_Reference#Canvas">Canvas</a> is the base of a utility
class like <ahref="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
Allocates pixel storage in <ahref="SkCanvas_Reference#bitmap">bitmap</a> if needed.
<ahref="undocumented#Bitmap">Bitmap</a> values are converted only if <ahref="undocumented#Color_Type">Image Color Type</a> and <ahref="undocumented#Alpha_Type">Image Alpha Type</a>
do not match. Only pixels within both source and destination rectangles
are copied. <ahref="undocumented#Bitmap">Bitmap</a> pixels outside the rectangle intersection are unchanged.
Pass negative values for <ahref="SkCanvas_Reference#srcX">srcX</a> or <ahref="SkCanvas_Reference#srcY">srcY</a> to offset pixels across or down <ahref="SkCanvas_Reference#bitmap">bitmap</a>.
<td>Source and destination rectangles do not intersect.</td></tr><tr>
<td><ahref="SkCanvas_Reference#Canvas">Canvas</a> pixels could not be converted to <ahref="SkCanvas_Reference#bitmap">bitmap</a>.colorType() or <ahref="SkCanvas_Reference#bitmap">bitmap</a>.alphaType().</td></tr><tr>
<td><ahref="SkCanvas_Reference#Canvas">Canvas</a> pixels are not readable; for instance, <ahref="SkCanvas_Reference#Canvas">Canvas</a> is document-based.</td></tr><tr>
<div><fiddle-embedname="af6dec8ef974aa67bf102f29915bcd6a"><div><ahref="SkCanvas_Reference#clear">clear</a> takes unpremultiplied input with <ahref="undocumented#Alpha">Color Alpha</a> equal 0x80
and <ahref="undocumented#RGB">Color RGB</a> equal 0x55, 0xAA, 0xFF. <ahref="undocumented#RGB">Color RGB</a> is multipled by <ahref="undocumented#Alpha">Color Alpha</a>
Copies rectangle from <ahref="SkCanvas_Reference#pixels">pixels</a> to <ahref="SkCanvas_Reference#Canvas">Canvas</a>. <ahref="SkCanvas_Reference#Matrix">Matrix</a> and <ahref="SkCanvas_Reference#Clip">Clip</a> are ignored.
Source rectangle corners are (0, 0) and (<ahref="SkCanvas_Reference#info">info</a>.width(), <ahref="SkCanvas_Reference#info">info</a>.height()).
Destination rectangle corners are (<ahref="SkCanvas_Reference#x">x</a>, <ahref="SkCanvas_Reference#y">y</a>) and
(this-><ahref="SkCanvas_Reference#imageInfo">imageInfo</a>.width(), this-><ahref="SkCanvas_Reference#imageInfo">imageInfo</a>.height()). Copies each readable pixel
intersecting both rectangles, without scaling, converting to
this-><ahref="SkCanvas_Reference#imageInfo">imageInfo</a>.colorType() and this-><ahref="SkCanvas_Reference#imageInfo">imageInfo</a>.alphaType() if required.
Pixels are writable when <ahref="undocumented#Device">Device</a> is raster, or backed by a <ahref="undocumented#GPU">GPU</a>.
Pixels are not writable when <ahref="SkCanvas_Reference#SkCanvas">SkCanvas</a> is returned by <ahref="undocumented#beginPage">SkDocument::beginPage</a>,
returned by <ahref="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>, or <ahref="SkCanvas_Reference#Canvas">Canvas</a> is the base of a utility
class like <ahref="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
<ahref="undocumented#Pixel">Pixel</a> values are converted only if <ahref="undocumented#Color_Type">Image Color Type</a> and <ahref="undocumented#Alpha_Type">Image Alpha Type</a>
do not match. Only <ahref="SkCanvas_Reference#pixels">pixels</a> within both source and destination rectangles
are copied. <ahref="SkCanvas_Reference#Canvas">Canvas</a><ahref="SkCanvas_Reference#pixels">pixels</a> outside the rectangle intersection are unchanged.
Pass negative values for <ahref="SkCanvas_Reference#x">x</a> or <ahref="SkCanvas_Reference#y">y</a> to offset <ahref="SkCanvas_Reference#pixels">pixels</a> to the left or
<td>Source and destination rectangles do not intersect.</td></tr><tr>
<td><ahref="SkCanvas_Reference#pixels">pixels</a> could not be converted to this-><ahref="SkCanvas_Reference#imageInfo">imageInfo</a>.colorType() or this-><ahref="SkCanvas_Reference#imageInfo">imageInfo</a>.alphaType().</td></tr><tr>
<td><ahref="SkCanvas_Reference#Canvas">Canvas</a><ahref="SkCanvas_Reference#pixels">pixels</a> are not writable; for instance, <ahref="SkCanvas_Reference#Canvas">Canvas</a> is document-based.</td></tr><tr>
<td><ahref="SkCanvas_Reference#rowBytes">rowBytes</a> is too small to contain one row of <ahref="SkCanvas_Reference#pixels">pixels</a>.</td></tr>
width, height, <ahref="undocumented#Color_Type">Image Color Type</a>, and <ahref="undocumented#Alpha_Type">Image Alpha Type</a> of <ahref="SkCanvas_Reference#pixels">pixels</a></td>
<ahref="SkCanvas_Reference#pixels">pixels</a> to copy, of size <ahref="SkCanvas_Reference#info">info</a>.height() times <ahref="SkCanvas_Reference#rowBytes">rowBytes</a>, or larger</td>
offset into <ahref="SkCanvas_Reference#Canvas">Canvas</a> writable <ahref="SkCanvas_Reference#pixels">pixels</a> in <ahref="SkCanvas_Reference#x">x</a>; may be negative</td>
offset into <ahref="SkCanvas_Reference#Canvas">Canvas</a> writable <ahref="SkCanvas_Reference#pixels">pixels</a> in <ahref="SkCanvas_Reference#y">y</a>; may be negative</td>
Copies rectangle from pixels to <ahref="SkCanvas_Reference#Canvas">Canvas</a>. <ahref="SkCanvas_Reference#Matrix">Matrix</a> and <ahref="SkCanvas_Reference#Clip">Clip</a> are ignored.
Source rectangle corners are (0, 0) and (<ahref="SkCanvas_Reference#bitmap">bitmap</a>.width(), <ahref="SkCanvas_Reference#bitmap">bitmap</a>.height()).
Destination rectangle corners are (<ahref="SkCanvas_Reference#x">x</a>, <ahref="SkCanvas_Reference#y">y</a>) and
(this-><ahref="SkCanvas_Reference#imageInfo">imageInfo</a>.width(), this-><ahref="SkCanvas_Reference#imageInfo">imageInfo</a>.height()). Copies each readable pixel
intersecting both rectangles, without scaling, converting to
this-><ahref="SkCanvas_Reference#imageInfo">imageInfo</a>.colorType() and this-><ahref="SkCanvas_Reference#imageInfo">imageInfo</a>.alphaType() if required.
Pixels are writable when <ahref="undocumented#Device">Device</a> is raster, or backed by a <ahref="undocumented#GPU">GPU</a>.
Pixels are not writable when <ahref="SkCanvas_Reference#SkCanvas">SkCanvas</a> is returned by <ahref="undocumented#beginPage">SkDocument::beginPage</a>,
returned by <ahref="undocumented#beginRecording">SkPictureRecorder::beginRecording</a>, or <ahref="SkCanvas_Reference#Canvas">Canvas</a> is the base of a utility
class like <ahref="undocumented#SkDumpCanvas">SkDumpCanvas</a>.
<ahref="undocumented#Pixel">Pixel</a> values are converted only if <ahref="undocumented#Color_Type">Image Color Type</a> and <ahref="undocumented#Alpha_Type">Image Alpha Type</a>
do not match. Only pixels within both source and destination rectangles
are copied. <ahref="SkCanvas_Reference#Canvas">Canvas</a> pixels outside the rectangle intersection are unchanged.
<td><ahref="SkCanvas_Reference#bitmap">bitmap</a> pixels could not be converted to this-><ahref="SkCanvas_Reference#imageInfo">imageInfo</a>.colorType() or this-><ahref="SkCanvas_Reference#imageInfo">imageInfo</a>.alphaType().</td></tr><tr>
<td><ahref="SkCanvas_Reference#Canvas">Canvas</a> pixels are not writable; for instance, <ahref="SkCanvas_Reference#Canvas">Canvas</a> is document-based.</td></tr><tr>
<td><ahref="SkCanvas_Reference#bitmap">bitmap</a> pixels are inaccessible; for instance, <ahref="SkCanvas_Reference#bitmap">bitmap</a> wraps a texture.</td></tr>
<ahref="SkCanvas_Reference#Canvas">Canvas</a> savable state consists of <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>.
<ahref="SkCanvas_Reference#Clip">Clip</a> describes the area that may be drawn to.
<ahref="SkCanvas_Reference#Matrix">Matrix</a> transforms the geometry.
<ahref="undocumented#Draw_Filter">Draw Filter</a> (deprecated on most platforms) modifies the paint before drawing.
<ahref="SkCanvas_Reference#save">save</a>, <ahref="SkCanvas_Reference#saveLayer">saveLayer</a>, <ahref="SkCanvas_Reference#saveLayerPreserveLCDTextRequests">saveLayerPreserveLCDTextRequests</a>, and <ahref="SkCanvas_Reference#saveLayerAlpha">saveLayerAlpha</a>
Note that the second <ahref="SkCanvas_Reference#clipRect">clipRect</a> is not permitted to enlarge <ahref="SkCanvas_Reference#Clip">Clip</a>.</div></fiddle-embed></div>
<div><fiddle-embedname="9f563a2d60aa31d4b26742e5aa17aa4e"><div>While <ahref="SkCanvas_Reference#clipRect">clipRect</a> is given the same rectangle twice, <ahref="SkCanvas_Reference#Matrix">Matrix</a> makes the second
<ahref="SkCanvas_Reference#clipRect">clipRect</a> draw at half the size of the first.</div></fiddle-embed></div>
Saves <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a> (<ahref="undocumented#Draw_Filter">Draw Filter</a> deprecated on most platforms).
Calling <ahref="SkCanvas_Reference#restore">restore</a> discards changes to <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>,
restoring the <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a> to their state when <ahref="SkCanvas_Reference#save">save</a> was called.
<ahref="SkCanvas_Reference#Matrix">Matrix</a> may be changed by <ahref="SkCanvas_Reference#translate">translate</a>, <ahref="SkCanvas_Reference#scale">scale</a>, <ahref="SkCanvas_Reference#rotate">rotate</a>, <ahref="SkCanvas_Reference#skew">skew</a>, <ahref="SkCanvas_Reference#concat">concat</a>, <ahref="SkCanvas_Reference#setMatrix">setMatrix</a>,
and <ahref="SkCanvas_Reference#resetMatrix">resetMatrix</a>. <ahref="SkCanvas_Reference#Clip">Clip</a> may be changed by <ahref="SkCanvas_Reference#clipRect">clipRect</a>, <ahref="SkCanvas_Reference#clipRRect">clipRRect</a>, <ahref="SkCanvas_Reference#clipPath">clipPath</a>, <ahref="SkCanvas_Reference#clipRegion">clipRegion</a>.
Saved <ahref="SkCanvas_Reference#Canvas">Canvas</a> state is put on a stack; multiple calls to <ahref="SkCanvas_Reference#save">save</a> should be balance
by an equal number of calls to <ahref="SkCanvas_Reference#restore">restore</a>.
Restoring <ahref="SkCanvas_Reference#Canvas">Canvas</a> state removes <ahref="SkCanvas_Reference#translate">translate</a> from <ahref="SkCanvas_Reference#Canvas">Canvas</a> stack;
<ahref="SkCanvas_Reference#State_Stack_Layer">Layer</a> allocates a temporary offscreen <ahref="undocumented#Bitmap">Bitmap</a> to draw into. When the drawing is
complete, the <ahref="undocumented#Bitmap">Bitmap</a> is drawn into the <ahref="SkCanvas_Reference#Canvas">Canvas</a>.
<ahref="SkCanvas_Reference#State_Stack_Layer">Layer</a> is saved in a stack along with other saved state. When state with a <ahref="SkCanvas_Reference#State_Stack_Layer">Layer</a>
is restored, the offscreen <ahref="undocumented#Bitmap">Bitmap</a> is drawn into the previous layer.
<ahref="SkCanvas_Reference#State_Stack_Layer">Layer</a> may be initialized with the contents of the previous layer. When <ahref="SkCanvas_Reference#State_Stack_Layer">Layer</a> is
restored, its <ahref="undocumented#Bitmap">Bitmap</a> can be modified by <ahref="SkPaint_Reference#Paint">Paint</a> passed to <ahref="SkCanvas_Reference#State_Stack_Layer">Layer</a> to apply
<ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Blend_Mode">Blend Mode</a>.
Saves <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a> (<ahref="undocumented#Draw_Filter">Draw Filter</a> deprecated on most platforms),
and allocates an offscreen <ahref="undocumented#Bitmap">Bitmap</a> for subsequent drawing.
Calling <ahref="SkCanvas_Reference#restore">restore</a> discards changes to <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>,
<ahref="SkCanvas_Reference#Matrix">Matrix</a> may be changed by <ahref="SkCanvas_Reference#translate">translate</a>, <ahref="SkCanvas_Reference#scale">scale</a>, <ahref="SkCanvas_Reference#rotate">rotate</a>, <ahref="SkCanvas_Reference#skew">skew</a>, <ahref="SkCanvas_Reference#concat">concat</a>,
<ahref="SkCanvas_Reference#setMatrix">setMatrix</a>, and <ahref="SkCanvas_Reference#resetMatrix">resetMatrix</a>. <ahref="SkCanvas_Reference#Clip">Clip</a> may be changed by <ahref="SkCanvas_Reference#clipRect">clipRect</a>, <ahref="SkCanvas_Reference#clipRRect">clipRRect</a>,
<div><fiddle-embedname="05f9b6fa6b5007aea89dfe66c306855d"><div>Rectangles are blurred by <ahref="undocumented#Image_Filter">Image Filter</a> when <ahref="SkCanvas_Reference#restore">restore</a> draws offscreen to main
Saves <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a> (<ahref="undocumented#Draw_Filter">Draw Filter</a> deprecated on most platforms),
and allocates an offscreen <ahref="undocumented#Bitmap">Bitmap</a> for subsequent drawing.
Calling <ahref="SkCanvas_Reference#restore">restore</a> discards changes to <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>,
and draws the offscreen <ahref="undocumented#Bitmap">Bitmap</a>.
<ahref="SkCanvas_Reference#Matrix">Matrix</a> may be changed by <ahref="SkCanvas_Reference#translate">translate</a>, <ahref="SkCanvas_Reference#scale">scale</a>, <ahref="SkCanvas_Reference#rotate">rotate</a>, <ahref="SkCanvas_Reference#skew">skew</a>, <ahref="SkCanvas_Reference#concat">concat</a>,
<ahref="SkCanvas_Reference#setMatrix">setMatrix</a>, and <ahref="SkCanvas_Reference#resetMatrix">resetMatrix</a>. <ahref="SkCanvas_Reference#Clip">Clip</a> may be changed by <ahref="SkCanvas_Reference#clipRect">clipRect</a>, <ahref="SkCanvas_Reference#clipRRect">clipRRect</a>,
<div><fiddle-embedname="812f3c8f8b93e8c7e55528c7a22887bf"><div>Rectangles are blurred by <ahref="undocumented#Image_Filter">Image Filter</a> when <ahref="SkCanvas_Reference#restore">restore</a> draws offscreen to main <ahref="SkCanvas_Reference#Canvas">Canvas</a>.
The red rectangle is clipped; it does not fully fit on the offscreen <ahref="SkCanvas_Reference#Canvas">Canvas</a>.
<ahref="undocumented#Image_Filter">Image Filter</a> blurs past edge of offscreen so red rectangle is blurred on all sides.</div></fiddle-embed></div>
Saves <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a> (<ahref="undocumented#Draw_Filter">Draw Filter</a> deprecated on most platforms),
Calling <ahref="SkCanvas_Reference#restore">restore</a> discards changes to <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>,
<ahref="SkCanvas_Reference#Matrix">Matrix</a> may be changed by <ahref="SkCanvas_Reference#translate">translate</a>, <ahref="SkCanvas_Reference#scale">scale</a>, <ahref="SkCanvas_Reference#rotate">rotate</a>, <ahref="SkCanvas_Reference#skew">skew</a>, <ahref="SkCanvas_Reference#concat">concat</a>,
<ahref="SkCanvas_Reference#setMatrix">setMatrix</a>, and <ahref="SkCanvas_Reference#resetMatrix">resetMatrix</a>. <ahref="SkCanvas_Reference#Clip">Clip</a> may be changed by <ahref="SkCanvas_Reference#clipRect">clipRect</a>, <ahref="SkCanvas_Reference#clipRRect">clipRRect</a>,
Saves <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a> (<ahref="undocumented#Draw_Filter">Draw Filter</a> deprecated on most platforms),
Calling <ahref="SkCanvas_Reference#restore">restore</a> discards changes to <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>,
and blends the offscreen bitmap with <ahref="SkCanvas_Reference#alpha">alpha</a> opacity onto the prior layer.
<ahref="SkCanvas_Reference#Matrix">Matrix</a> may be changed by <ahref="SkCanvas_Reference#translate">translate</a>, <ahref="SkCanvas_Reference#scale">scale</a>, <ahref="SkCanvas_Reference#rotate">rotate</a>, <ahref="SkCanvas_Reference#skew">skew</a>, <ahref="SkCanvas_Reference#concat">concat</a>,
<ahref="SkCanvas_Reference#setMatrix">setMatrix</a>, and <ahref="SkCanvas_Reference#resetMatrix">resetMatrix</a>. <ahref="SkCanvas_Reference#Clip">Clip</a> may be changed by <ahref="SkCanvas_Reference#clipRect">clipRect</a>, <ahref="SkCanvas_Reference#clipRRect">clipRRect</a>,
<ahref="undocumented#SaveLayerFlags">SaveLayerFlags</a> provides options that may be used in any combination in <ahref="SkCanvas_Reference#SaveLayerRec">SaveLayerRec</a>,
defining how the offscreen allocated by <ahref="SkCanvas_Reference#saveLayer">saveLayer</a> operates.
<td><aname="SkCanvas::kIsOpaque_SaveLayerFlag"></a><code><strong>SkCanvas::kIsOpaque_SaveLayerFlag </strong></code></td><td>1</td><td>Creates offscreen without transparency. Flag is ignored if layer <ahref="SkPaint_Reference#Paint">Paint</a> contains
<ahref="undocumented#Image_Filter">Image Filter</a> or <ahref="undocumented#Color_Filter">Color Filter</a>.</td>
<td><aname="SkCanvas::kPreserveLCDText_SaveLayerFlag"></a><code><strong>SkCanvas::kPreserveLCDText_SaveLayerFlag </strong></code></td><td>2</td><td>Creates offscreen for <ahref="undocumented#LCD">LCD</a> text. Flag is ignored if layer <ahref="SkPaint_Reference#Paint">Paint</a> contains
<ahref="undocumented#Image_Filter">Image Filter</a> or <ahref="undocumented#Color_Filter">Color Filter</a>.</td>
<td><aname="SkCanvas::kInitWithPrevious_SaveLayerFlag"></a><code><strong>SkCanvas::kInitWithPrevious_SaveLayerFlag </strong></code></td><td>4</td><td>Initializes offscreen with the contents of the previous layer.</td>
<td><aname="SkCanvas::kDontClipToLayer_Legacy_SaveLayerFlag"></a><code><strong>SkCanvas::kDontClipToLayer_Legacy_SaveLayerFlag </strong></code></td><td>0x80000000</td><td>Only present on <ahref="undocumented#Android">Android</a>.
<div><fiddle-embedname="d314c688925d2c549d4762f5cc6e6a1a"><div><ahref="SkCanvas_Reference#Canvas">Canvas</a> layer captures red and blue circles scaled up by four.
<ahref="SkCanvas_Reference#SaveLayerRec_fBackdrop">fBackdrop</a> applies <ahref="undocumented#Image_Filter">Image Filter</a> to the prior layer when copying to the layer
offscreen; may be nullptr. Use <ahref="SkCanvas_Reference#kInitWithPrevious_SaveLayerFlag">kInitWithPrevious SaveLayerFlag</a> to copy the
prior layer without an <ahref="undocumented#Image_Filter">Image Filter</a>.
<ahref="SkCanvas_Reference#restore">restore</a> clips the layer offscreen by the alpha channel of <ahref="SkCanvas_Reference#SaveLayerRec_fClipMask">fClipMask</a> when
the offscreen is copied to <ahref="undocumented#Device">Device</a>. <ahref="SkCanvas_Reference#SaveLayerRec_fClipMask">fClipMask</a> may be nullptr. .
<ahref="SkCanvas_Reference#SaveLayerRec_fClipMatrix">fClipMatrix</a> transforms <ahref="SkCanvas_Reference#SaveLayerRec_fClipMask">fClipMask</a> before it clips the layer offscreen. If
<ahref="SkCanvas_Reference#SaveLayerRec_fClipMask">fClipMask</a> describes a translucent gradient, it may be scaled and rotated
without introducing artifacts. <ahref="SkCanvas_Reference#SaveLayerRec_fClipMatrix">fClipMatrix</a> may be nullptr.
<div><fiddle-embedname="7b18146582fc2440656b839a173ed500"><div><ahref="SkCanvas_Reference#Canvas">Canvas</a> layer captures a red anti-aliased circle and a blue aliased circle scaled
Sets <ahref="SkCanvas_Reference#SaveLayerRec_fBounds">fBounds</a>, <ahref="SkCanvas_Reference#SaveLayerRec_fPaint">fPaint</a>, and <ahref="SkCanvas_Reference#SaveLayerRec_fBackdrop">fBackdrop</a> to nullptr. Clears <ahref="SkCanvas_Reference#SaveLayerRec_fSaveLayerFlags">fSaveLayerFlags</a>.
Sets <ahref="SkCanvas_Reference#SaveLayerRec_fBounds">fBounds</a>, <ahref="SkCanvas_Reference#SaveLayerRec_fPaint">fPaint</a>, and <ahref="SkCanvas_Reference#SaveLayerRec_fSaveLayerFlags">fSaveLayerFlags</a>; sets <ahref="SkCanvas_Reference#SaveLayerRec_fBackdrop">fBackdrop</a> to nullptr.
Not ready for general use.Sets <ahref="SkCanvas_Reference#SaveLayerRec_fBounds">fBounds</a>, <ahref="SkCanvas_Reference#SaveLayerRec_fPaint">fPaint</a>, <ahref="SkCanvas_Reference#SaveLayerRec_fBackdrop">fBackdrop</a>, <ahref="SkCanvas_Reference#SaveLayerRec_fClipMask">fClipMask</a>, <ahref="SkCanvas_Reference#SaveLayerRec_fClipMatrix">fClipMatrix</a>, and <ahref="SkCanvas_Reference#SaveLayerRec_fSaveLayerFlags">fSaveLayerFlags</a>.
<ahref="SkCanvas_Reference#SaveLayerRec_SaveLayerRec_4">clipMatrix</a> uses alpha channel of image, transformed by <ahref="SkCanvas_Reference#SaveLayerRec_SaveLayerRec_4">clipMatrix</a>, to clip layer
when drawn to <ahref="SkCanvas_Reference#Canvas">Canvas</a>.
Saves <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a> (<ahref="undocumented#Draw_Filter">Draw Filter</a> deprecated on most platforms),
Calling <ahref="SkCanvas_Reference#restore">restore</a> discards changes to <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>,
<ahref="SkCanvas_Reference#Matrix">Matrix</a> may be changed by <ahref="SkCanvas_Reference#translate">translate</a>, <ahref="SkCanvas_Reference#scale">scale</a>, <ahref="SkCanvas_Reference#rotate">rotate</a>, <ahref="SkCanvas_Reference#skew">skew</a>, <ahref="SkCanvas_Reference#concat">concat</a>,
<ahref="SkCanvas_Reference#setMatrix">setMatrix</a>, and <ahref="SkCanvas_Reference#resetMatrix">resetMatrix</a>. <ahref="SkCanvas_Reference#Clip">Clip</a> may be changed by <ahref="SkCanvas_Reference#clipRect">clipRect</a>, <ahref="SkCanvas_Reference#clipRRect">clipRRect</a>,
<div><fiddle-embedname="0da8c199f1d9ec4d1b9c5d1114d6cbd6"><div>The example draws an image, and saves it into a layer with <ahref="SkCanvas_Reference#kInitWithPrevious_SaveLayerFlag">kInitWithPrevious SaveLayerFlag</a>.
Next it punches a hole in the layer and restore with <ahref="undocumented#kPlus">SkBlendMode::kPlus</a>.
Removes changes to <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a> since <ahref="SkCanvas_Reference#Canvas">Canvas</a> state was
Returns the number of saved states, each containing: <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>.
Equals the number of <ahref="SkCanvas_Reference#save">save</a> calls less the number of <ahref="SkCanvas_Reference#restore">restore</a> calls plus one.
Restores state to <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkCanvas_Reference#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a> values when <ahref="SkCanvas_Reference#save">save</a>, <ahref="SkCanvas_Reference#saveLayer">saveLayer</a>,
<ahref="SkCanvas_Reference#saveLayerPreserveLCDTextRequests">saveLayerPreserveLCDTextRequests</a>, or <ahref="SkCanvas_Reference#saveLayerAlpha">saveLayerAlpha</a> returned <ahref="SkCanvas_Reference#saveCount">saveCount</a>.
Translate <ahref="SkCanvas_Reference#Matrix">Matrix</a> by <ahref="SkCanvas_Reference#dx">dx</a> along the x-axis and <ahref="SkCanvas_Reference#dy">dy</a> along the y-axis.
<div><fiddle-embedname="eb93d5fa66a5f7a10f4f9210494d7222"><div><ahref="SkCanvas_Reference#scale">scale</a> followed by <ahref="SkCanvas_Reference#translate">translate</a> produces different results from <ahref="SkCanvas_Reference#translate">translate</a> followed
Scale <ahref="SkCanvas_Reference#Matrix">Matrix</a> by <ahref="SkCanvas_Reference#sx">sx</a> on the x-axis and <ahref="SkCanvas_Reference#sy">sy</a> on the y-axis.
Rotate <ahref="SkCanvas_Reference#Matrix">Matrix</a> by <ahref="SkCanvas_Reference#degrees">degrees</a> about a point at (<ahref="SkCanvas_Reference#px">px</a>, <ahref="SkCanvas_Reference#py">py</a>). Positive <ahref="SkCanvas_Reference#degrees">degrees</a> rotates
Skew <ahref="SkCanvas_Reference#Matrix">Matrix</a> by <ahref="SkCanvas_Reference#sx">sx</a> on the x-axis and <ahref="SkCanvas_Reference#sy">sy</a> on the y-axis. A positive value of <ahref="SkCanvas_Reference#sx">sx</a>
skews the drawing right as y increases; a positive value of <ahref="SkCanvas_Reference#sy">sy</a> skews the drawing
Mathematically, replace <ahref="SkCanvas_Reference#Matrix">Matrix</a> with a skew matrix pre-multiplied with <ahref="SkCanvas_Reference#Matrix">Matrix</a>.
Replace <ahref="SkCanvas_Reference#Matrix">Matrix</a> with <ahref="SkCanvas_Reference#matrix">matrix</a> pre-multiplied with existing <ahref="SkCanvas_Reference#Matrix">Matrix</a>.
<ahref="SkCanvas_Reference#Clip">Clip</a> is built from a stack of clipping paths. Each <ahref="SkPath_Reference#Path">Path</a> in the
stack can be constructed from one or more <ahref="SkPath_Reference#Contour">Path Contour</a> elements. The
<ahref="SkPath_Reference#Contour">Path Contour</a> may be composed of any number of <ahref="SkPath_Reference#Verb">Path Verb</a> segments. Each
<ahref="SkPath_Reference#Contour">Path Contour</a> forms a closed area; <ahref="SkPath_Reference#Fill_Type">Path Fill Type</a> defines the area enclosed
by <ahref="SkPath_Reference#Contour">Path Contour</a>.
<ahref="SkCanvas_Reference#Clip">Clip</a> stack of <ahref="SkPath_Reference#Path">Path</a> elements successfully restrict the <ahref="SkPath_Reference#Path">Path</a> area. Each
<ahref="SkPath_Reference#Path">Path</a> is transformed by <ahref="SkCanvas_Reference#Matrix">Matrix</a>, then intersected with or subtracted from the
prior <ahref="SkCanvas_Reference#Clip">Clip</a> to form the replacement <ahref="SkCanvas_Reference#Clip">Clip</a>. Use <ahref="undocumented#kDifference">SkClipOp::kDifference</a>
to subtract <ahref="SkPath_Reference#Path">Path</a> from <ahref="SkCanvas_Reference#Clip">Clip</a>; use <ahref="undocumented#kIntersect">SkClipOp::kIntersect</a> to intersect <ahref="SkPath_Reference#Path">Path</a>
with <ahref="SkCanvas_Reference#Clip">Clip</a>.
A clipping <ahref="SkPath_Reference#Path">Path</a> may be anti-aliased; if <ahref="SkPath_Reference#Path">Path</a>, after transformation, is
composed of horizontal and vertical lines, clearing <ahref="SkPaint_Reference#Anti_alias">Anti-alias</a> allows whole pixels
If clipping <ahref="SkPath_Reference#Path">Path</a> has <ahref="SkPaint_Reference#Anti_alias">Anti-alias</a> set, clip may partially clip a pixel, requiring
<ahref="SkCanvas_Reference#Clip">Clip</a> can combine with <ahref="undocumented#Rect">Rect</a> and <ahref="undocumented#Round_Rect">Round Rect</a> primitives; like
<ahref="SkPath_Reference#Path">Path</a>, these are transformed by <ahref="SkCanvas_Reference#Matrix">Matrix</a> before they are combined with <ahref="SkCanvas_Reference#Clip">Clip</a>.
<ahref="SkCanvas_Reference#Clip">Clip</a> can combine with <ahref="undocumented#Region">Region</a>. <ahref="undocumented#Region">Region</a> is assumed to be in <ahref="undocumented#Device">Device</a> coordinates
and is unaffected by <ahref="SkCanvas_Reference#Matrix">Matrix</a>.
Replace <ahref="SkCanvas_Reference#Clip">Clip</a> with the intersection or difference of <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#rect">rect</a>,
with an aliased or anti-aliased clip edge. <ahref="SkCanvas_Reference#rect">rect</a> is transformed by <ahref="SkCanvas_Reference#Matrix">Matrix</a>
before it is combined with <ahref="SkCanvas_Reference#Clip">Clip</a>.
Replace <ahref="SkCanvas_Reference#Clip">Clip</a> with the intersection or difference of <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#rect">rect</a>.
Resulting <ahref="SkCanvas_Reference#Clip">Clip</a> is aliased; pixels are fully contained by the clip.
<ahref="SkCanvas_Reference#rect">rect</a> is transformed by <ahref="SkCanvas_Reference#Matrix">Matrix</a> before it is combined with <ahref="SkCanvas_Reference#Clip">Clip</a>.
Replace <ahref="SkCanvas_Reference#Clip">Clip</a> with the intersection of <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#rect">rect</a>.
Resulting <ahref="SkCanvas_Reference#Clip">Clip</a> is aliased; pixels are fully contained by the clip.
<ahref="SkCanvas_Reference#rect">rect</a> is transformed by <ahref="SkCanvas_Reference#Matrix">Matrix</a>
before it is combined with <ahref="SkCanvas_Reference#Clip">Clip</a>.
Sets the max clip rectangle, which can be set by <ahref="SkCanvas_Reference#clipRect">clipRect</a>, <ahref="SkCanvas_Reference#clipRRect">clipRRect</a> and
<ahref="SkCanvas_Reference#clipPath">clipPath</a> and intersect the current clip with the specified <ahref="SkCanvas_Reference#androidFramework_setDeviceClipRestriction">rect</a>.
Replace <ahref="SkCanvas_Reference#Clip">Clip</a> with the intersection or difference of <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#rrect">rrect</a>,
Replace <ahref="SkCanvas_Reference#Clip">Clip</a> with the intersection or difference of <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#rrect">rrect</a>.
Resulting <ahref="SkCanvas_Reference#Clip">Clip</a> is aliased; pixels are fully contained by the clip.
<ahref="SkCanvas_Reference#rrect">rrect</a> is transformed by <ahref="SkCanvas_Reference#Matrix">Matrix</a> before it is combined with <ahref="SkCanvas_Reference#Clip">Clip</a>.
Replace <ahref="SkCanvas_Reference#Clip">Clip</a> with the intersection of <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#rrect">rrect</a>,
<ahref="SkCanvas_Reference#rrect">rrect</a> is transformed by <ahref="SkCanvas_Reference#Matrix">Matrix</a> before it is combined with <ahref="SkCanvas_Reference#Clip">Clip</a>.
Replace <ahref="SkCanvas_Reference#Clip">Clip</a> with the intersection or difference of <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#path">path</a>,
with an aliased or anti-aliased clip edge. <ahref="SkPath_Reference#Fill_Type">Path Fill Type</a> determines if <ahref="SkCanvas_Reference#path">path</a>
describes the area inside or outside its contours; and if <ahref="SkPath_Reference#Contour">Path Contour</a> overlaps
itself or another <ahref="SkPath_Reference#Contour">Path Contour</a>, whether the overlaps form part of the area.
<ahref="SkCanvas_Reference#path">path</a> is transformed by <ahref="SkCanvas_Reference#Matrix">Matrix</a> before it is combined with <ahref="SkCanvas_Reference#Clip">Clip</a>.
Replace <ahref="SkCanvas_Reference#Clip">Clip</a> with the intersection or difference of <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#path">path</a>.
Resulting <ahref="SkCanvas_Reference#Clip">Clip</a> is aliased; pixels are fully contained by the clip.
<ahref="SkPath_Reference#Fill_Type">Path Fill Type</a> determines if <ahref="SkCanvas_Reference#path">path</a>
describes the area inside or outside its contours; and if <ahref="SkPath_Reference#Contour">Path Contour</a> overlaps
itself or another <ahref="SkPath_Reference#Contour">Path Contour</a>, whether the overlaps form part of the area.
<ahref="SkCanvas_Reference#path">path</a> is transformed by <ahref="SkCanvas_Reference#Matrix">Matrix</a>
before it is combined with <ahref="SkCanvas_Reference#Clip">Clip</a>.
<div><fiddle-embedname="7856755c1bf8431c286c734b353345ad"><div>Overlapping <ahref="undocumented#Rect">Rects</a> form a clip. When clip's <ahref="SkPath_Reference#Fill_Type">Path Fill Type</a> is set to
<ahref="SkPath_Reference#kWinding_FillType">SkPath::kWinding FillType</a>, the overlap is included. Set to
<ahref="SkPath_Reference#kEvenOdd_FillType">SkPath::kEvenOdd FillType</a>, the overlap is excluded and forms a hole.</div></fiddle-embed></div>
Replace <ahref="SkCanvas_Reference#Clip">Clip</a> with the intersection of <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#path">path</a>.
Resulting <ahref="SkCanvas_Reference#Clip">Clip</a> is aliased; pixels are fully contained by the clip.
<ahref="SkPath_Reference#Fill_Type">Path Fill Type</a> determines if <ahref="SkCanvas_Reference#path">path</a>
describes the area inside or outside its contours; and if <ahref="SkPath_Reference#Contour">Path Contour</a> overlaps
itself or another <ahref="SkPath_Reference#Contour">Path Contour</a>, whether the overlaps form part of the area.
<ahref="SkCanvas_Reference#path">path</a> is transformed by <ahref="SkCanvas_Reference#Matrix">Matrix</a> before it is combined with <ahref="SkCanvas_Reference#Clip">Clip</a>.
<div><fiddle-embedname="187a7ae77a8176e417181411988534b6"><div><ahref="SkCanvas_Reference#Clip">Clip</a> loops over itself covering its center twice. When clip's <ahref="SkPath_Reference#Fill_Type">Path Fill Type</a>
is set to <ahref="SkPath_Reference#kWinding_FillType">SkPath::kWinding FillType</a>, the overlap is included. Set to
<ahref="SkPath_Reference#kEvenOdd_FillType">SkPath::kEvenOdd FillType</a>, the overlap is excluded and forms a hole.</div></fiddle-embed></div>
Replace <ahref="SkCanvas_Reference#Clip">Clip</a> with the intersection or difference of <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="undocumented#Region">Region</a><ahref="SkCanvas_Reference#deviceRgn">deviceRgn</a>.
Resulting <ahref="SkCanvas_Reference#Clip">Clip</a> is aliased; pixels are fully contained by the clip.
<ahref="SkCanvas_Reference#deviceRgn">deviceRgn</a> is unaffected by <ahref="SkCanvas_Reference#Matrix">Matrix</a>.
Return true if <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#rect">rect</a>, transformed by <ahref="SkCanvas_Reference#Matrix">Matrix</a>, can be quickly determined to be
outside of <ahref="SkCanvas_Reference#Clip">Clip</a>. May return false even though <ahref="SkCanvas_Reference#rect">rect</a> is outside of <ahref="SkCanvas_Reference#Clip">Clip</a>.
true if <ahref="SkCanvas_Reference#rect">rect</a>, transformed by <ahref="SkCanvas_Reference#Matrix">Matrix</a>, does not intersect <ahref="SkCanvas_Reference#Clip">Clip</a>
Return true if <ahref="SkCanvas_Reference#path">path</a>, transformed by <ahref="SkCanvas_Reference#Matrix">Matrix</a>, can be quickly determined to be
outside of <ahref="SkCanvas_Reference#Clip">Clip</a>. May return false even though <ahref="SkCanvas_Reference#path">path</a> is outside of <ahref="SkCanvas_Reference#Clip">Clip</a>.
true if <ahref="SkCanvas_Reference#path">path</a>, transformed by <ahref="SkCanvas_Reference#Matrix">Matrix</a>, does not intersect <ahref="SkCanvas_Reference#Clip">Clip</a>
Return bounds of <ahref="SkCanvas_Reference#Clip">Clip</a>, transformed by inverse of <ahref="SkCanvas_Reference#Matrix">Matrix</a>. If <ahref="SkCanvas_Reference#Clip">Clip</a> is empty,
return <ahref="undocumented#MakeEmpty">SkRect::MakeEmpty</a>, where all <ahref="undocumented#Rect">Rect</a> sides equal zero.
Return <ahref="SkCanvas_Reference#bounds">bounds</a> of <ahref="SkCanvas_Reference#Clip">Clip</a>, transformed by inverse of <ahref="SkCanvas_Reference#Matrix">Matrix</a>. If <ahref="SkCanvas_Reference#Clip">Clip</a> is empty,
return false, and set <ahref="SkCanvas_Reference#bounds">bounds</a> to <ahref="undocumented#MakeEmpty">SkRect::MakeEmpty</a>, where all <ahref="undocumented#Rect">Rect</a> sides equal zero.
Return <ahref="undocumented#IRect">IRect</a> bounds of <ahref="SkCanvas_Reference#Clip">Clip</a>, unaffected by <ahref="SkCanvas_Reference#Matrix">Matrix</a>. If <ahref="SkCanvas_Reference#Clip">Clip</a> is empty,
return <ahref="undocumented#MakeEmpty">SkRect::MakeEmpty</a>, where all <ahref="undocumented#Rect">Rect</a> sides equal zero.
Return <ahref="undocumented#IRect">IRect</a><ahref="SkCanvas_Reference#bounds">bounds</a> of <ahref="SkCanvas_Reference#Clip">Clip</a>, unaffected by <ahref="SkCanvas_Reference#Matrix">Matrix</a>. If <ahref="SkCanvas_Reference#Clip">Clip</a> is empty,
return false, and set <ahref="SkCanvas_Reference#bounds">bounds</a> to <ahref="undocumented#MakeEmpty">SkRect::MakeEmpty</a>, where all <ahref="undocumented#Rect">Rect</a> sides equal zero.
Fill <ahref="SkCanvas_Reference#Clip">Clip</a> with <ahref="undocumented#Color">Color</a><ahref="SkCanvas_Reference#color">color</a> using <ahref="undocumented#kSrc">SkBlendMode::kSrc</a>.
This has the effect of replacing all pixels contained by <ahref="SkCanvas_Reference#Clip">Clip</a> with <ahref="SkCanvas_Reference#color">color</a>.
Make <ahref="SkCanvas_Reference#Canvas">Canvas</a> contents undefined. Subsequent calls that read <ahref="SkCanvas_Reference#Canvas">Canvas</a> pixels,
such as drawing with <ahref="undocumented#SkBlendMode">SkBlendMode</a>, return undefined results. <ahref="SkCanvas_Reference#discard">discard</a> does
not change <ahref="SkCanvas_Reference#Clip">Clip</a> or <ahref="SkCanvas_Reference#Matrix">Matrix</a>.
<ahref="SkCanvas_Reference#discard">discard</a> may do nothing, depending on the implementation of <ahref="undocumented#Surface">Surface</a> or <ahref="undocumented#Device">Device</a>
that created <ahref="SkCanvas_Reference#Canvas">Canvas</a>.
Fill <ahref="SkCanvas_Reference#Clip">Clip</a> with <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>. <ahref="SkPaint_Reference#Paint">Paint</a> components <ahref="undocumented#Rasterizer">Rasterizer</a>, <ahref="undocumented#Mask_Filter">Mask Filter</a>, <ahref="undocumented#Shader">Shader</a>,
<ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Blend_Mode">Blend Mode</a> affect drawing;
<ahref="undocumented#Path_Effect">Path Effect</a> in <ahref="SkCanvas_Reference#paint">paint</a> is ignored.
Selects if an array of points are drawn as discrete points, as lines, or as
an open polygon.
### Constants
<table>
<tr>
<td><aname="SkCanvas::kPoints_PointMode"></a><code><strong>SkCanvas::kPoints_PointMode </strong></code></td><td>0</td><td>Draw each point separately.</td>
</tr>
<tr>
<td><aname="SkCanvas::kLines_PointMode"></a><code><strong>SkCanvas::kLines_PointMode </strong></code></td><td>1</td><td>Draw each pair of points as a line segment.</td>
</tr>
<tr>
<td><aname="SkCanvas::kPolygon_PointMode"></a><code><strong>SkCanvas::kPolygon_PointMode </strong></code></td><td>2</td><td>Draw the array of points as a open polygon.</td>
</tr>
</table>
### Example
<div><fiddle-embedname="292b4b2008961b6f612434d3121fc4ce"><div>The upper left corner shows three squares when drawn as points.
The upper right corner shows one line; when drawn as lines, two points are required per line.
The lower right corner shows two lines; when draw as polygon, no miter is drawn at the corner.
The lower left corner shows two lines with a miter when path contains polygon.</div></fiddle-embed></div>
Draw <ahref="SkCanvas_Reference#pts">pts</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a> and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
<ahref="SkCanvas_Reference#count">count</a> is the number of points; if <ahref="SkCanvas_Reference#count">count</a> is less than one, has no effect.
<ahref="SkCanvas_Reference#mode">mode</a> may be one of: <ahref="SkCanvas_Reference#kPoints_PointMode">kPoints PointMode</a>, <ahref="SkCanvas_Reference#kLines_PointMode">kLines PointMode</a>, or <ahref="SkCanvas_Reference#kPolygon_PointMode">kPolygon PointMode</a>.
If <ahref="SkCanvas_Reference#mode">mode</a> is <ahref="SkCanvas_Reference#kPoints_PointMode">kPoints PointMode</a>, the shape of point drawn depends on <ahref="SkCanvas_Reference#paint">paint</a>
<ahref="SkPaint_Reference#Stroke_Cap">Paint Stroke Cap</a>. If <ahref="SkCanvas_Reference#paint">paint</a> is set to <ahref="SkPaint_Reference#kRound_Cap">SkPaint::kRound Cap</a>, each point draws a
circle of diameter <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a>. If <ahref="SkCanvas_Reference#paint">paint</a> is set to <ahref="SkPaint_Reference#kSquare_Cap">SkPaint::kSquare Cap</a>
or <ahref="SkPaint_Reference#kButt_Cap">SkPaint::kButt Cap</a>, each point draws a square of width and height
If <ahref="SkCanvas_Reference#mode">mode</a> is <ahref="SkCanvas_Reference#kLines_PointMode">kLines PointMode</a>, each pair of points draws a line segment.
One line is drawn for every two points; each point is used once. If <ahref="SkCanvas_Reference#count">count</a> is odd,
If <ahref="SkCanvas_Reference#mode">mode</a> is <ahref="SkCanvas_Reference#kPolygon_PointMode">kPolygon PointMode</a>, each adjacent pair of points draws a line segment.
<ahref="SkCanvas_Reference#count">count</a> minus one lines are drawn; the first and last point are used once.
Each line segment respects <ahref="SkCanvas_Reference#paint">paint</a><ahref="SkPaint_Reference#Stroke_Cap">Paint Stroke Cap</a> and <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a>.
<ahref="SkPaint_Reference#Style">Paint Style</a> is ignored, as if were set to <ahref="SkPaint_Reference#kStroke_Style">SkPaint::kStroke Style</a>.
<ahref="SkPaint_Reference#Stroke_Join">Paint Stroke Join</a>, and unlike <ahref="SkCanvas_Reference#drawPath">drawPath</a>, does not create a mask from all points
Draw point at (<ahref="SkCanvas_Reference#x">x</a>, <ahref="SkCanvas_Reference#y">y</a>) using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a> and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
The shape of point drawn depends on <ahref="SkCanvas_Reference#paint">paint</a><ahref="SkPaint_Reference#Stroke_Cap">Paint Stroke Cap</a>.
If <ahref="SkCanvas_Reference#paint">paint</a> is set to <ahref="SkPaint_Reference#kRound_Cap">SkPaint::kRound Cap</a>, draw a circle of diameter
<ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a>. If <ahref="SkCanvas_Reference#paint">paint</a> is set to <ahref="SkPaint_Reference#kSquare_Cap">SkPaint::kSquare Cap</a> or <ahref="SkPaint_Reference#kButt_Cap">SkPaint::kButt Cap</a>,
draw a square of width and height <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a>.
<ahref="SkPaint_Reference#Style">Paint Style</a> is ignored, as if were set to <ahref="SkPaint_Reference#kStroke_Style">SkPaint::kStroke Style</a>.
Draw point <ahref="SkCanvas_Reference#p">p</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a> and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
The shape of point drawn depends on <ahref="SkCanvas_Reference#paint">paint</a><ahref="SkPaint_Reference#Stroke_Cap">Paint Stroke Cap</a>.
If <ahref="SkCanvas_Reference#paint">paint</a> is set to <ahref="SkPaint_Reference#kRound_Cap">SkPaint::kRound Cap</a>, draw a circle of diameter
<ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a>. If <ahref="SkCanvas_Reference#paint">paint</a> is set to <ahref="SkPaint_Reference#kSquare_Cap">SkPaint::kSquare Cap</a> or <ahref="SkPaint_Reference#kButt_Cap">SkPaint::kButt Cap</a>,
draw a square of width and height <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a>.
<ahref="SkPaint_Reference#Style">Paint Style</a> is ignored, as if were set to <ahref="SkPaint_Reference#kStroke_Style">SkPaint::kStroke Style</a>.
Draws line segment from (<ahref="SkCanvas_Reference#x0">x0</a>, <ahref="SkCanvas_Reference#y0">y0</a>) to (<ahref="SkCanvas_Reference#x1">x1</a>, <ahref="SkCanvas_Reference#y1">y1</a>) using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
In <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a> describes the line thickness;
<ahref="SkPaint_Reference#Stroke_Cap">Paint Stroke Cap</a> draws the end rounded or square;
<ahref="SkPaint_Reference#Style">Paint Style</a> is ignored, as if were set to <ahref="SkPaint_Reference#kStroke_Style">SkPaint::kStroke Style</a>.
Draws line segment from <ahref="SkCanvas_Reference#p0">p0</a> to <ahref="SkCanvas_Reference#p1">p1</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
In <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a> describes the line thickness;
<ahref="SkPaint_Reference#Stroke_Cap">Paint Stroke Cap</a> draws the end rounded or square;
<ahref="SkPaint_Reference#Style">Paint Style</a> is ignored, as if were set to <ahref="SkPaint_Reference#kStroke_Style">SkPaint::kStroke Style</a>.
Draw <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#rect">rect</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
In <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="SkPaint_Reference#Style">Paint Style</a> determines if rectangle is stroked or filled;
if stroked, <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a> describes the line thickness, and
<ahref="SkPaint_Reference#Stroke_Join">Paint Stroke Join</a> draws the corners rounded or square.
Draw <ahref="undocumented#IRect">IRect</a><ahref="SkCanvas_Reference#rect">rect</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
In <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="SkPaint_Reference#Style">Paint Style</a> determines if rectangle is stroked or filled;
if stroked, <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a> describes the line thickness, and
<ahref="SkPaint_Reference#Stroke_Join">Paint Stroke Join</a> draws the corners rounded or square.
Draw <ahref="undocumented#Region">Region</a><ahref="SkCanvas_Reference#region">region</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
In <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="SkPaint_Reference#Style">Paint Style</a> determines if rectangle is stroked or filled;
if stroked, <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a> describes the line thickness, and
<ahref="SkPaint_Reference#Stroke_Join">Paint Stroke Join</a> draws the corners rounded or square.
Draw <ahref="undocumented#Oval">Oval</a><ahref="SkCanvas_Reference#oval">oval</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a>.
In <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="SkPaint_Reference#Style">Paint Style</a> determines if <ahref="undocumented#Oval">Oval</a> is stroked or filled;
if stroked, <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a> describes the line thickness.
Draw <ahref="undocumented#Round_Rect">Round Rect</a><ahref="SkCanvas_Reference#rrect">rrect</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
In <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="SkPaint_Reference#Style">Paint Style</a> determines if <ahref="SkCanvas_Reference#rrect">rrect</a> is stroked or filled;
if stroked, <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a> describes the line thickness.
Draw <ahref="undocumented#Round_Rect">Round Rect</a><ahref="SkCanvas_Reference#outer">outer</a> and <ahref="SkCanvas_Reference#inner">inner</a>
using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
<ahref="SkCanvas_Reference#outer">outer</a> must contain <ahref="SkCanvas_Reference#inner">inner</a> or the drawing is undefined.
In <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="SkPaint_Reference#Style">Paint Style</a> determines if rrect is stroked or filled;
if stroked, <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a> describes the line thickness.
If stroked and <ahref="undocumented#Round_Rect">Round Rect</a> corner has zero length radii, <ahref="SkPaint_Reference#Stroke_Join">Paint Stroke Join</a> can
<ahref="undocumented#GPU_backed">GPU-backed</a> platforms optimize drawing when both <ahref="SkCanvas_Reference#outer">outer</a> and <ahref="SkCanvas_Reference#inner">inner</a> are
concave and <ahref="SkCanvas_Reference#outer">outer</a> contains <ahref="SkCanvas_Reference#inner">inner</a>. These platforms may not be able to draw
<ahref="SkPath_Reference#Path">Path</a> built with identical data as fast.
<div><fiddle-embedname="30823cb4edf884d330285ea161664931"><div>Outer <ahref="undocumented#Rect">Rect</a> has no corner radii, but stroke join is rounded.
Inner <ahref="undocumented#Round_Rect">Round Rect</a> has corner radii; outset stroke increases radii of corners.
Stroke join does not affect <ahref="SkCanvas_Reference#inner">inner</a><ahref="undocumented#Round_Rect">Round Rect</a> since it has no sharp corners.</div></fiddle-embed></div>
Draw <ahref="undocumented#Circle">Circle</a> at (<ahref="SkCanvas_Reference#cx">cx</a>, <ahref="SkCanvas_Reference#cy">cy</a>) with <ahref="SkCanvas_Reference#radius">radius</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
If <ahref="SkCanvas_Reference#radius">radius</a> is zero or less, nothing is drawn.
In <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="SkPaint_Reference#Style">Paint Style</a> determines if <ahref="undocumented#Circle">Circle</a> is stroked or filled;
if stroked, <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a> describes the line thickness.
Draw <ahref="undocumented#Circle">Circle</a> at (cx, cy) with <ahref="SkCanvas_Reference#radius">radius</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
If <ahref="SkCanvas_Reference#radius">radius</a> is zero or less, nothing is drawn.
In <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="SkPaint_Reference#Style">Paint Style</a> determines if <ahref="undocumented#Circle">Circle</a> is stroked or filled;
if stroked, <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a> describes the line thickness.
Draw <ahref="undocumented#Arc">Arc</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
<ahref="undocumented#Arc">Arc</a> is part of <ahref="undocumented#Oval">Oval</a> bounded by <ahref="SkCanvas_Reference#oval">oval</a>, sweeping from <ahref="SkCanvas_Reference#startAngle">startAngle</a> to <ahref="SkCanvas_Reference#startAngle">startAngle</a> plus
<ahref="SkCanvas_Reference#sweepAngle">sweepAngle</a>. <ahref="SkCanvas_Reference#startAngle">startAngle</a> and <ahref="SkCanvas_Reference#sweepAngle">sweepAngle</a> are in degrees.
<ahref="SkCanvas_Reference#startAngle">startAngle</a> of zero places start point at the right middle edge of <ahref="SkCanvas_Reference#oval">oval</a>.
A positive <ahref="SkCanvas_Reference#sweepAngle">sweepAngle</a> places <ahref="undocumented#Arc">Arc</a> end point clockwise from start point;
a negative <ahref="SkCanvas_Reference#sweepAngle">sweepAngle</a> places <ahref="undocumented#Arc">Arc</a> end point counterclockwise from start point.
<ahref="SkCanvas_Reference#sweepAngle">sweepAngle</a> may exceed 360 degrees, a full circle.
If <ahref="SkCanvas_Reference#useCenter">useCenter</a> is true, draw a wedge that includes lines from <ahref="SkCanvas_Reference#oval">oval</a>
center to <ahref="undocumented#Arc">Arc</a> end points. If <ahref="SkCanvas_Reference#useCenter">useCenter</a> is false, draw <ahref="undocumented#Arc">Arc</a> between end points.
If <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#oval">oval</a> is empty or <ahref="SkCanvas_Reference#sweepAngle">sweepAngle</a> is zero, nothing is drawn.
Draw <ahref="undocumented#Round_Rect">Round Rect</a> bounded by <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#rect">rect</a>, with corner radii (<ahref="SkCanvas_Reference#rx">rx</a>, <ahref="SkCanvas_Reference#ry">ry</a>) using <ahref="SkCanvas_Reference#Clip">Clip</a>,
<ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
In <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="SkPaint_Reference#Style">Paint Style</a> determines if <ahref="undocumented#Round_Rect">Round Rect</a> is stroked or filled;
if stroked, <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a> describes the line thickness.
If <ahref="SkCanvas_Reference#rx">rx</a> or <ahref="SkCanvas_Reference#ry">ry</a> are less than zero, they are treated as if they are zero.
If <ahref="SkCanvas_Reference#rx">rx</a> plus <ahref="SkCanvas_Reference#ry">ry</a> exceeds <ahref="SkCanvas_Reference#rect">rect</a> width or <ahref="SkCanvas_Reference#rect">rect</a> height, radii are scaled down to fit.
If <ahref="SkCanvas_Reference#rx">rx</a> and <ahref="SkCanvas_Reference#ry">ry</a> are zero, <ahref="undocumented#Round_Rect">Round Rect</a> is drawn as <ahref="undocumented#Rect">Rect</a> and if stroked is affected by
Draw <ahref="SkPath_Reference#Path">Path</a><ahref="SkCanvas_Reference#path">path</a> using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
<ahref="SkPath_Reference#Path">Path</a> contains an array of <ahref="SkPath_Reference#Contour">Path Contour</a>, each of which may be open or closed.
In <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="SkPaint_Reference#Style">Paint Style</a> determines if <ahref="undocumented#Round_Rect">Round Rect</a> is stroked or filled:
if filled, <ahref="SkPath_Reference#Fill_Type">Path Fill Type</a> determines whether <ahref="SkPath_Reference#Contour">Path Contour</a> describes inside or
outside of fill; if stroked, <ahref="SkPaint_Reference#Stroke_Width">Paint Stroke Width</a> describes the line thickness,
<ahref="SkPaint_Reference#Stroke_Cap">Paint Stroke Cap</a> describes line ends, and <ahref="SkPaint_Reference#Stroke_Join">Paint Stroke Join</a> describes how
<div><fiddle-embedname="d489555a878cb2ab08eea5faf516f54e"><div>Top rows draw stroked <ahref="SkCanvas_Reference#path">path</a> with combinations of joins and caps. The open contour
<ahref="SkCanvas_Reference#drawImage">drawImage</a>, <ahref="SkCanvas_Reference#drawImageRect">drawImageRect</a>, and <ahref="SkCanvas_Reference#drawImageNine">drawImageNine</a> can be called with a bare pointer or
Draw <ahref="undocumented#Image">Image</a><ahref="SkCanvas_Reference#image">image</a>, with its top-left corner at (<ahref="SkCanvas_Reference#left">left</a>, <ahref="SkCanvas_Reference#top">top</a>),
using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImage">paint</a>.
If <ahref="SkCanvas_Reference#drawImage">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, <ahref="undocumented#Blend_Mode">Blend Mode</a>,
and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#image">image</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawImage">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#image">image</a> bounds. If generated
mask extends beyond <ahref="SkCanvas_Reference#image">image</a> bounds, replicate <ahref="SkCanvas_Reference#image">image</a> edge colors, just as <ahref="undocumented#Shader">Shader</a>
made from <ahref="undocumented#makeShader">SkImage::makeShader</a> with <ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the
<ahref="SkCanvas_Reference#image">image</a>'s edge color when it samples outside of its bounds.
Draw <ahref="undocumented#Image">Image</a><ahref="SkCanvas_Reference#image">image</a>, with its top-left corner at (<ahref="SkCanvas_Reference#left">left</a>, <ahref="SkCanvas_Reference#top">top</a>),
using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImage_2">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImage_2">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#image">image</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawImage_2">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#image">image</a> bounds. If generated
mask extends beyond <ahref="SkCanvas_Reference#image">image</a> bounds, replicate <ahref="SkCanvas_Reference#image">image</a> edge colors, just as <ahref="undocumented#Shader">Shader</a>
made from <ahref="undocumented#makeShader">SkImage::makeShader</a> with <ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the
<ahref="SkCanvas_Reference#image">image</a>'s edge color when it samples outside of its bounds.
<ahref="SkCanvas_Reference#SrcRectConstraint">SrcRectConstraint</a> controls the behavior at the edge of the <ahref="undocumented#Rect">Rect</a> src, provided to
<ahref="SkCanvas_Reference#drawImageRect">drawImageRect</a>, trading off speed for precision.
<ahref="undocumented#Image_Filter">Image Filter</a> in <ahref="SkPaint_Reference#Paint">Paint</a> may sample multiple pixels in the image. <ahref="undocumented#Rect">Rect</a> src
restricts the bounds of pixels that may be read. <ahref="undocumented#Image_Filter">Image Filter</a> may slow down if
it cannot read outside the bounds, when sampling near the edge of <ahref="undocumented#Rect">Rect</a> src.
<ahref="SkCanvas_Reference#SrcRectConstraint">SrcRectConstraint</a> specifies whether an <ahref="undocumented#Image_Filter">Image Filter</a> is allowed to read pixels
<td><aname="SkCanvas::kStrict_SrcRectConstraint"></a><code><strong>SkCanvas::kStrict_SrcRectConstraint </strong></code></td><td>Requires Image_Filter to respect Rect src,</td><td>sampling only inside of its bounds, possibly with a performance penalty.</td>
<td><aname="SkCanvas::kFast_SrcRectConstraint"></a><code><strong>SkCanvas::kFast_SrcRectConstraint </strong></code></td><td>Permits Image_Filter to sample outside of Rect src</td><td>by half the width of <ahref="undocumented#Image_Filter">Image Filter</a>, permitting it to run faster but with
Drawing the checkerboard with <ahref="SkCanvas_Reference#kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> shows only a blur of black and white.
Drawing the checkerboard with <ahref="SkCanvas_Reference#kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows red to bleed in the corners.</div></fiddle-embed></div>
Draw <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#src">src</a> of <ahref="undocumented#Image">Image</a><ahref="SkCanvas_Reference#image">image</a>, scaled and translated to fill <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#dst">dst</a>.
Additionally transform draw using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageRect">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageRect">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#image">image</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawImageRect">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#image">image</a> bounds.
If generated mask extends beyond <ahref="SkCanvas_Reference#image">image</a> bounds, replicate <ahref="SkCanvas_Reference#image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="undocumented#makeShader">SkImage::makeShader</a> with <ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set
replicates the <ahref="SkCanvas_Reference#image">image</a>'s edge color when it samples outside of its bounds.
<ahref="SkCanvas_Reference#constraint">constraint</a> set to <ahref="SkCanvas_Reference#kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within <ahref="SkCanvas_Reference#src">src</a>; set to <ahref="SkCanvas_Reference#kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
<div><fiddle-embedname="2b01c707ef8b5ce3023b7a1d55fce059"><div>The left bitmap draws with <ahref="SkPaint_Reference#Paint">Paint</a> default <ahref="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, and stays within
its bounds; there's no bleeding with <ahref="SkCanvas_Reference#kFast_SrcRectConstraint">kFast SrcRectConstraint</a>.
the middle and right bitmaps draw with <ahref="undocumented#SkFilterQuality">kLow SkFilterQuality</a>; with
<ahref="SkCanvas_Reference#kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a>, the filter remains within the checkerboard, and
with <ahref="SkCanvas_Reference#kFast_SrcRectConstraint">kFast SrcRectConstraint</a> red bleeds on the edges.</div></fiddle-embed></div>
Draw <ahref="undocumented#IRect">IRect</a><ahref="SkCanvas_Reference#isrc">isrc</a> of <ahref="undocumented#Image">Image</a><ahref="SkCanvas_Reference#image">image</a>, scaled and translated to fill <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#dst">dst</a>.
Note that <ahref="SkCanvas_Reference#isrc">isrc</a> is on integer pixel boundaries; <ahref="SkCanvas_Reference#dst">dst</a> may include fractional
boundaries. Additionally transform draw using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a>
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageRect_2">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#image">image</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawImageRect_2">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#image">image</a> bounds.
If generated mask extends beyond <ahref="SkCanvas_Reference#image">image</a> bounds, replicate <ahref="SkCanvas_Reference#image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="undocumented#makeShader">SkImage::makeShader</a> with <ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set
replicates the <ahref="SkCanvas_Reference#image">image</a>'s edge color when it samples outside of its bounds.
<ahref="SkCanvas_Reference#constraint">constraint</a> set to <ahref="SkCanvas_Reference#kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within src; set to <ahref="SkCanvas_Reference#kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
Draw <ahref="undocumented#Image">Image</a><ahref="SkCanvas_Reference#image">image</a>, scaled and translated to fill <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#dst">dst</a>, using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>,
and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageRect_3">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageRect_3">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#image">image</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawImageRect_3">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#image">image</a> bounds.
If generated mask extends beyond <ahref="SkCanvas_Reference#image">image</a> bounds, replicate <ahref="SkCanvas_Reference#image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="undocumented#makeShader">SkImage::makeShader</a> with <ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set
replicates the <ahref="SkCanvas_Reference#image">image</a>'s edge color when it samples outside of its bounds.
<ahref="SkCanvas_Reference#constraint">constraint</a> set to <ahref="SkCanvas_Reference#kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within src; set to <ahref="SkCanvas_Reference#kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
Draw <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#src">src</a> of <ahref="undocumented#Image">Image</a><ahref="SkCanvas_Reference#image">image</a>, scaled and translated to fill <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#dst">dst</a>.
Additionally transform draw using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageRect_4">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageRect_4">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#image">image</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawImageRect_4">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#image">image</a> bounds.
If generated mask extends beyond <ahref="SkCanvas_Reference#image">image</a> bounds, replicate <ahref="SkCanvas_Reference#image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="undocumented#makeShader">SkImage::makeShader</a> with <ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set
replicates the <ahref="SkCanvas_Reference#image">image</a>'s edge color when it samples outside of its bounds.
<ahref="SkCanvas_Reference#constraint">constraint</a> set to <ahref="SkCanvas_Reference#kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within <ahref="SkCanvas_Reference#src">src</a>; set to <ahref="SkCanvas_Reference#kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
<div><fiddle-embedname="589999454db90c573f7facfb007253a7"><div><ahref="SkCanvas_Reference#Canvas">Canvas</a> scales and translates; transformation from <ahref="SkCanvas_Reference#src">src</a> to <ahref="SkCanvas_Reference#dst">dst</a> also scales.
Draw <ahref="undocumented#IRect">IRect</a><ahref="SkCanvas_Reference#isrc">isrc</a> of <ahref="undocumented#Image">Image</a><ahref="SkCanvas_Reference#image">image</a>, scaled and translated to fill <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#dst">dst</a>.
<ahref="SkCanvas_Reference#isrc">isrc</a> is on integer pixel boundaries; <ahref="SkCanvas_Reference#dst">dst</a> may include fractional boundaries.
Additionally transform draw using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageRect_5">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageRect_5">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#image">image</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawImageRect_5">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#image">image</a> bounds.
If generated mask extends beyond <ahref="SkCanvas_Reference#image">image</a> bounds, replicate <ahref="SkCanvas_Reference#image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="undocumented#makeShader">SkImage::makeShader</a> with <ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set
replicates the <ahref="SkCanvas_Reference#image">image</a>'s edge color when it samples outside of its bounds.
<ahref="SkCanvas_Reference#constraint">constraint</a> set to <ahref="SkCanvas_Reference#kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within src; set to <ahref="SkCanvas_Reference#kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
Draw <ahref="undocumented#Image">Image</a><ahref="SkCanvas_Reference#image">image</a>, scaled and translated to fill <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#dst">dst</a>,
using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageRect_6">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageRect_6">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#image">image</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawImageRect_6">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#image">image</a> bounds.
If generated mask extends beyond <ahref="SkCanvas_Reference#image">image</a> bounds, replicate <ahref="SkCanvas_Reference#image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="undocumented#makeShader">SkImage::makeShader</a> with <ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set
replicates the <ahref="SkCanvas_Reference#image">image</a>'s edge color when it samples outside of its bounds.
<ahref="SkCanvas_Reference#constraint">constraint</a> set to <ahref="SkCanvas_Reference#kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within src; set to <ahref="SkCanvas_Reference#kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
Draw <ahref="undocumented#Image">Image</a><ahref="SkCanvas_Reference#image">image</a> stretched differentially to fit into <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#dst">dst</a>.
<ahref="undocumented#IRect">IRect</a><ahref="SkCanvas_Reference#center">center</a> divides the <ahref="SkCanvas_Reference#image">image</a> into nine sections: four sides, four corners, and
the <ahref="SkCanvas_Reference#center">center</a>. Corners are unscaled or scaled down proportionately if their sides
are larger than <ahref="SkCanvas_Reference#dst">dst</a>; <ahref="SkCanvas_Reference#center">center</a> and four sides are scaled to fit remaining space, if any.
Additionally transform draw using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageNine">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageNine">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#image">image</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawImageNine">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#image">image</a> bounds.
If generated mask extends beyond <ahref="SkCanvas_Reference#image">image</a> bounds, replicate <ahref="SkCanvas_Reference#image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="undocumented#makeShader">SkImage::makeShader</a> with <ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set
replicates the <ahref="SkCanvas_Reference#image">image</a>'s edge color when it samples outside of its bounds.
<div><fiddle-embedname="47f78f3f70ccd9e6c40ee3203a5c71dd"><div>The leftmost <ahref="SkCanvas_Reference#image">image</a> is smaller than <ahref="SkCanvas_Reference#center">center</a>; only corners are drawn, all scaled to fit.
The second <ahref="SkCanvas_Reference#image">image</a> equals the size of <ahref="SkCanvas_Reference#center">center</a>; only corners are drawn, unscaled.
The remaining images are larger than <ahref="SkCanvas_Reference#center">center</a>. All corners draw unscaled. The sides
and <ahref="SkCanvas_Reference#center">center</a> are scaled if needed to take up the remaining space.</div></fiddle-embed></div>
Draw <ahref="undocumented#Image">Image</a><ahref="SkCanvas_Reference#image">image</a> stretched differentially to fit into <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#dst">dst</a>.
<ahref="undocumented#IRect">IRect</a><ahref="SkCanvas_Reference#center">center</a> divides the <ahref="SkCanvas_Reference#image">image</a> into nine sections: four sides, four corners, and
the <ahref="SkCanvas_Reference#center">center</a>. Corners are unscaled or scaled down proportionately if their sides
are larger than <ahref="SkCanvas_Reference#dst">dst</a>; <ahref="SkCanvas_Reference#center">center</a> and four sides are scaled to fit remaining space, if any.
Additionally transform draw using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageNine_2">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageNine_2">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#image">image</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawImageNine_2">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#image">image</a> bounds.
If generated mask extends beyond <ahref="SkCanvas_Reference#image">image</a> bounds, replicate <ahref="SkCanvas_Reference#image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="undocumented#makeShader">SkImage::makeShader</a> with <ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set
replicates the <ahref="SkCanvas_Reference#image">image</a>'s edge color when it samples outside of its bounds.
<div><fiddle-embedname="e941e553970569d1ffb03a42f7fcd6d9"><div>The two leftmost images has four corners and sides to the left and right of <ahref="SkCanvas_Reference#center">center</a>.
The leftmost <ahref="SkCanvas_Reference#image">image</a> scales the width of corners proportionately to fit.
The third and fourth <ahref="SkCanvas_Reference#image">image</a> corners are unscaled; the sides and <ahref="SkCanvas_Reference#center">center</a> are scaled to
Draw <ahref="undocumented#Bitmap">Bitmap</a><ahref="SkCanvas_Reference#bitmap">bitmap</a>, with its top-left corner at (<ahref="SkCanvas_Reference#left">left</a>, <ahref="SkCanvas_Reference#top">top</a>),
using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawBitmap">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawBitmap">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#bitmap">bitmap</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawBitmap">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#bitmap">bitmap</a> bounds.
just as <ahref="undocumented#Shader">Shader</a> made from <ahref="undocumented#MakeBitmapShader">SkShader::MakeBitmapShader</a> with
<ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the <ahref="SkCanvas_Reference#bitmap">bitmap</a>'s edge color when it samples
Draw <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#src">src</a> of <ahref="undocumented#Bitmap">Bitmap</a><ahref="SkCanvas_Reference#bitmap">bitmap</a>, scaled and translated to fill <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#dst">dst</a>.
Additionally transform draw using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawBitmapRect">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawBitmapRect">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#bitmap">bitmap</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawBitmapRect">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#bitmap">bitmap</a> bounds.
just as <ahref="undocumented#Shader">Shader</a> made from <ahref="undocumented#MakeBitmapShader">SkShader::MakeBitmapShader</a> with
<ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the <ahref="SkCanvas_Reference#bitmap">bitmap</a>'s edge color when it samples
<ahref="SkCanvas_Reference#constraint">constraint</a> set to <ahref="SkCanvas_Reference#kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within <ahref="SkCanvas_Reference#src">src</a>; set to <ahref="SkCanvas_Reference#kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
Draw <ahref="undocumented#IRect">IRect</a><ahref="SkCanvas_Reference#isrc">isrc</a> of <ahref="undocumented#Bitmap">Bitmap</a><ahref="SkCanvas_Reference#bitmap">bitmap</a>, scaled and translated to fill <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#dst">dst</a>.
<ahref="SkCanvas_Reference#isrc">isrc</a> is on integer pixel boundaries; <ahref="SkCanvas_Reference#dst">dst</a> may include fractional boundaries.
Additionally transform draw using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawBitmapRect_2">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawBitmapRect_2">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#bitmap">bitmap</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawBitmapRect_2">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#bitmap">bitmap</a> bounds.
just as <ahref="undocumented#Shader">Shader</a> made from <ahref="undocumented#MakeBitmapShader">SkShader::MakeBitmapShader</a> with
<ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the <ahref="SkCanvas_Reference#bitmap">bitmap</a>'s edge color when it samples
<ahref="SkCanvas_Reference#constraint">constraint</a> set to <ahref="SkCanvas_Reference#kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within src; set to <ahref="SkCanvas_Reference#kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
Draw <ahref="undocumented#Bitmap">Bitmap</a><ahref="SkCanvas_Reference#bitmap">bitmap</a>, scaled and translated to fill <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#dst">dst</a>.
isrc is on integer pixel boundaries; <ahref="SkCanvas_Reference#dst">dst</a> may include fractional boundaries.
Additionally transform draw using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawBitmapRect_3">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawBitmapRect_3">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#bitmap">bitmap</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawBitmapRect_3">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#bitmap">bitmap</a> bounds.
just as <ahref="undocumented#Shader">Shader</a> made from <ahref="undocumented#MakeBitmapShader">SkShader::MakeBitmapShader</a> with
<ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the <ahref="SkCanvas_Reference#bitmap">bitmap</a>'s edge color when it samples
<ahref="SkCanvas_Reference#constraint">constraint</a> set to <ahref="SkCanvas_Reference#kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within src; set to <ahref="SkCanvas_Reference#kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
Draw <ahref="undocumented#Bitmap">Bitmap</a><ahref="SkCanvas_Reference#bitmap">bitmap</a> stretched differentially to fit into <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#dst">dst</a>.
<ahref="undocumented#IRect">IRect</a><ahref="SkCanvas_Reference#center">center</a> divides the <ahref="SkCanvas_Reference#bitmap">bitmap</a> into nine sections: four sides, four corners,
and the <ahref="SkCanvas_Reference#center">center</a>. Corners are unscaled or scaled down proportionately if their
sides are larger than <ahref="SkCanvas_Reference#dst">dst</a>; <ahref="SkCanvas_Reference#center">center</a> and four sides are scaled to fit remaining
Additionally transform draw using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawBitmapNine">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawBitmapNine">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#bitmap">bitmap</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawBitmapNine">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#bitmap">bitmap</a> bounds.
just as <ahref="undocumented#Shader">Shader</a> made from <ahref="undocumented#MakeBitmapShader">SkShader::MakeBitmapShader</a> with
<ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the <ahref="SkCanvas_Reference#bitmap">bitmap</a>'s edge color when it samples
<div><fiddle-embedname="a4a30aa10e566a85fe6f6cad2ff9935b"><div>The two leftmost <ahref="SkCanvas_Reference#bitmap">bitmap</a> draws has four corners and sides to the left and right of <ahref="SkCanvas_Reference#center">center</a>.
The leftmost <ahref="SkCanvas_Reference#bitmap">bitmap</a> draw scales the width of corners proportionately to fit.
The third and fourth draw corners are unscaled; the sides and <ahref="SkCanvas_Reference#center">center</a> are scaled to
<ahref="SkCanvas_Reference#Lattice">Lattice</a> divides <ahref="undocumented#Bitmap">Bitmap</a> or <ahref="undocumented#Image">Image</a> into a rectangular grid.
Optional setting per rectangular grid entry to make it transparent.
### Constants
<table>
<tr>
<td><aname="SkCanvas::Lattice::kTransparent_Flags"></a><code><strong>SkCanvas::Lattice::kTransparent_Flags </strong></code></td><td>1</td><td>Set to skip lattice rectangle by making it transparent.</td>
</tr>
</table>
<code><strong>const int* fXDivs</strong></code>
Array of x-coordinates that divide the bitmap vertically.
Draw <ahref="undocumented#Bitmap">Bitmap</a><ahref="SkCanvas_Reference#bitmap">bitmap</a> stretched differentially to fit into <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#dst">dst</a>.
<ahref="SkCanvas_Reference#Lattice">Lattice</a><ahref="SkCanvas_Reference#lattice">lattice</a> divides <ahref="SkCanvas_Reference#bitmap">bitmap</a> into a rectangular grid.
of <ahref="SkCanvas_Reference#drawBitmapNine">drawBitmapNine</a>, fixed <ahref="SkCanvas_Reference#lattice">lattice</a> elements never scale larger than their initial
size and shrink proportionately when all fixed elements exceed the <ahref="SkCanvas_Reference#bitmap">bitmap</a>'s
Additionally transform draw using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawBitmapLattice">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawBitmapLattice">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="SkCanvas_Reference#bitmap">bitmap</a> is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawBitmapLattice">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="SkCanvas_Reference#bitmap">bitmap</a> bounds.
just as <ahref="undocumented#Shader">Shader</a> made from <ahref="undocumented#MakeBitmapShader">SkShader::MakeBitmapShader</a> with
<ahref="undocumented#kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the <ahref="SkCanvas_Reference#bitmap">bitmap</a>'s edge color when it samples
<div><fiddle-embedname="773134f4fe127f9c9caa110c24c988dc"><div>The two leftmost <ahref="SkCanvas_Reference#bitmap">bitmap</a> draws has four corners and sides to the left and right of center.
The leftmost <ahref="SkCanvas_Reference#bitmap">bitmap</a> draw scales the width of corners proportionately to fit.
Draw <ahref="undocumented#Image">Image</a><ahref="SkCanvas_Reference#image">image</a> stretched differentially to fit into <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#dst">dst</a>.
<ahref="SkCanvas_Reference#Lattice">Lattice</a><ahref="SkCanvas_Reference#lattice">lattice</a> divides <ahref="SkCanvas_Reference#image">image</a> into a rectangular grid.
of <ahref="SkCanvas_Reference#drawBitmapNine">drawBitmapNine</a>, fixed <ahref="SkCanvas_Reference#lattice">lattice</a> elements never scale larger than their initial
Additionally transform draw using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageLattice">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#drawImageLattice">paint</a> is supplied, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If bitmap is <ahref="undocumented#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="SkCanvas_Reference#drawImageLattice">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from bitmap bounds.
<div><fiddle-embedname="c52ee1d4c69363c6b109539c1da3ce83"><div>The leftmost <ahref="SkCanvas_Reference#image">image</a> is smaller than center; only corners are drawn, all scaled to fit.
The second <ahref="SkCanvas_Reference#image">image</a> equals the size of center; only corners are drawn, unscaled.
Draw <ahref="SkCanvas_Reference#text">text</a>, with origin at (<ahref="SkCanvas_Reference#x">x</a>, <ahref="SkCanvas_Reference#y">y</a>), using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
<ahref="SkCanvas_Reference#text">text</a>'s meaning depends on <ahref="SkPaint_Reference#Text_Encoding">Paint Text Encoding</a>; by default, <ahref="SkCanvas_Reference#text">text</a> encoding is
<ahref="SkCanvas_Reference#x">x</a> and <ahref="SkCanvas_Reference#y">y</a> meaning depends on <ahref="SkPaint_Reference#Text_Align">Paint Text Align</a> and <ahref="SkPaint_Reference#Vertical_Text">Paint Vertical Text</a>; by default
<ahref="SkCanvas_Reference#text">text</a> draws left to right, positioning the first glyph's left side bearing at <ahref="SkCanvas_Reference#x">x</a>
and its baseline at <ahref="SkCanvas_Reference#y">y</a>. <ahref="undocumented#Text">Text</a> size is affected by <ahref="SkCanvas_Reference#Matrix">Matrix</a> and <ahref="SkPaint_Reference#Text_Size">Paint Text Size</a>.
All elements of <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</a>, <ahref="undocumented#Rasterizer">Rasterizer</a>, <ahref="undocumented#Mask_Filter">Mask Filter</a>, <ahref="undocumented#Shader">Shader</a>,
<ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>; apply to <ahref="SkCanvas_Reference#text">text</a>. By default, draws
<div><fiddle-embedname="a3365bd3044b13e8e0318ee8aefbdf91"><div>The same <ahref="SkCanvas_Reference#text">text</a> is drawn varying <ahref="SkPaint_Reference#Text_Size">Paint Text Size</a> and varying
Draw null terminated <ahref="SkCanvas_Reference#drawString">string</a>, with origin at (<ahref="SkCanvas_Reference#x">x</a>, <ahref="SkCanvas_Reference#y">y</a>), using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and
<ahref="SkCanvas_Reference#drawString">string</a>'s meaning depends on <ahref="SkPaint_Reference#Text_Encoding">Paint Text Encoding</a>; by default, <ahref="SkCanvas_Reference#drawString">string</a> encoding is
<ahref="undocumented#UTF_8">UTF-8</a>. Other values of <ahref="SkPaint_Reference#Text_Encoding">Paint Text Encoding</a> are unlikely to produce the desired
results, since zero bytes may be embedded in the <ahref="SkCanvas_Reference#drawString">string</a>.
<ahref="SkCanvas_Reference#x">x</a> and <ahref="SkCanvas_Reference#y">y</a> meaning depends on <ahref="SkPaint_Reference#Text_Align">Paint Text Align</a> and <ahref="SkPaint_Reference#Vertical_Text">Paint Vertical Text</a>; by default
<ahref="SkCanvas_Reference#drawString">string</a> draws left to right, positioning the first glyph's left side bearing at <ahref="SkCanvas_Reference#x">x</a>
and its baseline at <ahref="SkCanvas_Reference#y">y</a>. <ahref="undocumented#Text">Text</a> size is affected by <ahref="SkCanvas_Reference#Matrix">Matrix</a> and <ahref="SkPaint_Reference#Text_Size">Paint Text Size</a>.
All elements of <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</a>, <ahref="undocumented#Rasterizer">Rasterizer</a>, <ahref="undocumented#Mask_Filter">Mask Filter</a>, <ahref="undocumented#Shader">Shader</a>,
<ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>; apply to text. By default, draws
Draw null terminated <ahref="SkCanvas_Reference#drawString_2">string</a>, with origin at (<ahref="SkCanvas_Reference#x">x</a>, <ahref="SkCanvas_Reference#y">y</a>), using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and
<ahref="SkCanvas_Reference#drawString_2">string</a>'s meaning depends on <ahref="SkPaint_Reference#Text_Encoding">Paint Text Encoding</a>; by default, <ahref="SkCanvas_Reference#drawString_2">string</a> encoding is
<ahref="undocumented#UTF_8">UTF-8</a>. Other values of <ahref="SkPaint_Reference#Text_Encoding">Paint Text Encoding</a> are unlikely to produce the desired
results, since zero bytes may be embedded in the <ahref="SkCanvas_Reference#drawString_2">string</a>.
<ahref="SkCanvas_Reference#x">x</a> and <ahref="SkCanvas_Reference#y">y</a> meaning depends on <ahref="SkPaint_Reference#Text_Align">Paint Text Align</a> and <ahref="SkPaint_Reference#Vertical_Text">Paint Vertical Text</a>; by default
<ahref="SkCanvas_Reference#drawString_2">string</a> draws left to right, positioning the first glyph's left side bearing at <ahref="SkCanvas_Reference#x">x</a>
and its baseline at <ahref="SkCanvas_Reference#y">y</a>. <ahref="undocumented#Text">Text</a> size is affected by <ahref="SkCanvas_Reference#Matrix">Matrix</a> and <ahref="SkPaint_Reference#Text_Size">Paint Text Size</a>.
All elements of <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</a>, <ahref="undocumented#Rasterizer">Rasterizer</a>, <ahref="undocumented#Mask_Filter">Mask Filter</a>, <ahref="undocumented#Shader">Shader</a>,
<ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>; apply to text. By default, draws
Draw each glyph in <ahref="SkCanvas_Reference#text">text</a> with the origin in <ahref="SkCanvas_Reference#pos">pos</a> array, using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and
<ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>. The number of entries in <ahref="SkCanvas_Reference#pos">pos</a> array must match the number of glyphs
described by <ahref="SkCanvas_Reference#byteLength">byteLength</a> of <ahref="SkCanvas_Reference#text">text</a>.
<ahref="SkCanvas_Reference#text">text</a>'s meaning depends on <ahref="SkPaint_Reference#Text_Encoding">Paint Text Encoding</a>; by default, <ahref="SkCanvas_Reference#text">text</a> encoding is
<ahref="undocumented#UTF_8">UTF-8</a>. <ahref="SkCanvas_Reference#pos">pos</a> elements' meaning depends on <ahref="SkPaint_Reference#Text_Align">Paint Text Align</a> and <ahref="SkPaint_Reference#Vertical_Text">Paint Vertical Text</a>;
All elements of <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</a>, <ahref="undocumented#Rasterizer">Rasterizer</a>, <ahref="undocumented#Mask_Filter">Mask Filter</a>, <ahref="undocumented#Shader">Shader</a>,
<ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>; apply to <ahref="SkCanvas_Reference#text">text</a>. By default, draws
Draw each glyph in <ahref="SkCanvas_Reference#text">text</a> with its (x, y) origin composed from <ahref="SkCanvas_Reference#xpos">xpos</a> array and
<ahref="SkCanvas_Reference#constY">constY</a>, using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>. The number of entries in <ahref="SkCanvas_Reference#xpos">xpos</a> array
must match the number of glyphs described by <ahref="SkCanvas_Reference#byteLength">byteLength</a> of <ahref="SkCanvas_Reference#text">text</a>.
<ahref="SkCanvas_Reference#text">text</a>'s meaning depends on <ahref="SkPaint_Reference#Text_Encoding">Paint Text Encoding</a>; by default, <ahref="SkCanvas_Reference#text">text</a> encoding is
<ahref="undocumented#UTF_8">UTF-8</a>. pos elements' meaning depends on <ahref="SkPaint_Reference#Text_Align">Paint Text Align</a> and <ahref="SkPaint_Reference#Vertical_Text">Paint Vertical Text</a>;
by default each glyph's left side bearing is positioned at an <ahref="SkCanvas_Reference#xpos">xpos</a> element and
its baseline is positioned at <ahref="SkCanvas_Reference#constY">constY</a>. <ahref="undocumented#Text">Text</a> size is affected by <ahref="SkCanvas_Reference#Matrix">Matrix</a> and
<ahref="SkPaint_Reference#Text_Size">Paint Text Size</a>.
All elements of <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</a>, <ahref="undocumented#Rasterizer">Rasterizer</a>, <ahref="undocumented#Mask_Filter">Mask Filter</a>, <ahref="undocumented#Shader">Shader</a>,
<ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>; apply to <ahref="SkCanvas_Reference#text">text</a>. By default, draws
Draw <ahref="SkCanvas_Reference#text">text</a> on <ahref="SkPath_Reference#Path">Path</a><ahref="SkCanvas_Reference#path">path</a>, using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
Origin of <ahref="SkCanvas_Reference#text">text</a> is at distance <ahref="SkCanvas_Reference#hOffset">hOffset</a> along the <ahref="SkCanvas_Reference#path">path</a>, offset by a perpendicular
vector of length <ahref="SkCanvas_Reference#vOffset">vOffset</a>. If the <ahref="SkCanvas_Reference#path">path</a> section corresponding the glyph advance is
mapped to projected points parallel to the <ahref="SkCanvas_Reference#path">path</a>. If the <ahref="SkCanvas_Reference#text">text</a>'s advance is larger
than the <ahref="SkCanvas_Reference#path">path</a> length, the excess <ahref="SkCanvas_Reference#text">text</a> is clipped.
<ahref="SkCanvas_Reference#text">text</a>'s meaning depends on <ahref="SkPaint_Reference#Text_Encoding">Paint Text Encoding</a>; by default, <ahref="SkCanvas_Reference#text">text</a> encoding is
<ahref="undocumented#UTF_8">UTF-8</a>. Origin meaning depends on <ahref="SkPaint_Reference#Text_Align">Paint Text Align</a> and <ahref="SkPaint_Reference#Vertical_Text">Paint Vertical Text</a>; by
default <ahref="SkCanvas_Reference#text">text</a> positions the first glyph's left side bearing at origin x and its
baseline at origin y. <ahref="undocumented#Text">Text</a> size is affected by <ahref="SkCanvas_Reference#Matrix">Matrix</a> and <ahref="SkPaint_Reference#Text_Size">Paint Text Size</a>.
All elements of <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</a>, <ahref="undocumented#Rasterizer">Rasterizer</a>, <ahref="undocumented#Mask_Filter">Mask Filter</a>, <ahref="undocumented#Shader">Shader</a>,
<ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>; apply to <ahref="SkCanvas_Reference#text">text</a>. By default, draws
Draw <ahref="SkCanvas_Reference#text">text</a> on <ahref="SkPath_Reference#Path">Path</a><ahref="SkCanvas_Reference#path">path</a>, using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
Origin of <ahref="SkCanvas_Reference#text">text</a> is at beginning of <ahref="SkCanvas_Reference#path">path</a> offset by <ahref="SkCanvas_Reference#drawTextOnPath">matrix</a>, if provided, before it
is mapped to <ahref="SkCanvas_Reference#path">path</a>. If the <ahref="SkCanvas_Reference#path">path</a> section corresponding the glyph advance is
mapped to projected points parallel to the <ahref="SkCanvas_Reference#path">path</a>. If the <ahref="SkCanvas_Reference#text">text</a>'s advance is larger
than the <ahref="SkCanvas_Reference#path">path</a> length, the excess <ahref="SkCanvas_Reference#text">text</a> is clipped.
<ahref="SkCanvas_Reference#text">text</a>'s meaning depends on <ahref="SkPaint_Reference#Text_Encoding">Paint Text Encoding</a>; by default, <ahref="SkCanvas_Reference#text">text</a> encoding is
<ahref="undocumented#UTF_8">UTF-8</a>. Origin meaning depends on <ahref="SkPaint_Reference#Text_Align">Paint Text Align</a> and <ahref="SkPaint_Reference#Vertical_Text">Paint Vertical Text</a>; by
default <ahref="SkCanvas_Reference#text">text</a> positions the first glyph's left side bearing at origin x and its
baseline at origin y. <ahref="undocumented#Text">Text</a> size is affected by <ahref="SkCanvas_Reference#Matrix">Matrix</a> and <ahref="SkPaint_Reference#Text_Size">Paint Text Size</a>.
All elements of <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</a>, <ahref="undocumented#Rasterizer">Rasterizer</a>, <ahref="undocumented#Mask_Filter">Mask Filter</a>, <ahref="undocumented#Shader">Shader</a>,
<ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>; apply to <ahref="SkCanvas_Reference#text">text</a>. By default, draws
Draw <ahref="SkCanvas_Reference#text">text</a>, transforming each glyph by the corresponding <ahref="undocumented#SkRSXform">SkRSXform</a>,
using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
Optional <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#cullRect">cullRect</a> is a conservative bounds of <ahref="SkCanvas_Reference#text">text</a>, taking into account
<ahref="undocumented#RSXform">RSXform</a> and <ahref="SkCanvas_Reference#paint">paint</a>. If cullrect is outside of <ahref="SkCanvas_Reference#Clip">Clip</a>, canvas can skip drawing.
All elements of <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</a>, <ahref="undocumented#Rasterizer">Rasterizer</a>, <ahref="undocumented#Mask_Filter">Mask Filter</a>, <ahref="undocumented#Shader">Shader</a>,
<ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>; apply to <ahref="SkCanvas_Reference#text">text</a>. By default, draws
Draw <ahref="undocumented#Text_Blob">Text Blob</a><ahref="SkCanvas_Reference#blob">blob</a> at (<ahref="SkCanvas_Reference#x">x</a>, <ahref="SkCanvas_Reference#y">y</a>), using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
<ahref="SkCanvas_Reference#blob">blob</a> contains glyphs, their positions, and <ahref="SkCanvas_Reference#paint">paint</a> attributes specific to text:
<ahref="undocumented#Typeface">Typeface</a>, <ahref="SkPaint_Reference#Text_Size">Paint Text Size</a>, <ahref="SkPaint_Reference#Text_Scale_X">Paint Text Scale X</a>, <ahref="SkPaint_Reference#Text_Skew_X">Paint Text Skew X</a>,
<ahref="SkPaint_Reference#Text_Align">Paint Text Align</a>, <ahref="SkPaint_Reference#Hinting">Paint Hinting</a>, <ahref="SkPaint_Reference#Anti_alias">Anti-alias</a>, <ahref="SkPaint_Reference#Fake_Bold">Paint Fake Bold</a>,
Elements of <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</a>, <ahref="undocumented#Rasterizer">Rasterizer</a>, <ahref="undocumented#Mask_Filter">Mask Filter</a>, <ahref="undocumented#Shader">Shader</a>, <ahref="undocumented#Color_Filter">Color Filter</a>,
<ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>; apply to <ahref="SkCanvas_Reference#blob">blob</a>.
Draw <ahref="undocumented#Text_Blob">Text Blob</a><ahref="SkCanvas_Reference#blob">blob</a> at (<ahref="SkCanvas_Reference#x">x</a>, <ahref="SkCanvas_Reference#y">y</a>), using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
<ahref="SkCanvas_Reference#blob">blob</a> contains glyphs, their positions, and <ahref="SkCanvas_Reference#paint">paint</a> attributes specific to text:
<ahref="undocumented#Typeface">Typeface</a>, <ahref="SkPaint_Reference#Text_Size">Paint Text Size</a>, <ahref="SkPaint_Reference#Text_Scale_X">Paint Text Scale X</a>, <ahref="SkPaint_Reference#Text_Skew_X">Paint Text Skew X</a>,
<ahref="SkPaint_Reference#Text_Align">Paint Text Align</a>, <ahref="SkPaint_Reference#Hinting">Paint Hinting</a>, <ahref="SkPaint_Reference#Anti_alias">Anti-alias</a>, <ahref="SkPaint_Reference#Fake_Bold">Paint Fake Bold</a>,
Elements of <ahref="SkCanvas_Reference#paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</a>, <ahref="undocumented#Rasterizer">Rasterizer</a>, <ahref="undocumented#Mask_Filter">Mask Filter</a>, <ahref="undocumented#Shader">Shader</a>, <ahref="undocumented#Color_Filter">Color Filter</a>,
<ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>; apply to <ahref="SkCanvas_Reference#blob">blob</a>.
<div><fiddle-embedname="d313ad4726518f5d44f6433887bb7ce9"><div><ahref="SkPaint_Reference#Paint">Paint</a> attributes unrelated to text, like color, have no effect on <ahref="SkCanvas_Reference#paint">paint</a> in allocated <ahref="undocumented#Text_Blob">Text Blob</a>.
<ahref="SkPaint_Reference#Paint">Paint</a> attributes related to text, like text size, have no effect on <ahref="SkCanvas_Reference#paint">paint</a> passed to <ahref="SkCanvas_Reference#drawTextBlob">drawTextBlob</a>.</div></fiddle-embed></div>
Draw <ahref="undocumented#Picture">Picture</a><ahref="SkCanvas_Reference#picture">picture</a>, using <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a>.
<ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a> are unchanged by <ahref="SkCanvas_Reference#picture">picture</a> contents, as if
<ahref="SkCanvas_Reference#save">save</a> was called before and <ahref="SkCanvas_Reference#restore">restore</a> was called after <ahref="SkCanvas_Reference#drawPicture">drawPicture</a>.
Draw <ahref="undocumented#Picture">Picture</a><ahref="SkCanvas_Reference#picture">picture</a>, using <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a>.
<ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a> are unchanged by <ahref="SkCanvas_Reference#picture">picture</a> contents, as if
<ahref="SkCanvas_Reference#save">save</a> was called before and <ahref="SkCanvas_Reference#restore">restore</a> was called after <ahref="SkCanvas_Reference#drawPicture">drawPicture</a>.
Draw <ahref="undocumented#Picture">Picture</a><ahref="SkCanvas_Reference#picture">picture</a>, using <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a>; transforming <ahref="SkCanvas_Reference#picture">picture</a> with
<ahref="SkCanvas_Reference#Matrix">Matrix</a><ahref="SkCanvas_Reference#matrix">matrix</a>, if provided; and use <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a><ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Color_Filter">Color Filter</a>,
<ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Blend_Mode">Blend Mode</a>, if provided.
<ahref="SkCanvas_Reference#matrix">matrix</a> transformation is equivalent to: <ahref="SkCanvas_Reference#save">save</a>, <ahref="SkCanvas_Reference#concat">concat</a>, <ahref="SkCanvas_Reference#drawPicture">drawPicture</a>, <ahref="SkCanvas_Reference#restore">restore</a>.
<ahref="SkCanvas_Reference#paint">paint</a> use is equivalent to: <ahref="SkCanvas_Reference#saveLayer">saveLayer</a>, <ahref="SkCanvas_Reference#drawPicture">drawPicture</a>, <ahref="SkCanvas_Reference#restore">restore</a>.
Draw <ahref="undocumented#Picture">Picture</a><ahref="SkCanvas_Reference#picture">picture</a>, using <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a>; transforming <ahref="SkCanvas_Reference#picture">picture</a> with
<ahref="SkCanvas_Reference#Matrix">Matrix</a><ahref="SkCanvas_Reference#matrix">matrix</a>, if provided; and use <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a><ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Color_Filter">Color Filter</a>,
<ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Blend_Mode">Blend Mode</a>, if provided.
<ahref="SkCanvas_Reference#matrix">matrix</a> transformation is equivalent to: <ahref="SkCanvas_Reference#save">save</a>, <ahref="SkCanvas_Reference#concat">concat</a>, <ahref="SkCanvas_Reference#drawPicture">drawPicture</a>, <ahref="SkCanvas_Reference#restore">restore</a>.
<ahref="SkCanvas_Reference#paint">paint</a> use is equivalent to: <ahref="SkCanvas_Reference#saveLayer">saveLayer</a>, <ahref="SkCanvas_Reference#drawPicture">drawPicture</a>, <ahref="SkCanvas_Reference#restore">restore</a>.
Draw <ahref="undocumented#Vertices">Vertices</a><ahref="SkCanvas_Reference#vertices">vertices</a>, a triangle mesh, using <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a>.
If <ahref="undocumented#Texs">Vertices Texs</a> and <ahref="undocumented#Colors">Vertices Colors</a> are defined in <ahref="SkCanvas_Reference#vertices">vertices</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>
contains <ahref="undocumented#Shader">Shader</a>, <ahref="undocumented#Blend_Mode">Blend Mode</a><ahref="SkCanvas_Reference#mode">mode</a> combines <ahref="undocumented#Colors">Vertices Colors</a> with <ahref="undocumented#Shader">Shader</a>.
Draw <ahref="undocumented#Vertices">Vertices</a><ahref="SkCanvas_Reference#vertices">vertices</a>, a triangle mesh, using <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a>.
If <ahref="undocumented#Texs">Vertices Texs</a> and <ahref="undocumented#Colors">Vertices Colors</a> are defined in <ahref="SkCanvas_Reference#vertices">vertices</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>
contains <ahref="undocumented#Shader">Shader</a>, <ahref="undocumented#Blend_Mode">Blend Mode</a><ahref="SkCanvas_Reference#mode">mode</a> combines <ahref="undocumented#Colors">Vertices Colors</a> with <ahref="undocumented#Shader">Shader</a>.
The <ahref="undocumented#Coons">Coons</a> patch uses <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>'s <ahref="undocumented#Shader">Shader</a>, <ahref="undocumented#Color_Filter">Color Filter</a>,
<ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Blend_Mode">Blend Mode</a>. If <ahref="undocumented#Shader">Shader</a> is provided it is treated
as the <ahref="undocumented#Coons">Coons</a> patch texture; <ahref="undocumented#Blend_Mode">Blend Mode</a><ahref="SkCanvas_Reference#mode">mode</a> combines <ahref="undocumented#Color">Color</a><ahref="SkCanvas_Reference#colors">colors</a> and <ahref="undocumented#Shader">Shader</a> if
<ahref="undocumented#Point">Point</a> array <ahref="SkCanvas_Reference#cubics">cubics</a> specifies four <ahref="SkCanvas_Reference#cubics">cubics</a> starting at the top left corner,
If <ahref="SkCanvas_Reference#paint">paint</a> contains <ahref="undocumented#Shader">Shader</a>, <ahref="undocumented#Point">Point</a> array <ahref="SkCanvas_Reference#drawPatch">texCoords</a> maps <ahref="undocumented#Shader">Shader</a> as texture to
<ahref="undocumented#Blend_Mode">Blend Mode</a> for <ahref="SkCanvas_Reference#colors">colors</a>, and for <ahref="undocumented#Shader">Shader</a> if <ahref="SkCanvas_Reference#paint">paint</a> has one</td>
<ahref="undocumented#Shader">Shader</a>, <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Blend_Mode">Blend Mode</a>, used to draw</td>
The <ahref="undocumented#Coons">Coons</a> patch uses <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a>, <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>'s <ahref="undocumented#Shader">Shader</a>, <ahref="undocumented#Color_Filter">Color Filter</a>,
<ahref="undocumented#Alpha">Color Alpha</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, and <ahref="undocumented#Blend_Mode">Blend Mode</a>. If <ahref="undocumented#Shader">Shader</a> is provided it is treated
as the <ahref="undocumented#Coons">Coons</a> patch texture; <ahref="undocumented#Blend_Mode">Blend Mode</a> mode combines <ahref="undocumented#Color">Color</a><ahref="SkCanvas_Reference#colors">colors</a> and <ahref="undocumented#Shader">Shader</a> if
<ahref="undocumented#Point">Point</a> array <ahref="SkCanvas_Reference#cubics">cubics</a> specifies four <ahref="SkCanvas_Reference#cubics">cubics</a> starting at the top left corner,
If <ahref="SkCanvas_Reference#paint">paint</a> contains <ahref="undocumented#Shader">Shader</a>, <ahref="undocumented#Point">Point</a> array <ahref="SkCanvas_Reference#drawPatch_2">texCoords</a> maps <ahref="undocumented#Shader">Shader</a> as texture to
<ahref="undocumented#Shader">Shader</a>, <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Blend_Mode">Blend Mode</a>, used to draw</td>
Draw a set of sprites from <ahref="SkCanvas_Reference#atlas">atlas</a>, using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
to draw, if present. For each entry in the array, <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#tex">tex</a> locates sprite in
<ahref="SkCanvas_Reference#atlas">atlas</a>, and <ahref="undocumented#RSXform">RSXform</a><ahref="SkCanvas_Reference#xform">xform</a> transforms it into destination space.
<ahref="SkCanvas_Reference#xform">xform</a>, text, and <ahref="SkCanvas_Reference#colors">colors</a> if present, must contain <ahref="SkCanvas_Reference#count">count</a> entries.
Optional <ahref="SkCanvas_Reference#colors">colors</a> are applied for each sprite using <ahref="undocumented#Blend_Mode">Blend Mode</a>.
Optional <ahref="SkCanvas_Reference#cullRect">cullRect</a> is a conservative bounds of all transformed sprites.
If cullrect is outside of <ahref="SkCanvas_Reference#Clip">Clip</a>, canvas can skip drawing.
<ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, <ahref="undocumented#Blend_Mode">Blend Mode</a>, and so on; may be nullptr</td>
Draw a set of sprites from <ahref="SkCanvas_Reference#atlas">atlas</a>, using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
to draw, if present. For each entry in the array, <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#tex">tex</a> locates sprite in
<ahref="SkCanvas_Reference#atlas">atlas</a>, and <ahref="undocumented#RSXform">RSXform</a><ahref="SkCanvas_Reference#xform">xform</a> transforms it into destination space.
<ahref="SkCanvas_Reference#xform">xform</a>, text, and <ahref="SkCanvas_Reference#colors">colors</a> if present, must contain <ahref="SkCanvas_Reference#count">count</a> entries.
Optional <ahref="SkCanvas_Reference#colors">colors</a> is applied for each sprite using <ahref="undocumented#Blend_Mode">Blend Mode</a>.
Optional <ahref="SkCanvas_Reference#cullRect">cullRect</a> is a conservative bounds of all transformed sprites.
If cullrect is outside of <ahref="SkCanvas_Reference#Clip">Clip</a>, canvas can skip drawing.
<ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, <ahref="undocumented#Blend_Mode">Blend Mode</a>, and so on; may be nullptr</td>
Draw a set of sprites from <ahref="SkCanvas_Reference#atlas">atlas</a>, using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
to draw, if present. For each entry in the array, <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#tex">tex</a> locates sprite in
<ahref="SkCanvas_Reference#atlas">atlas</a>, and <ahref="undocumented#RSXform">RSXform</a><ahref="SkCanvas_Reference#xform">xform</a> transforms it into destination space.
<ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, <ahref="undocumented#Blend_Mode">Blend Mode</a>, and so on; may be nullptr</td>
Draw a set of sprites from <ahref="SkCanvas_Reference#atlas">atlas</a>, using <ahref="SkCanvas_Reference#Clip">Clip</a>, <ahref="SkCanvas_Reference#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="SkCanvas_Reference#paint">paint</a>.
to draw, if present. For each entry in the array, <ahref="undocumented#Rect">Rect</a><ahref="SkCanvas_Reference#tex">tex</a> locates sprite in
<ahref="SkCanvas_Reference#atlas">atlas</a>, and <ahref="undocumented#RSXform">RSXform</a><ahref="SkCanvas_Reference#xform">xform</a> transforms it into destination space.
<ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="undocumented#Image_Filter">Image Filter</a>, <ahref="undocumented#Blend_Mode">Blend Mode</a>, and so on; may be nullptr</td>
Draw <ahref="undocumented#Drawable">Drawable</a><ahref="SkCanvas_Reference#drawable">drawable</a> using <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a>, concatenated with
Draw <ahref="undocumented#Drawable">Drawable</a><ahref="SkCanvas_Reference#drawable">drawable</a> using <ahref="SkCanvas_Reference#Clip">Clip</a> and <ahref="SkCanvas_Reference#Matrix">Matrix</a>, offset by (<ahref="SkCanvas_Reference#x">x</a>, <ahref="SkCanvas_Reference#y">y</a>).
Associate <ahref="undocumented#Rect">Rect</a> on <ahref="SkCanvas_Reference#Canvas">Canvas</a> when an annotation; a key-value pair, where the <ahref="SkCanvas_Reference#key">key</a> is
a null-terminated utf8 string, and optional <ahref="SkCanvas_Reference#value">value</a> is stored as <ahref="undocumented#Data">Data</a>.
Associate <ahref="undocumented#Rect">Rect</a> on <ahref="SkCanvas_Reference#Canvas">Canvas</a> when an annotation; a key-value pair, where the <ahref="SkCanvas_Reference#key">key</a> is
a null-terminated utf8 string, and optional <ahref="SkCanvas_Reference#value">value</a> is stored as <ahref="undocumented#Data">Data</a>.