<ahref="#Canvas">Canvas</a> and <ahref="SkPaint_Reference#Paint">Paint</a> together provide the state to draw into <ahref="SkSurface_Reference#Surface">Surface</a> or <ahref="undocumented#Device">Device</a>.
Each <ahref="#Canvas">Canvas</a> draw call transforms the geometry of the object by the concatenation of all
<ahref="#Matrix">Matrix</a> values in the stack. The transformed geometry is clipped by the intersection
of all of <ahref="#Clip">Clip</a> values in the stack. The <ahref="#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="#Canvas">Canvas</a> from <ahref="SkSurface_Reference#Surface">Surface</a> to obtain the interface to draw.
<ahref="#Canvas">Canvas</a> generated by <ahref="undocumented#Raster_Surface">Raster Surface</a> draws to memory visible to the CPU.
<ahref="#Canvas">Canvas</a> generated by <ahref="undocumented#GPU_Surface">GPU Surface</a> uses Vulkan or OpenGL to draw to the GPU.
To draw to a document, obtain <ahref="#Canvas">Canvas</a> from <ahref="#Canvas">SVG Canvas</a>, <ahref="#PDF">Document PDF</a>, or <ahref="#Recorder">Picture Recorder</a>.
<ahref="undocumented#Document">Document</a> based <ahref="#Canvas">Canvas</a> and other <ahref="#Canvas">Canvas</a> Subclasses reference <ahref="undocumented#Device">Device</a> describing the
<ahref="#Canvas">Canvas</a> can be constructed to draw to <ahref="SkBitmap_Reference#Bitmap">Bitmap</a> without first creating <ahref="undocumented#Raster_Surface">Raster Surface</a>.
| <ahref="#SkCanvas_Lattice">Lattice</a> | divides <ahref="SkBitmap_Reference#Bitmap">Bitmap</a> or <ahref="SkImage_Reference#Image">Image</a> into a rectangular grid |
| <ahref="#SkCanvas_SaveLayerRec">SaveLayerRec</a> | contains the state used to create the <ahref="#Layer">Layer</a> |
when no <ahref="SkSurface_Reference#Surface">Surface</a> is required, and some helpers implicitly create <ahref="undocumented#Raster_Surface">Raster Surface</a>.
| <ahref="#SkCanvas_MakeRasterDirect">MakeRasterDirect</a> | creates from <ahref="SkImageInfo_Reference#SkImageInfo">SkImageInfo</a> and <ahref="#Storage">Pixel Storage</a> |
| <ahref="#SkCanvas_MakeRasterDirect">MakeRasterDirect</a> | creates from <ahref="SkImageInfo_Reference#SkImageInfo">SkImageInfo</a> and <ahref="#Storage">Pixel Storage</a> |
| <ahref="#SkCanvas_MakeRasterDirectN32">MakeRasterDirectN32</a> | creates from image data and <ahref="#Storage">Pixel Storage</a> |
| <ahref="#SkCanvas_clear">clear</a> | fills <ahref="#Clip">Clip</a> with <ahref="undocumented#Color">Color</a> |
| <ahref="#SkCanvas_clipPath">clipPath</a> | combines <ahref="#Clip">Clip</a> with <ahref="SkPath_Reference#Path">Path</a> |
| <ahref="#SkCanvas_clipRRect">clipRRect</a> | combines <ahref="#Clip">Clip</a> with <ahref="undocumented#Round_Rect">Round Rect</a> |
| <ahref="#SkCanvas_clipRect">clipRect</a> | combines <ahref="#Clip">Clip</a> with <ahref="SkRect_Reference#Rect">Rect</a> |
| <ahref="#SkCanvas_clipRegion">clipRegion</a> | combines <ahref="#Clip">Clip</a> with <ahref="undocumented#Region">Region</a> |
| <ahref="#SkCanvas_concat">concat</a> | multiplies <ahref="#Matrix">Matrix</a> by <ahref="#Matrix">Matrix</a> |
| <ahref="#SkCanvas_discard">discard</a> | makes <ahref="#Canvas">Canvas</a> contents undefined |
| <ahref="#SkCanvas_drawAnnotation">drawAnnotation</a> | associates a <ahref="SkRect_Reference#Rect">Rect</a> with a key-value pair |
| <ahref="#SkCanvas_drawArc">drawArc</a> | draws <ahref="undocumented#Arc">Arc</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawAtlas">drawAtlas</a> | draws sprites using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawBitmap">drawBitmap</a> | draws <ahref="SkBitmap_Reference#Bitmap">Bitmap</a> at (x, y) position |
| <ahref="#SkCanvas_drawBitmapLattice">drawBitmapLattice</a> | draws proportionally stretched <ahref="SkBitmap_Reference#Bitmap">Bitmap</a> |
| <ahref="#SkCanvas_drawBitmapNine">drawBitmapNine</a> | draws <ahref="undocumented#Nine_Patch">Nine Patch</a><ahref="SkBitmap_Reference#Bitmap">Bitmap</a> |
| <ahref="#SkCanvas_drawBitmapRect">drawBitmapRect</a> | draws <ahref="SkBitmap_Reference#Bitmap">Bitmap</a>, source <ahref="SkRect_Reference#Rect">Rect</a> to destination <ahref="SkRect_Reference#Rect">Rect</a> |
| <ahref="#SkCanvas_drawCircle">drawCircle</a> | draws <ahref="undocumented#Circle">Circle</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawColor">drawColor</a> | fills <ahref="#Clip">Clip</a> with <ahref="undocumented#Color">Color</a> and <ahref="undocumented#Blend_Mode">Blend Mode</a> |
| <ahref="#SkCanvas_drawDRRect">drawDRRect</a> | draws double <ahref="undocumented#Round_Rect">Round Rect</a> stroked or filled |
| <ahref="#SkCanvas_drawDrawable">drawDrawable</a> | draws <ahref="undocumented#Drawable">Drawable</a>, encapsulated drawing commands |
| <ahref="#SkCanvas_drawIRect">drawIRect</a> | draws <ahref="SkIRect_Reference#IRect">IRect</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawImage">drawImage</a> | draws <ahref="SkImage_Reference#Image">Image</a> at (x, y) position |
| <ahref="#SkCanvas_drawImageLattice">drawImageLattice</a> | draws proportionally stretched <ahref="SkImage_Reference#Image">Image</a> |
| <ahref="#SkCanvas_drawImageNine">drawImageNine</a> | draws <ahref="undocumented#Nine_Patch">Nine Patch</a><ahref="SkImage_Reference#Image">Image</a> |
| <ahref="#SkCanvas_drawImageRect">drawImageRect</a> | draws <ahref="SkImage_Reference#Image">Image</a>, source <ahref="SkRect_Reference#Rect">Rect</a> to destination <ahref="SkRect_Reference#Rect">Rect</a> |
| <ahref="#SkCanvas_drawLine">drawLine</a> | draws line segment between two points |
| <ahref="#SkCanvas_drawOval">drawOval</a> | draws <ahref="undocumented#Oval">Oval</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawPaint">drawPaint</a> | fills <ahref="#Clip">Clip</a> with <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawPatch">drawPatch</a> | draws Coons_Patch |
| <ahref="#SkCanvas_drawPath">drawPath</a> | draws <ahref="SkPath_Reference#Path">Path</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawPicture">drawPicture</a> | draws <ahref="undocumented#Picture">Picture</a> using <ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a> |
| <ahref="#SkCanvas_drawPoint">drawPoint</a> | draws point at (x, y) position |
| <ahref="#SkCanvas_drawPoints">drawPoints</a> | draws array as points, lines, polygon |
| <ahref="#SkCanvas_drawPosText">drawPosText</a> | draws text at array of (x, y) positions |
| <ahref="#SkCanvas_drawPosTextH">drawPosTextH</a> | draws text at x positions with common baseline |
| <ahref="#SkCanvas_drawRRect">drawRRect</a> | draws <ahref="undocumented#Round_Rect">Round Rect</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawRect">drawRect</a> | draws <ahref="SkRect_Reference#Rect">Rect</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawRegion">drawRegion</a> | draws <ahref="undocumented#Region">Region</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawRoundRect">drawRoundRect</a> | draws <ahref="undocumented#Round_Rect">Round Rect</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawString">drawString</a> | draws null terminated string at (x, y) using font advance |
| <ahref="#SkCanvas_drawText">drawText</a> | draws text at (x, y), using font advance |
| <ahref="#SkCanvas_drawTextBlob">drawTextBlob</a> | draws text with arrays of positions and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawTextOnPath">drawTextOnPath</a> | draws text following <ahref="SkPath_Reference#Path">Path</a> contour |
| <ahref="#SkCanvas_drawTextOnPathHV">drawTextOnPathHV</a> | draws text following <ahref="SkPath_Reference#Path">Path</a> with offsets |
| <ahref="#SkCanvas_drawTextRSXform">drawTextRSXform</a> | draws text with array of <ahref="undocumented#RSXform">RSXform</a> |
| <ahref="#SkCanvas_drawVertices">drawVertices</a> | draws <ahref="undocumented#Vertices">Vertices</a>, a triangle mesh |
| <ahref="#SkCanvas_flush">flush</a> | triggers execution of all pending draw operations |
| <ahref="#SkCanvas_getBaseLayerSize">getBaseLayerSize</a> | returns size of base <ahref="#Layer">Layer</a> in global coordinates |
| <ahref="#SkCanvas_getDeviceClipBounds">getDeviceClipBounds</a> | returns <ahref="SkIRect_Reference#IRect">IRect</a> bounds of <ahref="#Clip">Clip</a> |
| <ahref="#SkCanvas_getGrContext">getGrContext</a> | returns <ahref="undocumented#GPU_Context">GPU Context</a> of the <ahref="undocumented#GPU_Surface">GPU Surface</a> |
| <ahref="#SkCanvas_getLocalClipBounds">getLocalClipBounds</a> | returns <ahref="#Clip">Clip</a> bounds in source coordinates |
| <ahref="#SkCanvas_getMetaData">getMetaData</a> | associates additional data with the canvas |
| <ahref="#SkCanvas_getProps">getProps</a> | copies <ahref="undocumented#Surface_Properties">Surface Properties</a> if available |
| <ahref="#SkCanvas_getSaveCount">getSaveCount</a> | returns depth of stack containing <ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a> |
| <ahref="#SkCanvas_save">save</a> | saves <ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a> on stack |
| <ahref="#SkCanvas_saveLayer">saveLayer</a> | saves <ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a> on stack; creates <ahref="#Layer">Layer</a> |
| <ahref="#SkCanvas_saveLayerAlpha">saveLayerAlpha</a> | saves <ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a> on stack; creates <ahref="#Layer">Layer</a>; sets opacity |
| <ahref="#SkCanvas_saveLayerPreserveLCDTextRequests">saveLayerPreserveLCDTextRequests</a> | saves <ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a> on stack; creates <ahref="#Layer">Layer</a> for LCD text |
<ahref="#SkCanvas_MakeRasterDirect_rowBytes">rowBytes</a> is zero or large enough to contain <ahref="#SkCanvas_MakeRasterDirect_info">info</a> width <ahref="#SkCanvas_MakeRasterDirect_pixels">pixels</a> of <ahref="SkImageInfo_Reference#Color_Type">Color Type</a>.
Pass zero for <ahref="#SkCanvas_MakeRasterDirect_rowBytes">rowBytes</a> to compute <ahref="#SkCanvas_MakeRasterDirect_rowBytes">rowBytes</a> from <ahref="#SkCanvas_MakeRasterDirect_info">info</a> width and size of pixel.
<ahref="undocumented#Pixel">Pixel</a> buffer size should be <ahref="#SkCanvas_MakeRasterDirect_info">info</a> height times computed <ahref="#SkCanvas_MakeRasterDirect_rowBytes">rowBytes</a>.
To access <ahref="#SkCanvas_MakeRasterDirect_pixels">pixels</a> after drawing, call <ahref="#SkCanvas_flush">flush</a> or <ahref="#SkCanvas_peekPixels">peekPixels</a>.
To access <ahref="#SkCanvas_MakeRasterDirectN32_pixels">pixels</a> after drawing, call <ahref="#SkCanvas_flush">flush</a> or <ahref="#SkCanvas_peekPixels">peekPixels</a>.
<ahref="#SkCanvas_MakeRasterDirectN32_rowBytes">rowBytes</a> is zero or large enough to contain <ahref="#SkCanvas_MakeRasterDirectN32_width">width</a><ahref="#SkCanvas_MakeRasterDirectN32_pixels">pixels</a> of <ahref="SkImageInfo_Reference#SkColorType">kN32 SkColorType</a>.
Pass zero for <ahref="#SkCanvas_MakeRasterDirectN32_rowBytes">rowBytes</a> to compute <ahref="#SkCanvas_MakeRasterDirectN32_rowBytes">rowBytes</a> from <ahref="#SkCanvas_MakeRasterDirectN32_width">width</a> and size of pixel.
<ahref="undocumented#Pixel">Pixel</a> buffer size should be <ahref="#SkCanvas_MakeRasterDirectN32_height">height</a> times <ahref="#SkCanvas_MakeRasterDirectN32_rowBytes">rowBytes</a>.
pointer to destination <ahref="#SkCanvas_MakeRasterDirectN32_pixels">pixels</a> buffer; buffer size should be <ahref="#SkCanvas_MakeRasterDirectN32_height">height</a>
times <ahref="#SkCanvas_MakeRasterDirectN32_rowBytes">rowBytes</a></td>
If <ahref="#SkCanvas_int_int_const_SkSurfaceProps_star_props">props</a> equals nullptr, <ahref="undocumented#Surface_Properties">Surface Properties</a> are created with
<ahref="SkBitmap_Reference#Bitmap">Bitmap</a> is copied so that subsequently editing <ahref="#SkCanvas_copy_const_SkBitmap_bitmap">bitmap</a> will not affect
<td><aname="SkCanvas_ColorBehavior_kLegacy"><code><strong>SkCanvas::ColorBehavior::kLegacy </strong></code></a></td><td>0</td><td>Is a placeholder to allow specialized constructor; has no meaning.</td>
<ahref="#SkCanvas_const_SkBitmap_const_SkSurfaceProps_bitmap">bitmap</a> is copied so that subsequently editing <ahref="#SkCanvas_const_SkBitmap_const_SkSurfaceProps_bitmap">bitmap</a> will not affect
<div><fiddle-embedname="b7bc91ff16c9b9351b2a127f35394b82"><div><ahref="#Canvas">Canvas</a><ahref="#Layer">Layer</a> draws into bitmap. <ahref="#SkCanvas_saveLayerAlpha">saveLayerAlpha</a> sets up an additional
drawing surface that blends with the bitmap. When <ahref="#Layer">Layer</a> goes out of
Returns <ahref="SkImageInfo_Reference#Image_Info">Image Info</a> for <ahref="#Canvas">Canvas</a>. If <ahref="#Canvas">Canvas</a> is not associated with <ahref="undocumented#Raster_Surface">Raster Surface</a> or
<ahref="undocumented#GPU_Surface">GPU Surface</a>, returned <ahref="SkImageInfo_Reference#Color_Type">Color Type</a> is set to <ahref="SkImageInfo_Reference#SkColorType">kUnknown SkColorType</a>.
Creates <ahref="SkSurface_Reference#Surface">Surface</a> matching <ahref="#SkCanvas_makeSurface_info">info</a> and <ahref="#SkCanvas_makeSurface_props">props</a>, and associates it with <ahref="#Canvas">Canvas</a>.
If <ahref="#SkCanvas_makeSurface_props">props</a> is nullptr, matches <ahref="undocumented#Surface_Properties">Surface Properties</a> in <ahref="#Canvas">Canvas</a>. If <ahref="#SkCanvas_makeSurface_props">props</a> is nullptr and <ahref="#Canvas">Canvas</a>
does not have <ahref="undocumented#Surface_Properties">Surface Properties</a>, creates <ahref="SkSurface_Reference#Surface">Surface</a> with default <ahref="undocumented#Surface_Properties">Surface Properties</a>.
<ahref="SkSurface_Reference#Surface">Surface</a> matching <ahref="#SkCanvas_makeSurface_info">info</a> and <ahref="#SkCanvas_makeSurface_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="#Canvas">Canvas</a>.
Returns the pixel base address, <ahref="SkImageInfo_Reference#Image_Info">Image Info</a>, <ahref="#SkCanvas_accessTopLayerPixels_rowBytes">rowBytes</a>, and <ahref="#SkCanvas_accessTopLayerPixels_origin">origin</a> if the pixels
while <ahref="#Canvas">Canvas</a> is in scope and unchanged. Any <ahref="#Canvas">Canvas</a> call or <ahref="SkSurface_Reference#Surface">Surface</a> call
If pixels are inaccessible, <ahref="#SkCanvas_accessTopLayerPixels_info">info</a>, <ahref="#SkCanvas_accessTopLayerPixels_rowBytes">rowBytes</a>, and <ahref="#SkCanvas_accessTopLayerPixels_origin">origin</a> are unchanged.
<ahref="#Pixels">Pixels</a> are readable when <ahref="undocumented#Device">Device</a> is raster. <ahref="#Pixels">Pixels</a> are not readable when <ahref="#Canvas">Canvas</a>
<ahref="#Canvas">Canvas</a> or <ahref="SkSurface_Reference#Surface">Surface</a> call may invalidate the <ahref="#SkCanvas_peekPixels_pixmap">pixmap</a> values.
Copies <ahref="SkRect_Reference#Rect">Rect</a> of pixels from <ahref="#Canvas">Canvas</a> into <ahref="#SkCanvas_readPixels_dstPixels">dstPixels</a>. <ahref="#Matrix">Matrix</a> and <ahref="#Clip">Clip</a> are
Source <ahref="SkRect_Reference#Rect">Rect</a> corners are (<ahref="#SkCanvas_readPixels_srcX">srcX</a>, <ahref="#SkCanvas_readPixels_srcY">srcY</a>) and (<ahref="#SkCanvas_imageInfo">imageInfo</a>.width(), <ahref="#SkCanvas_imageInfo">imageInfo</a>.height()).
Destination <ahref="SkRect_Reference#Rect">Rect</a> corners are (0, 0) and (<ahref="#SkCanvas_readPixels_dstInfo">dstInfo</a>.width(), <ahref="#SkCanvas_readPixels_dstInfo">dstInfo</a>.height()).
converting to <ahref="#SkCanvas_readPixels_dstInfo">dstInfo</a>.colorType() and <ahref="#SkCanvas_readPixels_dstInfo">dstInfo</a>.alphaType() if required.
<ahref="#Pixels">Pixels</a> are readable when <ahref="undocumented#Device">Device</a> is raster, or backed by a GPU.
<ahref="#Pixels">Pixels</a> are not readable when <ahref="#SkCanvas">SkCanvas</a> is returned by <ahref="#SkDocument_beginPage">SkDocument::beginPage</a>,
<ahref="undocumented#Pixel">Pixel</a> values are converted only if <ahref="SkImageInfo_Reference#Color_Type">Color Type</a> and <ahref="SkImageInfo_Reference#Alpha_Type">Alpha Type</a>
Pass negative values for <ahref="#SkCanvas_readPixels_srcX">srcX</a> or <ahref="#SkCanvas_readPixels_srcY">srcY</a> to offset pixels across or down destination.
<td><ahref="#Canvas">Canvas</a> pixels could not be converted to <ahref="#SkCanvas_readPixels_dstInfo">dstInfo</a>.colorType() or <ahref="#SkCanvas_readPixels_dstInfo">dstInfo</a>.alphaType().</td></tr><tr>
<td><ahref="#Canvas">Canvas</a> pixels are not readable; for instance, <ahref="#Canvas">Canvas</a> is document-based.</td></tr><tr>
<td><ahref="#SkCanvas_readPixels_dstRowBytes">dstRowBytes</a> is too small to contain one row of pixels.</td></tr>
width, height, <ahref="SkImageInfo_Reference#Color_Type">Color Type</a>, and <ahref="SkImageInfo_Reference#Alpha_Type">Alpha Type</a> of <ahref="#SkCanvas_readPixels_dstPixels">dstPixels</a></td>
storage for pixels; <ahref="#SkCanvas_readPixels_dstInfo">dstInfo</a>.height() times <ahref="#SkCanvas_readPixels_dstRowBytes">dstRowBytes</a>, or larger</td>
<div><fiddle-embedname="481e990e923a0ed34654f4361b94f096"><div><ahref="#Canvas">Canvas</a> returned by <ahref="undocumented#Raster_Surface">Raster Surface</a> has <ahref="#Premultiply">Premultiplied</a> pixel values.
<ahref="#SkCanvas_clear">clear</a> takes <ahref="#Unpremultiply">Unpremultiplied</a> input with <ahref="#Alpha">Color Alpha</a> equal 0x80
and <ahref="#RGB">Color RGB</a> equal 0x55, 0xAA, 0xFF. <ahref="#RGB">Color RGB</a> is multiplied by <ahref="#Alpha">Color Alpha</a>
to generate <ahref="#Premultiply">Premultiplied</a> value 0x802B5580. <ahref="#SkCanvas_readPixels">readPixels</a> converts pixel back
to <ahref="#Unpremultiply">Unpremultiplied</a> value 0x8056A9FF, introducing error.</div>
Copies <ahref="SkRect_Reference#Rect">Rect</a> of pixels from <ahref="#Canvas">Canvas</a> into <ahref="#SkCanvas_readPixels_2_pixmap">pixmap</a>. <ahref="#Matrix">Matrix</a> and <ahref="#Clip">Clip</a> are
Source <ahref="SkRect_Reference#Rect">Rect</a> corners are (<ahref="#SkCanvas_readPixels_2_srcX">srcX</a>, <ahref="#SkCanvas_readPixels_2_srcY">srcY</a>) and (<ahref="#SkCanvas_imageInfo">imageInfo</a>.width(), <ahref="#SkCanvas_imageInfo">imageInfo</a>.height()).
Destination <ahref="SkRect_Reference#Rect">Rect</a> corners are (0, 0) and (<ahref="#SkCanvas_readPixels_2_pixmap">pixmap</a>.width(), <ahref="#SkCanvas_readPixels_2_pixmap">pixmap</a>.height()).
converting to <ahref="#SkCanvas_readPixels_2_pixmap">pixmap</a>.colorType() and <ahref="#SkCanvas_readPixels_2_pixmap">pixmap</a>.alphaType() if required.
<ahref="#Pixels">Pixels</a> are readable when <ahref="undocumented#Device">Device</a> is raster, or backed by a GPU.
<ahref="#Pixels">Pixels</a> are not readable when <ahref="#SkCanvas">SkCanvas</a> is returned by <ahref="#SkDocument_beginPage">SkDocument::beginPage</a>,
<ahref="undocumented#Pixel">Pixel</a> values are converted only if <ahref="SkImageInfo_Reference#Color_Type">Color Type</a> and <ahref="SkImageInfo_Reference#Alpha_Type">Alpha Type</a>
do not match. Only pixels within both source and destination <ahref="#Rect">Rects</a>
are copied. <ahref="#SkCanvas_readPixels_2_pixmap">pixmap</a> pixels contents outside <ahref="SkRect_Reference#Rect">Rect</a> intersection are unchanged.
Pass negative values for <ahref="#SkCanvas_readPixels_2_srcX">srcX</a> or <ahref="#SkCanvas_readPixels_2_srcY">srcY</a> to offset pixels across or down <ahref="#SkCanvas_readPixels_2_pixmap">pixmap</a>.
<td><ahref="#Canvas">Canvas</a> pixels could not be converted to <ahref="#SkCanvas_readPixels_2_pixmap">pixmap</a>.colorType() or <ahref="#SkCanvas_readPixels_2_pixmap">pixmap</a>.alphaType().</td></tr><tr>
<td><ahref="#Canvas">Canvas</a> pixels are not readable; for instance, <ahref="#Canvas">Canvas</a> is document-based.</td></tr><tr>
Copies <ahref="SkRect_Reference#Rect">Rect</a> of pixels from <ahref="#Canvas">Canvas</a> into <ahref="#SkCanvas_readPixels_3_bitmap">bitmap</a>. <ahref="#Matrix">Matrix</a> and <ahref="#Clip">Clip</a> are
Source <ahref="SkRect_Reference#Rect">Rect</a> corners are (<ahref="#SkCanvas_readPixels_3_srcX">srcX</a>, <ahref="#SkCanvas_readPixels_3_srcY">srcY</a>) and (<ahref="#SkCanvas_imageInfo">imageInfo</a>.width(), <ahref="#SkCanvas_imageInfo">imageInfo</a>.height()).
Destination <ahref="SkRect_Reference#Rect">Rect</a> corners are (0, 0) and (<ahref="#SkCanvas_readPixels_3_bitmap">bitmap</a>.width(), <ahref="#SkCanvas_readPixels_3_bitmap">bitmap</a>.height()).
converting to <ahref="#SkCanvas_readPixels_3_bitmap">bitmap</a>.colorType() and <ahref="#SkCanvas_readPixels_3_bitmap">bitmap</a>.alphaType() if required.
<ahref="#Pixels">Pixels</a> are readable when <ahref="undocumented#Device">Device</a> is raster, or backed by a GPU.
<ahref="#Pixels">Pixels</a> are not readable when <ahref="#SkCanvas">SkCanvas</a> is returned by <ahref="#SkDocument_beginPage">SkDocument::beginPage</a>,
<ahref="SkBitmap_Reference#Bitmap">Bitmap</a> values are converted only if <ahref="SkImageInfo_Reference#Color_Type">Color Type</a> and <ahref="SkImageInfo_Reference#Alpha_Type">Alpha Type</a>
Pass negative values for <ahref="#SkCanvas_readPixels_3_srcX">srcX</a> or <ahref="#SkCanvas_readPixels_3_srcY">srcY</a> to offset pixels across or down <ahref="#SkCanvas_readPixels_3_bitmap">bitmap</a>.
<td><ahref="#Canvas">Canvas</a> pixels could not be converted to <ahref="#SkCanvas_readPixels_3_bitmap">bitmap</a>.colorType() or <ahref="#SkCanvas_readPixels_3_bitmap">bitmap</a>.alphaType().</td></tr><tr>
<td><ahref="#Canvas">Canvas</a> pixels are not readable; for instance, <ahref="#Canvas">Canvas</a> is document-based.</td></tr><tr>
<td><ahref="#SkCanvas_readPixels_3_bitmap">bitmap</a> pixels could not be allocated.</td></tr><tr>
<td><ahref="#SkCanvas_readPixels_3_bitmap">bitmap</a>.rowBytes() is too small to contain one row of pixels.</td></tr>
Copies <ahref="SkRect_Reference#Rect">Rect</a> from <ahref="#SkCanvas_writePixels_pixels">pixels</a> to <ahref="#Canvas">Canvas</a>. <ahref="#Matrix">Matrix</a> and <ahref="#Clip">Clip</a> are ignored.
Source <ahref="SkRect_Reference#Rect">Rect</a> corners are (0, 0) and (<ahref="#SkCanvas_writePixels_info">info</a>.width(), <ahref="#SkCanvas_writePixels_info">info</a>.height()).
Destination <ahref="SkRect_Reference#Rect">Rect</a> corners are (<ahref="#SkCanvas_writePixels_x">x</a>, <ahref="#SkCanvas_writePixels_y">y</a>) and
<ahref="#Pixels">Pixels</a> are writable when <ahref="undocumented#Device">Device</a> is raster, or backed by a GPU.
<ahref="#Pixels">Pixels</a> are not writable when <ahref="#SkCanvas">SkCanvas</a> is returned by <ahref="#SkDocument_beginPage">SkDocument::beginPage</a>,
<ahref="undocumented#Pixel">Pixel</a> values are converted only if <ahref="SkImageInfo_Reference#Color_Type">Color Type</a> and <ahref="SkImageInfo_Reference#Alpha_Type">Alpha Type</a>
are copied. <ahref="#Canvas">Canvas</a><ahref="#SkCanvas_writePixels_pixels">pixels</a> outside <ahref="SkRect_Reference#Rect">Rect</a> intersection are unchanged.
Pass negative values for <ahref="#SkCanvas_writePixels_x">x</a> or <ahref="#SkCanvas_writePixels_y">y</a> to offset <ahref="#SkCanvas_writePixels_pixels">pixels</a> to the left or
<td><ahref="#SkCanvas_writePixels_pixels">pixels</a> could not be converted to <ahref="#Canvas">Canvas</a><ahref="#SkCanvas_imageInfo">imageInfo</a>.colorType() or
<td><ahref="#Canvas">Canvas</a><ahref="#SkCanvas_writePixels_pixels">pixels</a> are not writable; for instance, <ahref="#Canvas">Canvas</a> is document-based.</td></tr><tr>
<td><ahref="#SkCanvas_writePixels_rowBytes">rowBytes</a> is too small to contain one row of <ahref="#SkCanvas_writePixels_pixels">pixels</a>.</td></tr>
width, height, <ahref="SkImageInfo_Reference#Color_Type">Color Type</a>, and <ahref="SkImageInfo_Reference#Alpha_Type">Alpha Type</a> of <ahref="#SkCanvas_writePixels_pixels">pixels</a></td>
<ahref="#SkCanvas_writePixels_pixels">pixels</a> to copy, of size <ahref="#SkCanvas_writePixels_info">info</a>.height() times <ahref="#SkCanvas_writePixels_rowBytes">rowBytes</a>, or larger</td>
size of one row of <ahref="#SkCanvas_writePixels_pixels">pixels</a>; <ahref="#SkCanvas_writePixels_info">info</a>.width() times pixel size, or larger</td>
offset into <ahref="#Canvas">Canvas</a> writable <ahref="#SkCanvas_writePixels_pixels">pixels</a> in <ahref="#SkCanvas_writePixels_x">x</a>; may be negative</td>
offset into <ahref="#Canvas">Canvas</a> writable <ahref="#SkCanvas_writePixels_pixels">pixels</a> in <ahref="#SkCanvas_writePixels_y">y</a>; may be negative</td>
Copies <ahref="SkRect_Reference#Rect">Rect</a> from pixels to <ahref="#Canvas">Canvas</a>. <ahref="#Matrix">Matrix</a> and <ahref="#Clip">Clip</a> are ignored.
Source <ahref="SkRect_Reference#Rect">Rect</a> corners are (0, 0) and (<ahref="#SkCanvas_writePixels_2_bitmap">bitmap</a>.width(), <ahref="#SkCanvas_writePixels_2_bitmap">bitmap</a>.height()).
Destination <ahref="SkRect_Reference#Rect">Rect</a> corners are (<ahref="#SkCanvas_writePixels_2_x">x</a>, <ahref="#SkCanvas_writePixels_2_y">y</a>) and
<ahref="#Pixels">Pixels</a> are writable when <ahref="undocumented#Device">Device</a> is raster, or backed by a GPU.
<ahref="#Pixels">Pixels</a> are not writable when <ahref="#SkCanvas">SkCanvas</a> is returned by <ahref="#SkDocument_beginPage">SkDocument::beginPage</a>,
<ahref="undocumented#Pixel">Pixel</a> values are converted only if <ahref="SkImageInfo_Reference#Color_Type">Color Type</a> and <ahref="SkImageInfo_Reference#Alpha_Type">Alpha Type</a>
<td><ahref="#SkCanvas_writePixels_2_bitmap">bitmap</a> pixels could not be converted to <ahref="#Canvas">Canvas</a><ahref="#SkCanvas_imageInfo">imageInfo</a>.colorType() or
<td><ahref="#SkCanvas_writePixels_2_bitmap">bitmap</a> pixels are inaccessible; for instance, <ahref="#SkCanvas_writePixels_2_bitmap">bitmap</a> wraps a texture.</td></tr>
<ahref="#Canvas">Canvas</a> savable state consists of <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>.
<ahref="#Clip">Clip</a> describes the area that may be drawn to.
<ahref="#Matrix">Matrix</a> transforms the geometry.
<ahref="#SkCanvas_save">save</a>, <ahref="#SkCanvas_saveLayer">saveLayer</a>, <ahref="#SkCanvas_saveLayerPreserveLCDTextRequests">saveLayerPreserveLCDTextRequests</a>, and <ahref="#SkCanvas_saveLayerAlpha">saveLayerAlpha</a>
<div><fiddle-embedname="9f563a2d60aa31d4b26742e5aa17aa4e"><div>While <ahref="#SkCanvas_clipRect">clipRect</a> is given the same rectangle twice, <ahref="#Matrix">Matrix</a> makes the second
<ahref="#SkCanvas_clipRect">clipRect</a> draw at half the size of the first.</div></fiddle-embed></div>
Saves <ahref="#Matrix">Matrix</a>, <ahref="#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_restore">restore</a> discards changes to <ahref="#Matrix">Matrix</a>, <ahref="#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>,
restoring the <ahref="#Matrix">Matrix</a>, <ahref="#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a> to their state when <ahref="#SkCanvas_save">save</a> was called.
<ahref="#Matrix">Matrix</a> may be changed by <ahref="#SkCanvas_translate">translate</a>, <ahref="#SkCanvas_scale">scale</a>, <ahref="#SkCanvas_rotate">rotate</a>, <ahref="#SkCanvas_skew">skew</a>, <ahref="#SkCanvas_concat">concat</a>, <ahref="#SkCanvas_setMatrix">setMatrix</a>,
and <ahref="#SkCanvas_resetMatrix">resetMatrix</a>. <ahref="#Clip">Clip</a> may be changed by <ahref="#SkCanvas_clipRect">clipRect</a>, <ahref="#SkCanvas_clipRRect">clipRRect</a>, <ahref="#SkCanvas_clipPath">clipPath</a>, <ahref="#SkCanvas_clipRegion">clipRegion</a>.
Removes changes to <ahref="#Matrix">Matrix</a>, <ahref="#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a> since <ahref="#Canvas">Canvas</a> state was
Returns the number of saved states, each containing: <ahref="#Matrix">Matrix</a>, <ahref="#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>.
Restores state to <ahref="#Matrix">Matrix</a>, <ahref="#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a> values when <ahref="#SkCanvas_save">save</a>, <ahref="#SkCanvas_saveLayer">saveLayer</a>,
<ahref="#SkCanvas_saveLayerPreserveLCDTextRequests">saveLayerPreserveLCDTextRequests</a>, or <ahref="#SkCanvas_saveLayerAlpha">saveLayerAlpha</a> returned <ahref="#SkCanvas_restoreToCount_saveCount">saveCount</a>.
restored, its <ahref="SkBitmap_Reference#Bitmap">Bitmap</a> can be modified by <ahref="SkPaint_Reference#Paint">Paint</a> passed to <ahref="#Layer">Layer</a> to apply
Saves <ahref="#Matrix">Matrix</a>, <ahref="#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_restore">restore</a> discards changes to <ahref="#Matrix">Matrix</a>, <ahref="#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>,
<ahref="#Matrix">Matrix</a> may be changed by <ahref="#SkCanvas_translate">translate</a>, <ahref="#SkCanvas_scale">scale</a>, <ahref="#SkCanvas_rotate">rotate</a>, <ahref="#SkCanvas_skew">skew</a>, <ahref="#SkCanvas_concat">concat</a>,
<ahref="#SkCanvas_setMatrix">setMatrix</a>, and <ahref="#SkCanvas_resetMatrix">resetMatrix</a>. <ahref="#Clip">Clip</a> may be changed by <ahref="#SkCanvas_clipRect">clipRect</a>, <ahref="#SkCanvas_clipRRect">clipRRect</a>,
<ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_saveLayer_bounds">bounds</a> suggests but does not define the <ahref="SkBitmap_Reference#Bitmap">Bitmap</a> size. To clip drawing to
<div><fiddle-embedname="1a025d6018f64140af2dc36acad59008"><div>Rectangles are blurred by <ahref="undocumented#Image_Filter">Image Filter</a> when <ahref="#SkCanvas_restore">restore</a> draws <ahref="#Layer">Layer</a> to main
Saves <ahref="#Matrix">Matrix</a>, <ahref="#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_restore">restore</a> discards changes to <ahref="#Matrix">Matrix</a>, <ahref="#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>,
<ahref="#Matrix">Matrix</a> may be changed by <ahref="#SkCanvas_translate">translate</a>, <ahref="#SkCanvas_scale">scale</a>, <ahref="#SkCanvas_rotate">rotate</a>, <ahref="#SkCanvas_skew">skew</a>, <ahref="#SkCanvas_concat">concat</a>,
<ahref="#SkCanvas_setMatrix">setMatrix</a>, and <ahref="#SkCanvas_resetMatrix">resetMatrix</a>. <ahref="#Clip">Clip</a> may be changed by <ahref="#SkCanvas_clipRect">clipRect</a>, <ahref="#SkCanvas_clipRRect">clipRRect</a>,
<ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_saveLayer_2_bounds">bounds</a> suggests but does not define the <ahref="#Layer">Layer</a> size. To clip drawing to
<div><fiddle-embedname="5b59231feae0c09cb1ab6a292229d7a4"><div>Rectangles are blurred by <ahref="undocumented#Image_Filter">Image Filter</a> when <ahref="#SkCanvas_restore">restore</a> draws <ahref="#Layer">Layer</a> to main <ahref="#Canvas">Canvas</a>.
<ahref="undocumented#Image_Filter">Image Filter</a> blurs past edge of <ahref="#Layer">Layer</a> so red rectangle is blurred on all sides.</div></fiddle-embed></div>
Saves <ahref="#Matrix">Matrix</a>, <ahref="#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_restore">restore</a> discards changes to <ahref="#Matrix">Matrix</a>, <ahref="#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>,
<ahref="#Matrix">Matrix</a> may be changed by <ahref="#SkCanvas_translate">translate</a>, <ahref="#SkCanvas_scale">scale</a>, <ahref="#SkCanvas_rotate">rotate</a>, <ahref="#SkCanvas_skew">skew</a>, <ahref="#SkCanvas_concat">concat</a>,
<ahref="#SkCanvas_setMatrix">setMatrix</a>, and <ahref="#SkCanvas_resetMatrix">resetMatrix</a>. <ahref="#Clip">Clip</a> may be changed by <ahref="#SkCanvas_clipRect">clipRect</a>, <ahref="#SkCanvas_clipRRect">clipRRect</a>,
<ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_saveLayerPreserveLCDTextRequests_bounds">bounds</a> suggests but does not define the <ahref="#Layer">Layer</a> size. To clip drawing to
Saves <ahref="#Matrix">Matrix</a>, <ahref="#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_restore">restore</a> discards changes to <ahref="#Matrix">Matrix</a>, <ahref="#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>,
<ahref="#Matrix">Matrix</a> may be changed by <ahref="#SkCanvas_translate">translate</a>, <ahref="#SkCanvas_scale">scale</a>, <ahref="#SkCanvas_rotate">rotate</a>, <ahref="#SkCanvas_skew">skew</a>, <ahref="#SkCanvas_concat">concat</a>,
<ahref="#SkCanvas_setMatrix">setMatrix</a>, and <ahref="#SkCanvas_resetMatrix">resetMatrix</a>. <ahref="#Clip">Clip</a> may be changed by <ahref="#SkCanvas_clipRect">clipRect</a>, <ahref="#SkCanvas_clipRRect">clipRRect</a>,
<ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_saveLayerAlpha_bounds">bounds</a> suggests but does not define <ahref="#Layer">Layer</a> size. To clip drawing to
<ahref="#SkCanvas_SaveLayerFlags">SaveLayerFlags</a> provides options that may be used in any combination in <ahref="#SkCanvas_SaveLayerRec">SaveLayerRec</a>,
<td><aname="SkCanvas_kPreserveLCDText_SaveLayerFlag"><code><strong>SkCanvas::kPreserveLCDText_SaveLayerFlag </strong></code></a></td><td>2</td><td>Creates <ahref="#Layer">Layer</a> for LCD text. Flag is ignored if <ahref="#Layer">Layer</a><ahref="SkPaint_Reference#Paint">Paint</a> contains
<td><aname="SkCanvas_kInitWithPrevious_SaveLayerFlag"><code><strong>SkCanvas::kInitWithPrevious_SaveLayerFlag </strong></code></a></td><td>4</td><td>Initializes <ahref="#Layer">Layer</a> with the contents of the previous <ahref="#Layer">Layer</a>.</td>
<div><fiddle-embedname="d314c688925d2c549d4762f5cc6e6a1a"><div><ahref="#Canvas">Canvas</a><ahref="#Layer">Layer</a> captures red and blue circles scaled up by four.
scalePaint blends <ahref="#Layer">Layer</a> back with transparency.</div></fiddle-embed></div>
<ahref="#SkCanvas_SaveLayerRec_fBackdrop">fBackdrop</a> applies <ahref="undocumented#Image_Filter">Image Filter</a> to the prior <ahref="#Layer">Layer</a> when copying to the <ahref="#Layer">Layer</a>;
may be nullptr. Use <ahref="#SkCanvas_kInitWithPrevious_SaveLayerFlag">kInitWithPrevious SaveLayerFlag</a> to copy the
prior <ahref="#Layer">Layer</a> without an <ahref="undocumented#Image_Filter">Image Filter</a>.
<ahref="#SkCanvas_restore">restore</a> clips <ahref="#Layer">Layer</a> by the <ahref="#Alpha">Color Alpha</a> channel of <ahref="#SkCanvas_SaveLayerRec_fClipMask">fClipMask</a> when
<ahref="#Layer">Layer</a> is copied to <ahref="undocumented#Device">Device</a>. <ahref="#SkCanvas_SaveLayerRec_fClipMask">fClipMask</a> may be nullptr. .
<ahref="#SkCanvas_SaveLayerRec_fClipMatrix">fClipMatrix</a> transforms <ahref="#SkCanvas_SaveLayerRec_fClipMask">fClipMask</a> before it clips <ahref="#Layer">Layer</a>. If
<div><fiddle-embedname="7b18146582fc2440656b839a173ed500"><div><ahref="#Canvas">Canvas</a><ahref="#Layer">Layer</a> captures a red Anti-aliased circle and a blue <ahref="#Alias">Aliased</a> circle scaled
Sets <ahref="#SkCanvas_SaveLayerRec_fBounds">fBounds</a>, <ahref="#SkCanvas_SaveLayerRec_fPaint">fPaint</a>, and <ahref="#SkCanvas_SaveLayerRec_fBackdrop">fBackdrop</a> to nullptr. Clears <ahref="#SkCanvas_SaveLayerRec_fSaveLayerFlags">fSaveLayerFlags</a>.
Sets <ahref="#SkCanvas_SaveLayerRec_fBounds">fBounds</a>, <ahref="#SkCanvas_SaveLayerRec_fPaint">fPaint</a>, and <ahref="#SkCanvas_SaveLayerRec_fSaveLayerFlags">fSaveLayerFlags</a>; sets <ahref="#SkCanvas_SaveLayerRec_fBackdrop">fBackdrop</a> to nullptr.
Not ready for general use.Sets <ahref="#SkCanvas_SaveLayerRec_fBounds">fBounds</a>, <ahref="#SkCanvas_SaveLayerRec_fPaint">fPaint</a>, <ahref="#SkCanvas_SaveLayerRec_fBackdrop">fBackdrop</a>, <ahref="#SkCanvas_SaveLayerRec_fClipMask">fClipMask</a>, <ahref="#SkCanvas_SaveLayerRec_fClipMatrix">fClipMatrix</a>, and <ahref="#SkCanvas_SaveLayerRec_fSaveLayerFlags">fSaveLayerFlags</a>.
<ahref="#SkCanvas_SaveLayerRec_SaveLayerRec_4_clipMatrix">clipMatrix</a> uses <ahref="#Alpha">Color Alpha</a> channel of image, transformed by <ahref="#SkCanvas_SaveLayerRec_SaveLayerRec_4_clipMatrix">clipMatrix</a>, to clip
<ahref="#Layer">Layer</a> when drawn to <ahref="#Canvas">Canvas</a>.
Saves <ahref="#Matrix">Matrix</a>, <ahref="#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_restore">restore</a> discards changes to <ahref="#Matrix">Matrix</a>, <ahref="#Clip">Clip</a>, and <ahref="undocumented#Draw_Filter">Draw Filter</a>,
<ahref="#Matrix">Matrix</a> may be changed by <ahref="#SkCanvas_translate">translate</a>, <ahref="#SkCanvas_scale">scale</a>, <ahref="#SkCanvas_rotate">rotate</a>, <ahref="#SkCanvas_skew">skew</a>, <ahref="#SkCanvas_concat">concat</a>,
<ahref="#SkCanvas_setMatrix">setMatrix</a>, and <ahref="#SkCanvas_resetMatrix">resetMatrix</a>. <ahref="#Clip">Clip</a> may be changed by <ahref="#SkCanvas_clipRect">clipRect</a>, <ahref="#SkCanvas_clipRRect">clipRRect</a>,
<div><fiddle-embedname="7d3751e82d1b6ec328ffa3d6f48ca831"><div>The example draws an image, and saves it into a <ahref="#Layer">Layer</a> with <ahref="#SkCanvas_kInitWithPrevious_SaveLayerFlag">kInitWithPrevious SaveLayerFlag</a>.
Translate <ahref="#Matrix">Matrix</a> by <ahref="#SkCanvas_translate_dx">dx</a> along the x-axis and <ahref="#SkCanvas_translate_dy">dy</a> along the y-axis.
<div><fiddle-embedname="eb93d5fa66a5f7a10f4f9210494d7222"><div><ahref="#SkCanvas_scale">scale</a> followed by <ahref="#SkCanvas_translate">translate</a> produces different results from <ahref="#SkCanvas_translate">translate</a> followed
<div><fiddle-embedname="caafb205771b714948e00dcd58ccaf1f"><div><ahref="#Draw">Draw</a> clock hands at time 5:10. The hour hand and minute hand point up and
Rotate <ahref="#Matrix">Matrix</a> by <ahref="#SkCanvas_rotate_2_degrees">degrees</a> about a point at (<ahref="#SkCanvas_rotate_2_px">px</a>, <ahref="#SkCanvas_rotate_2_py">py</a>). Positive <ahref="#SkCanvas_rotate_2_degrees">degrees</a> rotates
Skew <ahref="#Matrix">Matrix</a> by <ahref="#SkCanvas_skew_sx">sx</a> on the x-axis and <ahref="#SkCanvas_skew_sy">sy</a> on the y-axis. A positive value of <ahref="#SkCanvas_skew_sx">sx</a>
skews the drawing right as y increases; a positive value of <ahref="#SkCanvas_skew_sy">sy</a> skews the drawing
Replace <ahref="#Matrix">Matrix</a> with <ahref="#SkCanvas_concat_matrix">matrix</a><ahref="#Premultiply">Premultiplied</a> with existing <ahref="#Matrix">Matrix</a>.
<ahref="#Contour">Path Contour</a> may be composed of any number of <ahref="#Verb">Path Verb</a> segments. Each
<ahref="#Contour">Path Contour</a> forms a closed area; <ahref="#Fill_Type">Path Fill Type</a> defines the area enclosed
by <ahref="#Contour">Path Contour</a>.
<ahref="#Clip">Clip</a> stack of <ahref="SkPath_Reference#Path">Path</a> elements successfully restrict the <ahref="SkPath_Reference#Path">Path</a> area. Each
prior <ahref="#Clip">Clip</a> to form the replacement <ahref="#Clip">Clip</a>. Use <ahref="#SkClipOp_kDifference">SkClipOp::kDifference</a>
to subtract <ahref="SkPath_Reference#Path">Path</a> from <ahref="#Clip">Clip</a>; use <ahref="#SkClipOp_kIntersect">SkClipOp::kIntersect</a> to intersect <ahref="SkPath_Reference#Path">Path</a>
<ahref="#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
<div><fiddle-embedname="d2e60e5171f26ff9ddefae48387f889b"><div><ahref="#Draw">Draw</a> a red circle with an <ahref="#Alias">Aliased</a> clip and an Anti-aliased clip.
<ahref="#SkCanvas_clipPath">clipPath</a> and intersect the current clip with the specified <ahref="#SkCanvas_androidFramework_setDeviceClipRestriction_rect">rect</a>.
with an <ahref="#Alias">Aliased</a> or Anti-aliased clip edge. <ahref="#Fill_Type">Path Fill Type</a> determines if <ahref="#SkCanvas_clipPath_path">path</a>
<div><fiddle-embedname="7856755c1bf8431c286c734b353345ad"><div>Overlapping <ahref="#Rect">Rects</a> form a clip. When clip <ahref="#Fill_Type">Path Fill Type</a> is set to
<div><fiddle-embedname="187a7ae77a8176e417181411988534b6"><div><ahref="#Clip">Clip</a> loops over itself covering its center twice. When clip <ahref="#Fill_Type">Path Fill Type</a>
is set to <ahref="#SkPath_kWinding_FillType">SkPath::kWinding FillType</a>, the overlap is included. Set to
Replace <ahref="#Clip">Clip</a> with the intersection or difference of <ahref="#Clip">Clip</a> and <ahref="undocumented#Region">Region</a><ahref="#SkCanvas_clipRegion_deviceRgn">deviceRgn</a>.
Return true if <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_quickReject_rect">rect</a>, transformed by <ahref="#Matrix">Matrix</a>, can be quickly determined to be
Return <ahref="#SkCanvas_getLocalClipBounds_2_bounds">bounds</a> of <ahref="#Clip">Clip</a>, transformed by inverse of <ahref="#Matrix">Matrix</a>. If <ahref="#Clip">Clip</a> is empty,
return false, and set <ahref="#SkCanvas_getLocalClipBounds_2_bounds">bounds</a> to <ahref="#SkRect_MakeEmpty">SkRect::MakeEmpty</a>, where all <ahref="SkRect_Reference#Rect">Rect</a> sides equal zero.
Return <ahref="SkIRect_Reference#IRect">IRect</a> bounds of <ahref="#Clip">Clip</a>, unaffected by <ahref="#Matrix">Matrix</a>. If <ahref="#Clip">Clip</a> is empty,
return <ahref="#SkRect_MakeEmpty">SkRect::MakeEmpty</a>, where all <ahref="SkRect_Reference#Rect">Rect</a> sides equal zero.
Return <ahref="SkIRect_Reference#IRect">IRect</a><ahref="#SkCanvas_getDeviceClipBounds_2_bounds">bounds</a> of <ahref="#Clip">Clip</a>, unaffected by <ahref="#Matrix">Matrix</a>. If <ahref="#Clip">Clip</a> is empty,
return false, and set <ahref="#SkCanvas_getDeviceClipBounds_2_bounds">bounds</a> to <ahref="#SkRect_MakeEmpty">SkRect::MakeEmpty</a>, where all <ahref="SkRect_Reference#Rect">Rect</a> sides equal zero.
| <ahref="#SkCanvas_drawArc">drawArc</a> | draws <ahref="undocumented#Arc">Arc</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawAtlas">drawAtlas</a> | draws sprites using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawCircle">drawCircle</a> | draws <ahref="undocumented#Circle">Circle</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawIRect">drawIRect</a> | draws <ahref="SkIRect_Reference#IRect">IRect</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawLine">drawLine</a> | draws line segment between two points |
| <ahref="#SkCanvas_drawOval">drawOval</a> | draws <ahref="undocumented#Oval">Oval</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawPaint">drawPaint</a> | fills <ahref="#Clip">Clip</a> with <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawPatch">drawPatch</a> | draws Coons_Patch |
| <ahref="#SkCanvas_drawPath">drawPath</a> | draws <ahref="SkPath_Reference#Path">Path</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawPicture">drawPicture</a> | draws <ahref="undocumented#Picture">Picture</a> using <ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a> |
| <ahref="#SkCanvas_drawPoints">drawPoints</a> | draws array as points, lines, polygon |
| <ahref="#SkCanvas_drawRRect">drawRRect</a> | draws <ahref="undocumented#Round_Rect">Round Rect</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawRect">drawRect</a> | draws <ahref="SkRect_Reference#Rect">Rect</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawRegion">drawRegion</a> | draws <ahref="undocumented#Region">Region</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawRoundRect">drawRoundRect</a> | draws <ahref="undocumented#Round_Rect">Round Rect</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a> |
| <ahref="#SkCanvas_drawVertices">drawVertices</a> | draws <ahref="undocumented#Vertices">Vertices</a>, a triangle mesh |
Fill <ahref="#Clip">Clip</a> with <ahref="undocumented#Color">Color</a><ahref="#SkCanvas_clear_color">color</a> using <ahref="#SkBlendMode_kSrc">SkBlendMode::kSrc</a>.
<ahref="#SkCanvas_discard">discard</a> may do nothing, depending on the implementation of <ahref="SkSurface_Reference#Surface">Surface</a> or <ahref="undocumented#Device">Device</a>
Fill <ahref="#Clip">Clip</a> with <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawPaint_paint">paint</a>. <ahref="SkPaint_Reference#Paint">Paint</a> components <ahref="undocumented#Mask_Filter">Mask Filter</a>, <ahref="undocumented#Shader">Shader</a>,
<td><aname="SkCanvas_kPoints_PointMode"><code><strong>SkCanvas::kPoints_PointMode </strong></code></a></td><td>0</td><td><ahref="#Draw">Draw</a> each point separately.</td>
<td><aname="SkCanvas_kLines_PointMode"><code><strong>SkCanvas::kLines_PointMode </strong></code></a></td><td>1</td><td><ahref="#Draw">Draw</a> each pair of points as a line segment.</td>
<td><aname="SkCanvas_kPolygon_PointMode"><code><strong>SkCanvas::kPolygon_PointMode </strong></code></a></td><td>2</td><td><ahref="#Draw">Draw</a> the array of points as a open polygon.</td>
<ahref="#Draw">Draw</a><ahref="#SkCanvas_drawPoints_pts">pts</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a> and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawPoints_paint">paint</a>.
<ahref="#SkCanvas_drawPoints_count">count</a> is the number of points; if <ahref="#SkCanvas_drawPoints_count">count</a> is less than one, has no effect.
<ahref="#SkCanvas_drawPoints_mode">mode</a> may be one of: <ahref="#SkCanvas_kPoints_PointMode">kPoints PointMode</a>, <ahref="#SkCanvas_kLines_PointMode">kLines PointMode</a>, or <ahref="#SkCanvas_kPolygon_PointMode">kPolygon PointMode</a>.
If <ahref="#SkCanvas_drawPoints_mode">mode</a> is <ahref="#SkCanvas_kPoints_PointMode">kPoints PointMode</a>, the shape of point drawn depends on <ahref="#SkCanvas_drawPoints_paint">paint</a>
<ahref="#Stroke_Cap">Paint Stroke Cap</a>. If <ahref="#SkCanvas_drawPoints_paint">paint</a> is set to <ahref="#SkPaint_kRound_Cap">SkPaint::kRound Cap</a>, each point draws a
circle of diameter <ahref="#Stroke_Width">Paint Stroke Width</a>. If <ahref="#SkCanvas_drawPoints_paint">paint</a> is set to <ahref="#SkPaint_kSquare_Cap">SkPaint::kSquare Cap</a>
or <ahref="#SkPaint_kButt_Cap">SkPaint::kButt Cap</a>, each point draws a square of width and height
If <ahref="#SkCanvas_drawPoints_mode">mode</a> is <ahref="#SkCanvas_kPolygon_PointMode">kPolygon PointMode</a>, each adjacent pair of points draws a line segment.
<ahref="#SkCanvas_drawPoints_count">count</a> minus one lines are drawn; the first and last point are used once.
Each line segment respects <ahref="#SkCanvas_drawPoints_paint">paint</a><ahref="#Stroke_Cap">Paint Stroke Cap</a> and <ahref="#Stroke_Width">Paint Stroke Width</a>.
<ahref="#Style">Paint Style</a> is ignored, as if were set to <ahref="#SkPaint_kStroke_Style">SkPaint::kStroke Style</a>.
<ahref="#Draw">Draw</a> point at (<ahref="#SkCanvas_drawPoint_x">x</a>, <ahref="#SkCanvas_drawPoint_y">y</a>) using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a> and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawPoint_paint">paint</a>.
<ahref="#Stroke_Width">Paint Stroke Width</a>. If <ahref="#SkCanvas_drawPoint_paint">paint</a> is set to <ahref="#SkPaint_kSquare_Cap">SkPaint::kSquare Cap</a> or <ahref="#SkPaint_kButt_Cap">SkPaint::kButt Cap</a>,
<ahref="#Draw">Draw</a> point <ahref="#SkCanvas_drawPoint_2_p">p</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a> and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawPoint_2_paint">paint</a>.
<ahref="#Stroke_Width">Paint Stroke Width</a>. If <ahref="#SkCanvas_drawPoint_2_paint">paint</a> is set to <ahref="#SkPaint_kSquare_Cap">SkPaint::kSquare Cap</a> or <ahref="#SkPaint_kButt_Cap">SkPaint::kButt Cap</a>,
Draws line segment from (<ahref="#SkCanvas_drawLine_x0">x0</a>, <ahref="#SkCanvas_drawLine_y0">y0</a>) to (<ahref="#SkCanvas_drawLine_x1">x1</a>, <ahref="#SkCanvas_drawLine_y1">y1</a>) using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawLine_paint">paint</a>.
In <ahref="#SkCanvas_drawLine_paint">paint</a>: <ahref="#Stroke_Width">Paint Stroke Width</a> describes the line thickness;
<ahref="#Stroke_Cap">Paint Stroke Cap</a> draws the end rounded or square;
<ahref="#Style">Paint Style</a> is ignored, as if were set to <ahref="#SkPaint_kStroke_Style">SkPaint::kStroke Style</a>.
Draws line segment from <ahref="#SkCanvas_drawLine_2_p0">p0</a> to <ahref="#SkCanvas_drawLine_2_p1">p1</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawLine_2_paint">paint</a>.
In <ahref="#SkCanvas_drawLine_2_paint">paint</a>: <ahref="#Stroke_Width">Paint Stroke Width</a> describes the line thickness;
<ahref="#Stroke_Cap">Paint Stroke Cap</a> draws the end rounded or square;
<ahref="#Style">Paint Style</a> is ignored, as if were set to <ahref="#SkPaint_kStroke_Style">SkPaint::kStroke Style</a>.
<ahref="#Draw">Draw</a><ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawRect_rect">rect</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawRect_paint">paint</a>.
<ahref="#Draw">Draw</a><ahref="SkIRect_Reference#IRect">IRect</a><ahref="#SkCanvas_drawIRect_rect">rect</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawIRect_paint">paint</a>.
<ahref="#Draw">Draw</a><ahref="undocumented#Region">Region</a><ahref="#SkCanvas_drawRegion_region">region</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawRegion_paint">paint</a>.
<ahref="#Draw">Draw</a><ahref="undocumented#Oval">Oval</a><ahref="#SkCanvas_drawOval_oval">oval</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a>.
In <ahref="#SkCanvas_drawOval_paint">paint</a>: <ahref="#Style">Paint Style</a> determines if <ahref="undocumented#Oval">Oval</a> is stroked or filled;
<ahref="#Draw">Draw</a><ahref="undocumented#Round_Rect">Round Rect</a><ahref="#SkCanvas_drawRRect_rrect">rrect</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawRRect_paint">paint</a>.
In <ahref="#SkCanvas_drawRRect_paint">paint</a>: <ahref="#Style">Paint Style</a> determines if <ahref="#SkCanvas_drawRRect_rrect">rrect</a> is stroked or filled;
<ahref="#Draw">Draw</a><ahref="undocumented#Round_Rect">Round Rect</a><ahref="#SkCanvas_drawDRRect_outer">outer</a> and <ahref="#SkCanvas_drawDRRect_inner">inner</a>
using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawDRRect_paint">paint</a>.
In <ahref="#SkCanvas_drawDRRect_paint">paint</a>: <ahref="#Style">Paint Style</a> determines if <ahref="undocumented#Round_Rect">Round Rect</a> is stroked or filled;
concave and <ahref="#SkCanvas_drawDRRect_outer">outer</a> contains <ahref="#SkCanvas_drawDRRect_inner">inner</a>. These platforms may not be able to draw
<div><fiddle-embedname="30823cb4edf884d330285ea161664931"><div>Outer <ahref="SkRect_Reference#Rect">Rect</a> has no corner radii, but stroke join is rounded.
Stroke join does not affect <ahref="#SkCanvas_drawDRRect_inner">inner</a><ahref="undocumented#Round_Rect">Round Rect</a> since it has no sharp corners.</div></fiddle-embed></div>
<ahref="#Draw">Draw</a><ahref="undocumented#Circle">Circle</a> at (<ahref="#SkCanvas_drawCircle_cx">cx</a>, <ahref="#SkCanvas_drawCircle_cy">cy</a>) with <ahref="#SkCanvas_drawCircle_radius">radius</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawCircle_paint">paint</a>.
In <ahref="#SkCanvas_drawCircle_paint">paint</a>: <ahref="#Style">Paint Style</a> determines if <ahref="undocumented#Circle">Circle</a> is stroked or filled;
<ahref="#Draw">Draw</a><ahref="undocumented#Circle">Circle</a> at <ahref="#SkCanvas_drawCircle_2_center">center</a> with <ahref="#SkCanvas_drawCircle_2_radius">radius</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawCircle_2_paint">paint</a>.
In <ahref="#SkCanvas_drawCircle_2_paint">paint</a>: <ahref="#Style">Paint Style</a> determines if <ahref="undocumented#Circle">Circle</a> is stroked or filled;
<ahref="#Draw">Draw</a><ahref="undocumented#Arc">Arc</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawArc_paint">paint</a>.
<ahref="undocumented#Arc">Arc</a> is part of <ahref="undocumented#Oval">Oval</a> bounded by <ahref="#SkCanvas_drawArc_oval">oval</a>, sweeping from <ahref="#SkCanvas_drawArc_startAngle">startAngle</a> to <ahref="#SkCanvas_drawArc_startAngle">startAngle</a> plus
<ahref="#SkCanvas_drawArc_sweepAngle">sweepAngle</a>. <ahref="#SkCanvas_drawArc_startAngle">startAngle</a> and <ahref="#SkCanvas_drawArc_sweepAngle">sweepAngle</a> are in degrees.
<ahref="#SkCanvas_drawArc_startAngle">startAngle</a> of zero places start point at the right middle edge of <ahref="#SkCanvas_drawArc_oval">oval</a>.
A positive <ahref="#SkCanvas_drawArc_sweepAngle">sweepAngle</a> places <ahref="undocumented#Arc">Arc</a> end point clockwise from start point;
a negative <ahref="#SkCanvas_drawArc_sweepAngle">sweepAngle</a> places <ahref="undocumented#Arc">Arc</a> end point counterclockwise from start point.
<ahref="#SkCanvas_drawArc_sweepAngle">sweepAngle</a> may exceed 360 degrees, a full circle.
If <ahref="#SkCanvas_drawArc_useCenter">useCenter</a> is true, draw a wedge that includes lines from <ahref="#SkCanvas_drawArc_oval">oval</a>
center to <ahref="undocumented#Arc">Arc</a> end points. If <ahref="#SkCanvas_drawArc_useCenter">useCenter</a> is false, draw <ahref="undocumented#Arc">Arc</a> between end points.
If <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawArc_oval">oval</a> is empty or <ahref="#SkCanvas_drawArc_sweepAngle">sweepAngle</a> is zero, nothing is drawn.
<ahref="#Draw">Draw</a><ahref="undocumented#Round_Rect">Round Rect</a> bounded by <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawRoundRect_rect">rect</a>, with corner radii (<ahref="#SkCanvas_drawRoundRect_rx">rx</a>, <ahref="#SkCanvas_drawRoundRect_ry">ry</a>) using <ahref="#Clip">Clip</a>,
In <ahref="#SkCanvas_drawRoundRect_paint">paint</a>: <ahref="#Style">Paint Style</a> determines if <ahref="undocumented#Round_Rect">Round Rect</a> is stroked or filled;
if stroked, <ahref="#Stroke_Width">Paint Stroke Width</a> describes the line thickness.
If <ahref="#SkCanvas_drawRoundRect_rx">rx</a> or <ahref="#SkCanvas_drawRoundRect_ry">ry</a> are less than zero, they are treated as if they are zero.
If <ahref="#SkCanvas_drawRoundRect_rx">rx</a> plus <ahref="#SkCanvas_drawRoundRect_ry">ry</a> exceeds <ahref="#SkCanvas_drawRoundRect_rect">rect</a> width or <ahref="#SkCanvas_drawRoundRect_rect">rect</a> height, radii are scaled down to fit.
If <ahref="#SkCanvas_drawRoundRect_rx">rx</a> and <ahref="#SkCanvas_drawRoundRect_ry">ry</a> are zero, <ahref="undocumented#Round_Rect">Round Rect</a> is drawn as <ahref="SkRect_Reference#Rect">Rect</a> and if stroked is affected by
<ahref="#Draw">Draw</a><ahref="SkPath_Reference#Path">Path</a><ahref="#SkCanvas_drawPath_path">path</a> using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawPath_paint">paint</a>.
In <ahref="#SkCanvas_drawPath_paint">paint</a>: <ahref="#Style">Paint Style</a> determines if <ahref="undocumented#Round_Rect">Round Rect</a> is stroked or filled:
if filled, <ahref="#Fill_Type">Path Fill Type</a> determines whether <ahref="#Contour">Path Contour</a> describes inside or
outside of fill; if stroked, <ahref="#Stroke_Width">Paint Stroke Width</a> describes the line thickness,
<ahref="#Stroke_Cap">Paint Stroke Cap</a> describes line ends, and <ahref="#Stroke_Join">Paint Stroke Join</a> describes how
<div><fiddle-embedname="d489555a878cb2ab08eea5faf516f54e"><div>Top rows draw stroked <ahref="#SkCanvas_drawPath_path">path</a> with combinations of joins and caps. The open contour
<ahref="#SkCanvas_drawImage">drawImage</a>, <ahref="#SkCanvas_drawImageRect">drawImageRect</a>, and <ahref="#SkCanvas_drawImageNine">drawImageNine</a> can be called with a bare pointer or
<ahref="#Draw">Draw</a><ahref="SkImage_Reference#Image">Image</a><ahref="#SkCanvas_drawImage_image">image</a>, with its <ahref="#SkCanvas_drawImage_top">top</a>-<ahref="#SkCanvas_drawImage_left">left</a> corner at (<ahref="#SkCanvas_drawImage_left">left</a>, <ahref="#SkCanvas_drawImage_top">top</a>),
using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawImage_paint">paint</a>.
and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="#SkCanvas_drawImage_image">image</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawImage_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawImage_image">image</a> bounds. If generated
mask extends beyond <ahref="#SkCanvas_drawImage_image">image</a> bounds, replicate <ahref="#SkCanvas_drawImage_image">image</a> edge colors, just as <ahref="undocumented#Shader">Shader</a>
made from <ahref="#SkImage_makeShader">SkImage::makeShader</a> with <ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the
<ahref="#Draw">Draw</a><ahref="SkImage_Reference#Image">Image</a><ahref="#SkCanvas_drawImage_2_image">image</a>, with its <ahref="#SkCanvas_drawImage_2_top">top</a>-<ahref="#SkCanvas_drawImage_2_left">left</a> corner at (<ahref="#SkCanvas_drawImage_2_left">left</a>, <ahref="#SkCanvas_drawImage_2_top">top</a>),
using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawImage_2_paint">paint</a>.
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="#SkCanvas_drawImage_2_image">image</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawImage_2_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawImage_2_image">image</a> bounds. If generated
mask extends beyond <ahref="#SkCanvas_drawImage_2_image">image</a> bounds, replicate <ahref="#SkCanvas_drawImage_2_image">image</a> edge colors, just as <ahref="undocumented#Shader">Shader</a>
made from <ahref="#SkImage_makeShader">SkImage::makeShader</a> with <ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the
<ahref="undocumented#Image_Filter">Image Filter</a> in <ahref="SkPaint_Reference#Paint">Paint</a> may sample multiple pixels in the image. Source <ahref="SkRect_Reference#Rect">Rect</a>
<ahref="#SkCanvas_SrcRectConstraint">SrcRectConstraint</a> specifies whether an <ahref="undocumented#Image_Filter">Image Filter</a> is allowed to read pixels
<td><aname="SkCanvas_kStrict_SrcRectConstraint"><code><strong>SkCanvas::kStrict_SrcRectConstraint </strong></code></a></td><td>Requires Image_Filter to respect source Rect,</td><td>sampling only inside of its bounds, possibly with a performance penalty.</td>
<td><aname="SkCanvas_kFast_SrcRectConstraint"><code><strong>SkCanvas::kFast_SrcRectConstraint </strong></code></a></td><td>Permits Image_Filter to sample outside of source Rect</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_kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> shows only a blur of black and white.
Drawing the checkerboard with <ahref="#SkCanvas_kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows red to bleed in the corners.</div></fiddle-embed></div>
<ahref="#Draw">Draw</a><ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawImageRect_src">src</a> of <ahref="SkImage_Reference#Image">Image</a><ahref="#SkCanvas_drawImageRect_image">image</a>, scaled and translated to fill <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawImageRect_dst">dst</a>.
Additionally transform draw using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawImageRect_paint">paint</a>.
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="#SkCanvas_drawImageRect_image">image</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawImageRect_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawImageRect_image">image</a> bounds.
If generated mask extends beyond <ahref="#SkCanvas_drawImageRect_image">image</a> bounds, replicate <ahref="#SkCanvas_drawImageRect_image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="#SkImage_makeShader">SkImage::makeShader</a> with <ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set
<ahref="#SkCanvas_drawImageRect_constraint">constraint</a> set to <ahref="#SkCanvas_kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within <ahref="#SkCanvas_drawImageRect_src">src</a>; set to <ahref="#SkCanvas_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
<ahref="#Draw">Draw</a><ahref="SkIRect_Reference#IRect">IRect</a><ahref="#SkCanvas_drawImageRect_2_isrc">isrc</a> of <ahref="SkImage_Reference#Image">Image</a><ahref="#SkCanvas_drawImageRect_2_image">image</a>, scaled and translated to fill <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawImageRect_2_dst">dst</a>.
Note that <ahref="#SkCanvas_drawImageRect_2_isrc">isrc</a> is on integer pixel boundaries; <ahref="#SkCanvas_drawImageRect_2_dst">dst</a> may include fractional
boundaries. Additionally transform draw using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a>
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="#SkCanvas_drawImageRect_2_image">image</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawImageRect_2_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawImageRect_2_image">image</a> bounds.
If generated mask extends beyond <ahref="#SkCanvas_drawImageRect_2_image">image</a> bounds, replicate <ahref="#SkCanvas_drawImageRect_2_image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="#SkImage_makeShader">SkImage::makeShader</a> with <ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set
<ahref="#SkCanvas_drawImageRect_2_constraint">constraint</a> set to <ahref="#SkCanvas_kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within <ahref="#SkCanvas_drawImageRect_2_isrc">isrc</a>; set to <ahref="#SkCanvas_kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
<ahref="#Draw">Draw</a><ahref="SkImage_Reference#Image">Image</a><ahref="#SkCanvas_drawImageRect_3_image">image</a>, scaled and translated to fill <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawImageRect_3_dst">dst</a>, using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>,
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="#SkCanvas_drawImageRect_3_image">image</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawImageRect_3_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawImageRect_3_image">image</a> bounds.
If generated mask extends beyond <ahref="#SkCanvas_drawImageRect_3_image">image</a> bounds, replicate <ahref="#SkCanvas_drawImageRect_3_image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="#SkImage_makeShader">SkImage::makeShader</a> with <ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set
<ahref="#SkCanvas_drawImageRect_3_constraint">constraint</a> set to <ahref="#SkCanvas_kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within <ahref="#SkCanvas_drawImageRect_3_image">image</a>; set to <ahref="#SkCanvas_kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
<ahref="#Draw">Draw</a><ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawImageRect_4_src">src</a> of <ahref="SkImage_Reference#Image">Image</a><ahref="#SkCanvas_drawImageRect_4_image">image</a>, scaled and translated to fill <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawImageRect_4_dst">dst</a>.
Additionally transform draw using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawImageRect_4_paint">paint</a>.
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="#SkCanvas_drawImageRect_4_image">image</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawImageRect_4_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawImageRect_4_image">image</a> bounds.
If generated mask extends beyond <ahref="#SkCanvas_drawImageRect_4_image">image</a> bounds, replicate <ahref="#SkCanvas_drawImageRect_4_image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="#SkImage_makeShader">SkImage::makeShader</a> with <ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set
<ahref="#SkCanvas_drawImageRect_4_constraint">constraint</a> set to <ahref="#SkCanvas_kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within <ahref="#SkCanvas_drawImageRect_4_src">src</a>; set to <ahref="#SkCanvas_kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
<div><fiddle-embedname="589999454db90c573f7facfb007253a7"><div><ahref="#Canvas">Canvas</a> scales and translates; transformation from <ahref="#SkCanvas_drawImageRect_4_src">src</a> to <ahref="#SkCanvas_drawImageRect_4_dst">dst</a> also scales.
<ahref="#Draw">Draw</a><ahref="SkIRect_Reference#IRect">IRect</a><ahref="#SkCanvas_drawImageRect_5_isrc">isrc</a> of <ahref="SkImage_Reference#Image">Image</a><ahref="#SkCanvas_drawImageRect_5_image">image</a>, scaled and translated to fill <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawImageRect_5_dst">dst</a>.
<ahref="#SkCanvas_drawImageRect_5_isrc">isrc</a> is on integer pixel boundaries; <ahref="#SkCanvas_drawImageRect_5_dst">dst</a> may include fractional boundaries.
Additionally transform draw using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawImageRect_5_paint">paint</a>.
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="#SkCanvas_drawImageRect_5_image">image</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawImageRect_5_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawImageRect_5_image">image</a> bounds.
If generated mask extends beyond <ahref="#SkCanvas_drawImageRect_5_image">image</a> bounds, replicate <ahref="#SkCanvas_drawImageRect_5_image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="#SkImage_makeShader">SkImage::makeShader</a> with <ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set
<ahref="#SkCanvas_drawImageRect_5_constraint">constraint</a> set to <ahref="#SkCanvas_kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within <ahref="#SkCanvas_drawImageRect_5_image">image</a>; set to <ahref="#SkCanvas_kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
<ahref="#Draw">Draw</a><ahref="SkImage_Reference#Image">Image</a><ahref="#SkCanvas_drawImageRect_6_image">image</a>, scaled and translated to fill <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawImageRect_6_dst">dst</a>,
using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawImageRect_6_paint">paint</a>.
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="#SkCanvas_drawImageRect_6_image">image</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawImageRect_6_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawImageRect_6_image">image</a> bounds.
If generated mask extends beyond <ahref="#SkCanvas_drawImageRect_6_image">image</a> bounds, replicate <ahref="#SkCanvas_drawImageRect_6_image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="#SkImage_makeShader">SkImage::makeShader</a> with <ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set
<ahref="#SkCanvas_drawImageRect_6_constraint">constraint</a> set to <ahref="#SkCanvas_kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within <ahref="#SkCanvas_drawImageRect_6_image">image</a>; set to <ahref="#SkCanvas_kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
<ahref="#Draw">Draw</a><ahref="SkImage_Reference#Image">Image</a><ahref="#SkCanvas_drawImageNine_image">image</a> stretched proportionally to fit into <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawImageNine_dst">dst</a>.
<ahref="SkIRect_Reference#IRect">IRect</a><ahref="#SkCanvas_drawImageNine_center">center</a> divides the <ahref="#SkCanvas_drawImageNine_image">image</a> into nine sections: four sides, four corners, and
are larger than <ahref="#SkCanvas_drawImageNine_dst">dst</a>; <ahref="#SkCanvas_drawImageNine_center">center</a> and four sides are scaled to fit remaining space, if any.
Additionally transform draw using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawImageNine_paint">paint</a>.
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="#SkCanvas_drawImageNine_image">image</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawImageNine_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawImageNine_image">image</a> bounds.
If generated mask extends beyond <ahref="#SkCanvas_drawImageNine_image">image</a> bounds, replicate <ahref="#SkCanvas_drawImageNine_image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="#SkImage_makeShader">SkImage::makeShader</a> with <ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set
<div><fiddle-embedname="47f78f3f70ccd9e6c40ee3203a5c71dd"><div>The leftmost <ahref="#SkCanvas_drawImageNine_image">image</a> is smaller than <ahref="#SkCanvas_drawImageNine_center">center</a>; only corners are drawn, all scaled to fit.
The second <ahref="#SkCanvas_drawImageNine_image">image</a> equals the size of <ahref="#SkCanvas_drawImageNine_center">center</a>; only corners are drawn without scaling.
The remaining images are larger than <ahref="#SkCanvas_drawImageNine_center">center</a>. All corners draw without scaling.
The sides and <ahref="#SkCanvas_drawImageNine_center">center</a> are scaled if needed to take up the remaining space.</div></fiddle-embed></div>
<ahref="#Draw">Draw</a><ahref="SkImage_Reference#Image">Image</a><ahref="#SkCanvas_drawImageNine_2_image">image</a> stretched proportionally to fit into <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawImageNine_2_dst">dst</a>.
<ahref="SkIRect_Reference#IRect">IRect</a><ahref="#SkCanvas_drawImageNine_2_center">center</a> divides the <ahref="#SkCanvas_drawImageNine_2_image">image</a> into nine sections: four sides, four corners, and
are larger than <ahref="#SkCanvas_drawImageNine_2_dst">dst</a>; <ahref="#SkCanvas_drawImageNine_2_center">center</a> and four sides are scaled to fit remaining space, if any.
Additionally transform draw using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawImageNine_2_paint">paint</a>.
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="#SkCanvas_drawImageNine_2_image">image</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawImageNine_2_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawImageNine_2_image">image</a> bounds.
If generated mask extends beyond <ahref="#SkCanvas_drawImageNine_2_image">image</a> bounds, replicate <ahref="#SkCanvas_drawImageNine_2_image">image</a> edge colors, just
as <ahref="undocumented#Shader">Shader</a> made from <ahref="#SkImage_makeShader">SkImage::makeShader</a> with <ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set
<div><fiddle-embedname="e941e553970569d1ffb03a42f7fcd6d9"><div>The two leftmost images has four corners and sides to the left and right of <ahref="#SkCanvas_drawImageNine_2_center">center</a>.
The leftmost <ahref="#SkCanvas_drawImageNine_2_image">image</a> scales the width of corners proportionately to fit.
The third and fourth <ahref="#SkCanvas_drawImageNine_2_image">image</a> corners are not scaled; the sides and <ahref="#SkCanvas_drawImageNine_2_center">center</a> are scaled to
<ahref="#Draw">Draw</a><ahref="SkBitmap_Reference#Bitmap">Bitmap</a><ahref="#SkCanvas_drawBitmap_bitmap">bitmap</a>, with its <ahref="#SkCanvas_drawBitmap_top">top</a>-<ahref="#SkCanvas_drawBitmap_left">left</a> corner at (<ahref="#SkCanvas_drawBitmap_left">left</a>, <ahref="#SkCanvas_drawBitmap_top">top</a>),
using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawBitmap_paint">paint</a>.
If <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawBitmap_paint">paint</a> is not nullptr, apply <ahref="undocumented#Color_Filter">Color Filter</a>, <ahref="#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_drawBitmap_bitmap">bitmap</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawBitmap_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawBitmap_bitmap">bitmap</a> bounds.
<ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the <ahref="#SkCanvas_drawBitmap_bitmap">bitmap</a> edge color when it samples
<ahref="#Draw">Draw</a><ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawBitmapRect_src">src</a> of <ahref="SkBitmap_Reference#Bitmap">Bitmap</a><ahref="#SkCanvas_drawBitmapRect_bitmap">bitmap</a>, scaled and translated to fill <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawBitmapRect_dst">dst</a>.
Additionally transform draw using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawBitmapRect_paint">paint</a>.
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="#SkCanvas_drawBitmapRect_bitmap">bitmap</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawBitmapRect_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawBitmapRect_bitmap">bitmap</a> bounds.
<ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the <ahref="#SkCanvas_drawBitmapRect_bitmap">bitmap</a> edge color when it samples
<ahref="#SkCanvas_drawBitmapRect_constraint">constraint</a> set to <ahref="#SkCanvas_kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within <ahref="#SkCanvas_drawBitmapRect_src">src</a>; set to <ahref="#SkCanvas_kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
<ahref="#Draw">Draw</a><ahref="SkIRect_Reference#IRect">IRect</a><ahref="#SkCanvas_drawBitmapRect_2_isrc">isrc</a> of <ahref="SkBitmap_Reference#Bitmap">Bitmap</a><ahref="#SkCanvas_drawBitmapRect_2_bitmap">bitmap</a>, scaled and translated to fill <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawBitmapRect_2_dst">dst</a>.
<ahref="#SkCanvas_drawBitmapRect_2_isrc">isrc</a> is on integer pixel boundaries; <ahref="#SkCanvas_drawBitmapRect_2_dst">dst</a> may include fractional boundaries.
Additionally transform draw using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawBitmapRect_2_paint">paint</a>.
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="#SkCanvas_drawBitmapRect_2_bitmap">bitmap</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawBitmapRect_2_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawBitmapRect_2_bitmap">bitmap</a> bounds.
<ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the <ahref="#SkCanvas_drawBitmapRect_2_bitmap">bitmap</a> edge color when it samples
<ahref="#SkCanvas_drawBitmapRect_2_constraint">constraint</a> set to <ahref="#SkCanvas_kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within <ahref="#SkCanvas_drawBitmapRect_2_isrc">isrc</a>; set to <ahref="#SkCanvas_kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
<ahref="#Draw">Draw</a><ahref="SkBitmap_Reference#Bitmap">Bitmap</a><ahref="#SkCanvas_drawBitmapRect_3_bitmap">bitmap</a>, scaled and translated to fill <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawBitmapRect_3_dst">dst</a>.
<ahref="#SkCanvas_drawBitmapRect_3_bitmap">bitmap</a> bounds is on integer pixel boundaries; <ahref="#SkCanvas_drawBitmapRect_3_dst">dst</a> may include fractional boundaries.
Additionally transform draw using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawBitmapRect_3_paint">paint</a>.
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="#SkCanvas_drawBitmapRect_3_bitmap">bitmap</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawBitmapRect_3_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawBitmapRect_3_bitmap">bitmap</a> bounds.
<ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the <ahref="#SkCanvas_drawBitmapRect_3_bitmap">bitmap</a> edge color when it samples
<ahref="#SkCanvas_drawBitmapRect_3_constraint">constraint</a> set to <ahref="#SkCanvas_kStrict_SrcRectConstraint">kStrict SrcRectConstraint</a> limits <ahref="SkPaint_Reference#Paint">Paint</a><ahref="undocumented#Filter_Quality">Filter Quality</a> to
sample within <ahref="#SkCanvas_drawBitmapRect_3_bitmap">bitmap</a>; set to <ahref="#SkCanvas_kFast_SrcRectConstraint">kFast SrcRectConstraint</a> allows sampling outside to
<ahref="#Draw">Draw</a><ahref="SkBitmap_Reference#Bitmap">Bitmap</a><ahref="#SkCanvas_drawBitmapNine_bitmap">bitmap</a> stretched proportionally to fit into <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawBitmapNine_dst">dst</a>.
<ahref="SkIRect_Reference#IRect">IRect</a><ahref="#SkCanvas_drawBitmapNine_center">center</a> divides the <ahref="#SkCanvas_drawBitmapNine_bitmap">bitmap</a> into nine sections: four sides, four corners,
sides are larger than <ahref="#SkCanvas_drawBitmapNine_dst">dst</a>; <ahref="#SkCanvas_drawBitmapNine_center">center</a> and four sides are scaled to fit remaining
Additionally transform draw using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawBitmapNine_paint">paint</a>.
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="#SkCanvas_drawBitmapNine_bitmap">bitmap</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawBitmapNine_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawBitmapNine_bitmap">bitmap</a> bounds.
<ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the <ahref="#SkCanvas_drawBitmapNine_bitmap">bitmap</a> edge color when it samples
<div><fiddle-embedname="a4a30aa10e566a85fe6f6cad2ff9935b"><div>The two leftmost <ahref="#SkCanvas_drawBitmapNine_bitmap">bitmap</a> draws has four corners and sides to the left and right of <ahref="#SkCanvas_drawBitmapNine_center">center</a>.
The leftmost <ahref="#SkCanvas_drawBitmapNine_bitmap">bitmap</a> draw scales the width of corners proportionately to fit.
<ahref="#SkCanvas_Lattice">Lattice</a> divides <ahref="SkBitmap_Reference#Bitmap">Bitmap</a> or <ahref="SkImage_Reference#Image">Image</a> into a rectangular grid.
<td><aname="SkCanvas_Lattice_kDefault"><code><strong>SkCanvas::Lattice::kDefault </strong></code></a></td><td>0</td><td>Draws <ahref="SkBitmap_Reference#Bitmap">Bitmap</a> into lattice rectangle.</td>
</tr>
<tr>
<td><aname="SkCanvas_Lattice_kTransparent"><code><strong>SkCanvas::Lattice::kTransparent </strong></code></a></td><td>1</td><td>Skips lattice rectangle by making it transparent.</td>
</tr>
<tr>
<td><aname="SkCanvas_Lattice_kFixedColor"><code><strong>SkCanvas::Lattice::kFixedColor </strong></code></a></td><td>2</td><td>Draws one of <ahref="#SkCanvas_Lattice_fColors">fColors</a> into lattice rectangle.</td>
Each <ahref="#SkCanvas_Lattice_RectType">RectType</a> is one of: <ahref="#SkCanvas_Lattice_kDefault">kDefault</a>, <ahref="#SkCanvas_Lattice_kTransparent">kTransparent</a>, <ahref="#SkCanvas_Lattice_kFixedColor">kFixedColor</a>.
<ahref="#Draw">Draw</a><ahref="SkBitmap_Reference#Bitmap">Bitmap</a><ahref="#SkCanvas_drawBitmapLattice_bitmap">bitmap</a> stretched proportionally to fit into <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawBitmapLattice_dst">dst</a>.
<ahref="#SkCanvas_Lattice">Lattice</a><ahref="#SkCanvas_drawBitmapLattice_lattice">lattice</a> divides <ahref="#SkCanvas_drawBitmapLattice_bitmap">bitmap</a> into a rectangular grid.
of <ahref="#SkCanvas_drawBitmapNine">drawBitmapNine</a>, fixed <ahref="#SkCanvas_drawBitmapLattice_lattice">lattice</a> elements never scale larger than their initial
Additionally transform draw using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawBitmapLattice_paint">paint</a>.
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If <ahref="#SkCanvas_drawBitmapLattice_bitmap">bitmap</a> is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
If <ahref="#SkCanvas_drawBitmapLattice_paint">paint</a> contains <ahref="undocumented#Mask_Filter">Mask Filter</a>, generate mask from <ahref="#SkCanvas_drawBitmapLattice_bitmap">bitmap</a> bounds.
<ahref="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> set replicates the <ahref="#SkCanvas_drawBitmapLattice_bitmap">bitmap</a> edge color when it samples
<div><fiddle-embedname="7a02b16a4cc8158d88858a76907c9d89"><div>The two leftmost <ahref="#SkCanvas_drawBitmapLattice_bitmap">bitmap</a> draws has four corners and sides to the left and right of center.
<ahref="#Draw">Draw</a><ahref="SkImage_Reference#Image">Image</a><ahref="#SkCanvas_drawImageLattice_image">image</a> stretched proportionally to fit into <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawImageLattice_dst">dst</a>.
<ahref="#SkCanvas_Lattice">Lattice</a><ahref="#SkCanvas_drawImageLattice_lattice">lattice</a> divides <ahref="#SkCanvas_drawImageLattice_image">image</a> into a rectangular grid.
of <ahref="#SkCanvas_drawBitmapNine">drawBitmapNine</a>, fixed <ahref="#SkCanvas_drawImageLattice_lattice">lattice</a> elements never scale larger than their initial
Additionally transform draw using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawImageLattice_paint">paint</a>.
<ahref="undocumented#Blend_Mode">Blend Mode</a>, and <ahref="undocumented#Draw_Looper">Draw Looper</a>. If bitmap is <ahref="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>, apply <ahref="undocumented#Shader">Shader</a>.
<div><fiddle-embedname="75f43f11c6bd58175071b8b54ebec676"><div>The leftmost <ahref="#SkCanvas_drawImageLattice_image">image</a> is smaller than center; only corners are drawn, all scaled to fit.
<ahref="#Draw">Draw</a><ahref="#SkCanvas_drawText_text">text</a>, with origin at (<ahref="#SkCanvas_drawText_x">x</a>, <ahref="#SkCanvas_drawText_y">y</a>), using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawText_paint">paint</a>.
<ahref="#SkCanvas_drawText_text">text</a> meaning depends on <ahref="#Text_Encoding">Paint Text Encoding</a>; by default, <ahref="#SkCanvas_drawText_text">text</a> is encoded as
<ahref="#SkCanvas_drawText_x">x</a> and <ahref="#SkCanvas_drawText_y">y</a> meaning depends on <ahref="#Text_Align">Paint Text Align</a> and <ahref="#Vertical_Text">Paint Vertical Text</a>; by default
and its baseline at <ahref="#SkCanvas_drawText_y">y</a>. <ahref="undocumented#Text">Text</a> size is affected by <ahref="#Matrix">Matrix</a> and <ahref="#Text_Size">Paint Text Size</a>.
All elements of <ahref="#SkCanvas_drawText_paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</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_drawText_text">text</a>. By default, draws
<div><fiddle-embedname="a3365bd3044b13e8e0318ee8aefbdf91"><div>The same <ahref="#SkCanvas_drawText_text">text</a> is drawn varying <ahref="#Text_Size">Paint Text Size</a> and varying
<ahref="#Draw">Draw</a> null terminated <ahref="#SkCanvas_drawString_string">string</a>, with origin at (<ahref="#SkCanvas_drawString_x">x</a>, <ahref="#SkCanvas_drawString_y">y</a>), using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and
<ahref="#SkCanvas_drawString_x">x</a> and <ahref="#SkCanvas_drawString_y">y</a> meaning depends on <ahref="#Text_Align">Paint Text Align</a> and <ahref="#Vertical_Text">Paint Vertical Text</a>; by default
<ahref="#SkCanvas_drawString_string">string</a> draws left to right, positioning the first glyph left side bearing at <ahref="#SkCanvas_drawString_x">x</a>
and its baseline at <ahref="#SkCanvas_drawString_y">y</a>. <ahref="undocumented#Text">Text</a> size is affected by <ahref="#Matrix">Matrix</a> and <ahref="#Text_Size">Paint Text Size</a>.
All elements of <ahref="#SkCanvas_drawString_paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</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
<ahref="#Draw">Draw</a> null terminated <ahref="#SkCanvas_drawString_2_string">string</a>, with origin at (<ahref="#SkCanvas_drawString_2_x">x</a>, <ahref="#SkCanvas_drawString_2_y">y</a>), using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and
<ahref="#SkCanvas_drawString_2_x">x</a> and <ahref="#SkCanvas_drawString_2_y">y</a> meaning depends on <ahref="#Text_Align">Paint Text Align</a> and <ahref="#Vertical_Text">Paint Vertical Text</a>; by default
<ahref="#SkCanvas_drawString_2_string">string</a> draws left to right, positioning the first glyph left side bearing at <ahref="#SkCanvas_drawString_2_x">x</a>
and its baseline at <ahref="#SkCanvas_drawString_2_y">y</a>. <ahref="undocumented#Text">Text</a> size is affected by <ahref="#Matrix">Matrix</a> and <ahref="#Text_Size">Paint Text Size</a>.
All elements of <ahref="#SkCanvas_drawString_2_paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</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
<ahref="#Draw">Draw</a> each glyph in <ahref="#SkCanvas_drawPosText_text">text</a> with the origin in <ahref="#SkCanvas_drawPosText_pos">pos</a> array, using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and
<ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawPosText_paint">paint</a>. The number of entries in <ahref="#SkCanvas_drawPosText_pos">pos</a> array must match the number of <ahref="#Glyph">Glyphs</a>
<ahref="#SkCanvas_drawPosText_text">text</a> meaning depends on <ahref="#Text_Encoding">Paint Text Encoding</a>; by default, <ahref="#SkCanvas_drawPosText_text">text</a> is encoded as
UTF-8. <ahref="#SkCanvas_drawPosText_pos">pos</a> elements' meaning depends on <ahref="#Text_Align">Paint Text Align</a> and <ahref="#Vertical_Text">Paint Vertical Text</a>;
All elements of <ahref="#SkCanvas_drawPosText_paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</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_drawPosText_text">text</a>. By default, draws
<ahref="#Draw">Draw</a> each glyph in <ahref="#SkCanvas_drawPosTextH_text">text</a> with its (x, y) origin composed from <ahref="#SkCanvas_drawPosTextH_xpos">xpos</a> array and
<ahref="#SkCanvas_drawPosTextH_constY">constY</a>, using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawPosTextH_paint">paint</a>. The number of entries in <ahref="#SkCanvas_drawPosTextH_xpos">xpos</a> array
must match the number of <ahref="#Glyph">Glyphs</a> described by <ahref="#SkCanvas_drawPosTextH_byteLength">byteLength</a> of <ahref="#SkCanvas_drawPosTextH_text">text</a>.
<ahref="#SkCanvas_drawPosTextH_text">text</a> meaning depends on <ahref="#Text_Encoding">Paint Text Encoding</a>; by default, <ahref="#SkCanvas_drawPosTextH_text">text</a> is encoded as
UTF-8. <ahref="#SkCanvas_drawPosTextH_xpos">xpos</a> elements' meaning depends on <ahref="#Text_Align">Paint Text Align</a> and <ahref="#Vertical_Text">Paint Vertical Text</a>;
its baseline is positioned at <ahref="#SkCanvas_drawPosTextH_constY">constY</a>. <ahref="undocumented#Text">Text</a> size is affected by <ahref="#Matrix">Matrix</a> and
All elements of <ahref="#SkCanvas_drawPosTextH_paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</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_drawPosTextH_text">text</a>. By default, draws
<ahref="#Draw">Draw</a><ahref="#SkCanvas_drawTextOnPathHV_text">text</a> on <ahref="SkPath_Reference#Path">Path</a><ahref="#SkCanvas_drawTextOnPathHV_path">path</a>, using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawTextOnPathHV_paint">paint</a>.
Origin of <ahref="#SkCanvas_drawTextOnPathHV_text">text</a> is at distance <ahref="#SkCanvas_drawTextOnPathHV_hOffset">hOffset</a> along the <ahref="#SkCanvas_drawTextOnPathHV_path">path</a>, offset by a perpendicular
vector of length <ahref="#SkCanvas_drawTextOnPathHV_vOffset">vOffset</a>. If the <ahref="#SkCanvas_drawTextOnPathHV_path">path</a> section corresponding the glyph advance is
mapped to projected points parallel to the <ahref="#SkCanvas_drawTextOnPathHV_path">path</a>. If the <ahref="#SkCanvas_drawTextOnPathHV_text">text</a> advance is larger
<ahref="#SkCanvas_drawTextOnPathHV_text">text</a> meaning depends on <ahref="#Text_Encoding">Paint Text Encoding</a>; by default, <ahref="#SkCanvas_drawTextOnPathHV_text">text</a> is encoded as
All elements of <ahref="#SkCanvas_drawTextOnPathHV_paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</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_drawTextOnPathHV_text">text</a>. By default, draws
offset of <ahref="#SkCanvas_drawTextOnPathHV_text">text</a> above (if negative) or below (if positive) the <ahref="#SkCanvas_drawTextOnPathHV_path">path</a></td>
<ahref="#Draw">Draw</a><ahref="#SkCanvas_drawTextOnPath_text">text</a> on <ahref="SkPath_Reference#Path">Path</a><ahref="#SkCanvas_drawTextOnPath_path">path</a>, using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawTextOnPath_paint">paint</a>.
Origin of <ahref="#SkCanvas_drawTextOnPath_text">text</a> is at beginning of <ahref="#SkCanvas_drawTextOnPath_path">path</a> offset by <ahref="#SkCanvas_drawTextOnPath_matrix">matrix</a>, if provided, before it
is mapped to <ahref="#SkCanvas_drawTextOnPath_path">path</a>. If the <ahref="#SkCanvas_drawTextOnPath_path">path</a> section corresponding the glyph advance is
mapped to projected points parallel to the <ahref="#SkCanvas_drawTextOnPath_path">path</a>. If the <ahref="#SkCanvas_drawTextOnPath_text">text</a> advance is larger
<ahref="#SkCanvas_drawTextOnPath_text">text</a> meaning depends on <ahref="#Text_Encoding">Paint Text Encoding</a>; by default, <ahref="#SkCanvas_drawTextOnPath_text">text</a> is encoded as
All elements of <ahref="#SkCanvas_drawTextOnPath_paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</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_drawTextOnPath_text">text</a>. By default, draws
<ahref="#Draw">Draw</a><ahref="#SkCanvas_drawTextRSXform_text">text</a>, transforming each glyph by the corresponding <ahref="undocumented#SkRSXform">SkRSXform</a>,
using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawTextRSXform_paint">paint</a>.
Optional <ahref="SkRect_Reference#Rect">Rect</a><ahref="#SkCanvas_drawTextRSXform_cullRect">cullRect</a> is a conservative bounds of <ahref="#SkCanvas_drawTextRSXform_text">text</a>, taking into account
<ahref="undocumented#RSXform">RSXform</a> and <ahref="#SkCanvas_drawTextRSXform_paint">paint</a>. If <ahref="#SkCanvas_drawTextRSXform_cullRect">cullRect</a> is outside of <ahref="#Clip">Clip</a>, canvas can skip drawing.
All elements of <ahref="#SkCanvas_drawTextRSXform_paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</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_drawTextRSXform_text">text</a>. By default, draws
<ahref="#Draw">Draw</a><ahref="undocumented#Text_Blob">Text Blob</a><ahref="#SkCanvas_drawTextBlob_blob">blob</a> at (<ahref="#SkCanvas_drawTextBlob_x">x</a>, <ahref="#SkCanvas_drawTextBlob_y">y</a>), using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawTextBlob_paint">paint</a>.
<ahref="#SkCanvas_drawTextBlob_blob">blob</a> contains <ahref="#Glyph">Glyphs</a>, their positions, and <ahref="#SkCanvas_drawTextBlob_paint">paint</a> attributes specific to text:
<ahref="undocumented#Typeface">Typeface</a>, <ahref="#Text_Size">Paint Text Size</a>, <ahref="#Text_Scale_X">Paint Text Scale X</a>, <ahref="#Text_Skew_X">Paint Text Skew X</a>,
Elements of <ahref="#SkCanvas_drawTextBlob_paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</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_drawTextBlob_blob">blob</a>.
<ahref="#Draw">Draw</a><ahref="undocumented#Text_Blob">Text Blob</a><ahref="#SkCanvas_drawTextBlob_2_blob">blob</a> at (<ahref="#SkCanvas_drawTextBlob_2_x">x</a>, <ahref="#SkCanvas_drawTextBlob_2_y">y</a>), using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawTextBlob_2_paint">paint</a>.
<ahref="#SkCanvas_drawTextBlob_2_blob">blob</a> contains <ahref="#Glyph">Glyphs</a>, their positions, and <ahref="#SkCanvas_drawTextBlob_2_paint">paint</a> attributes specific to text:
<ahref="undocumented#Typeface">Typeface</a>, <ahref="#Text_Size">Paint Text Size</a>, <ahref="#Text_Scale_X">Paint Text Scale X</a>, <ahref="#Text_Skew_X">Paint Text Skew X</a>,
Elements of <ahref="#SkCanvas_drawTextBlob_2_paint">paint</a>: <ahref="undocumented#Path_Effect">Path Effect</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_drawTextBlob_2_blob">blob</a>.
<div><fiddle-embedname="d88b17d85fa68c56b3c1ad02b69068bf"><div><ahref="SkPaint_Reference#Paint">Paint</a> attributes unrelated to text, like color, have no effect on <ahref="#SkCanvas_drawTextBlob_2_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_drawTextBlob_2_paint">paint</a> passed to <ahref="#SkCanvas_drawTextBlob">drawTextBlob</a>.</div></fiddle-embed></div>
<ahref="#Draw">Draw</a><ahref="undocumented#Picture">Picture</a><ahref="#SkCanvas_drawPicture_picture">picture</a>, using <ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a>.
<ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a> are unchanged by <ahref="#SkCanvas_drawPicture_picture">picture</a> contents, as if
<ahref="#SkCanvas_save">save</a> was called before and <ahref="#SkCanvas_restore">restore</a> was called after <ahref="#SkCanvas_drawPicture">drawPicture</a>.
<ahref="#Draw">Draw</a><ahref="undocumented#Picture">Picture</a><ahref="#SkCanvas_drawPicture_2_picture">picture</a>, using <ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a>.
<ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a> are unchanged by <ahref="#SkCanvas_drawPicture_2_picture">picture</a> contents, as if
<ahref="#SkCanvas_save">save</a> was called before and <ahref="#SkCanvas_restore">restore</a> was called after <ahref="#SkCanvas_drawPicture">drawPicture</a>.
<ahref="#Draw">Draw</a><ahref="undocumented#Picture">Picture</a><ahref="#SkCanvas_drawPicture_3_picture">picture</a>, using <ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a>; transforming <ahref="#SkCanvas_drawPicture_3_picture">picture</a> with
<ahref="#Matrix">Matrix</a><ahref="#SkCanvas_drawPicture_3_matrix">matrix</a>, if provided; and use <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawPicture_3_paint">paint</a><ahref="#Alpha">Color Alpha</a>, <ahref="undocumented#Color_Filter">Color Filter</a>,
<ahref="#SkCanvas_drawPicture_3_matrix">matrix</a> transformation is equivalent to: <ahref="#SkCanvas_save">save</a>, <ahref="#SkCanvas_concat">concat</a>, <ahref="#SkCanvas_drawPicture">drawPicture</a>, <ahref="#SkCanvas_restore">restore</a>.
<ahref="#SkCanvas_drawPicture_3_paint">paint</a> use is equivalent to: <ahref="#SkCanvas_saveLayer">saveLayer</a>, <ahref="#SkCanvas_drawPicture">drawPicture</a>, <ahref="#SkCanvas_restore">restore</a>.
<ahref="#Draw">Draw</a><ahref="undocumented#Picture">Picture</a><ahref="#SkCanvas_drawPicture_4_picture">picture</a>, using <ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a>; transforming <ahref="#SkCanvas_drawPicture_4_picture">picture</a> with
<ahref="#Matrix">Matrix</a><ahref="#SkCanvas_drawPicture_4_matrix">matrix</a>, if provided; and use <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawPicture_4_paint">paint</a><ahref="#Alpha">Color Alpha</a>, <ahref="undocumented#Color_Filter">Color Filter</a>,
<ahref="#SkCanvas_drawPicture_4_matrix">matrix</a> transformation is equivalent to: <ahref="#SkCanvas_save">save</a>, <ahref="#SkCanvas_concat">concat</a>, <ahref="#SkCanvas_drawPicture">drawPicture</a>, <ahref="#SkCanvas_restore">restore</a>.
<ahref="#SkCanvas_drawPicture_4_paint">paint</a> use is equivalent to: <ahref="#SkCanvas_saveLayer">saveLayer</a>, <ahref="#SkCanvas_drawPicture">drawPicture</a>, <ahref="#SkCanvas_restore">restore</a>.
<ahref="#Draw">Draw</a><ahref="undocumented#Vertices">Vertices</a><ahref="#SkCanvas_drawVertices_vertices">vertices</a>, a triangle mesh, using <ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a>.
If <ahref="#Texs">Vertices Texs</a> and <ahref="#Colors">Vertices Colors</a> are defined in <ahref="#SkCanvas_drawVertices_vertices">vertices</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawVertices_paint">paint</a>
contains <ahref="undocumented#Shader">Shader</a>, <ahref="undocumented#Blend_Mode">Blend Mode</a><ahref="#SkCanvas_drawVertices_mode">mode</a> combines <ahref="#Colors">Vertices Colors</a> with <ahref="undocumented#Shader">Shader</a>.
<ahref="#Draw">Draw</a><ahref="undocumented#Vertices">Vertices</a><ahref="#SkCanvas_drawVertices_2_vertices">vertices</a>, a triangle mesh, using <ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a>.
If <ahref="#Texs">Vertices Texs</a> and <ahref="#Colors">Vertices Colors</a> are defined in <ahref="#SkCanvas_drawVertices_2_vertices">vertices</a>, and <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawVertices_2_paint">paint</a>
contains <ahref="undocumented#Shader">Shader</a>, <ahref="undocumented#Blend_Mode">Blend Mode</a><ahref="#SkCanvas_drawVertices_2_mode">mode</a> combines <ahref="#Colors">Vertices Colors</a> with <ahref="undocumented#Shader">Shader</a>.
<ahref="#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 Coons_Patch texture; <ahref="undocumented#Blend_Mode">Blend Mode</a><ahref="#SkCanvas_drawPatch_mode">mode</a> combines <ahref="undocumented#Color">Color</a><ahref="#SkCanvas_drawPatch_colors">colors</a> and <ahref="undocumented#Shader">Shader</a> if
<ahref="SkPoint_Reference#Point">Point</a> array <ahref="#SkCanvas_drawPatch_cubics">cubics</a> specifies four <ahref="#Cubic">Cubics</a> starting at the top-left corner,
If <ahref="#SkCanvas_drawPatch_paint">paint</a> contains <ahref="undocumented#Shader">Shader</a>, <ahref="SkPoint_Reference#Point">Point</a> array <ahref="#SkCanvas_drawPatch_texCoords">texCoords</a> maps <ahref="undocumented#Shader">Shader</a> as texture to
<ahref="undocumented#Blend_Mode">Blend Mode</a> for <ahref="#SkCanvas_drawPatch_colors">colors</a>, and for <ahref="undocumented#Shader">Shader</a> if <ahref="#SkCanvas_drawPatch_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>
<ahref="#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 Coons_Patch texture; <ahref="undocumented#Blend_Mode">Blend Mode</a> mode combines <ahref="undocumented#Color">Color</a><ahref="#SkCanvas_drawPatch_2_colors">colors</a> and <ahref="undocumented#Shader">Shader</a> if
<ahref="SkPoint_Reference#Point">Point</a> array <ahref="#SkCanvas_drawPatch_2_cubics">cubics</a> specifies four <ahref="#Cubic">Cubics</a> starting at the top-left corner,
If <ahref="#SkCanvas_drawPatch_2_paint">paint</a> contains <ahref="undocumented#Shader">Shader</a>, <ahref="SkPoint_Reference#Point">Point</a> array <ahref="#SkCanvas_drawPatch_2_texCoords">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>
<ahref="#Draw">Draw</a> a set of sprites from <ahref="#SkCanvas_drawAtlas_atlas">atlas</a>, using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawAtlas_paint">paint</a>.
<ahref="#SkCanvas_drawAtlas_atlas">atlas</a>, and <ahref="undocumented#RSXform">RSXform</a><ahref="#SkCanvas_drawAtlas_xform">xform</a> transforms it into destination space.
<ahref="#SkCanvas_drawAtlas_xform">xform</a>, text, and <ahref="#SkCanvas_drawAtlas_colors">colors</a> if present, must contain <ahref="#SkCanvas_drawAtlas_count">count</a> entries.
Optional <ahref="#SkCanvas_drawAtlas_colors">colors</a> are applied for each sprite using <ahref="undocumented#Blend_Mode">Blend Mode</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>
<ahref="#Draw">Draw</a> a set of sprites from <ahref="#SkCanvas_drawAtlas_2_atlas">atlas</a>, using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawAtlas_2_paint">paint</a>.
<ahref="#SkCanvas_drawAtlas_2_atlas">atlas</a>, and <ahref="undocumented#RSXform">RSXform</a><ahref="#SkCanvas_drawAtlas_2_xform">xform</a> transforms it into destination space.
<ahref="#SkCanvas_drawAtlas_2_xform">xform</a>, text, and <ahref="#SkCanvas_drawAtlas_2_colors">colors</a> if present, must contain <ahref="#SkCanvas_drawAtlas_2_count">count</a> entries.
Optional <ahref="#SkCanvas_drawAtlas_2_colors">colors</a> is applied for each sprite using <ahref="undocumented#Blend_Mode">Blend Mode</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>
<ahref="#Draw">Draw</a> a set of sprites from <ahref="#SkCanvas_drawAtlas_3_atlas">atlas</a>, using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawAtlas_3_paint">paint</a>.
<ahref="#SkCanvas_drawAtlas_3_atlas">atlas</a>, and <ahref="undocumented#RSXform">RSXform</a><ahref="#SkCanvas_drawAtlas_3_xform">xform</a> transforms it into destination space.
<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>
<ahref="#Draw">Draw</a> a set of sprites from <ahref="#SkCanvas_drawAtlas_4_atlas">atlas</a>, using <ahref="#Clip">Clip</a>, <ahref="#Matrix">Matrix</a>, and optional <ahref="SkPaint_Reference#Paint">Paint</a><ahref="#SkCanvas_drawAtlas_4_paint">paint</a>.
<ahref="#SkCanvas_drawAtlas_4_atlas">atlas</a>, and <ahref="undocumented#RSXform">RSXform</a><ahref="#SkCanvas_drawAtlas_4_xform">xform</a> transforms it into destination space.
<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>
<ahref="#Draw">Draw</a><ahref="undocumented#Drawable">Drawable</a><ahref="#SkCanvas_drawDrawable_drawable">drawable</a> using <ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a>, concatenated with
<ahref="#Draw">Draw</a><ahref="undocumented#Drawable">Drawable</a><ahref="#SkCanvas_drawDrawable_2_drawable">drawable</a> using <ahref="#Clip">Clip</a> and <ahref="#Matrix">Matrix</a>, offset by (<ahref="#SkCanvas_drawDrawable_2_x">x</a>, <ahref="#SkCanvas_drawDrawable_2_y">y</a>).
Associate <ahref="SkRect_Reference#Rect">Rect</a> on <ahref="#Canvas">Canvas</a> with an annotation; a <ahref="#SkCanvas_drawAnnotation_key">key</a>-<ahref="#SkCanvas_drawAnnotation_value">value</a> pair, where the <ahref="#SkCanvas_drawAnnotation_key">key</a> is
Associate <ahref="SkRect_Reference#Rect">Rect</a> on <ahref="#Canvas">Canvas</a> when an annotation; a <ahref="#SkCanvas_drawAnnotation_2_key">key</a>-<ahref="#SkCanvas_drawAnnotation_2_value">value</a> pair, where the <ahref="#SkCanvas_drawAnnotation_2_key">key</a> is