bool <ahref='#SkCanvas_readPixels'>readPixels</a>(const <ahref='SkPixmap_Reference#SkPixmap'>SkPixmap</a>&<ahref='SkPixmap_Reference#Pixmap'>pixmap</a>, int srcX, int srcY);
bool <ahref='#SkCanvas_readPixels'>readPixels</a>(const <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a>&<ahref='SkBitmap_Reference#Bitmap'>bitmap</a>, int srcX, int srcY);
bool <ahref='#SkCanvas_writePixels'>writePixels</a>(const <ahref='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& info, const void* pixels, size_t rowBytes, int x, int y);
bool <ahref='#SkCanvas_writePixels'>writePixels</a>(const <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a>&<ahref='SkBitmap_Reference#Bitmap'>bitmap</a>, int x, int y);
int <ahref='#SkCanvas_save'>save()</a>;
int <ahref='#SkCanvas_saveLayer'>saveLayer</a>(const <ahref='SkRect_Reference#SkRect'>SkRect</a>* bounds, const <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>* <ahref='SkPaint_Reference#Paint'>paint</a>);
int <ahref='#SkCanvas_saveLayer'>saveLayer</a>(const <ahref='SkRect_Reference#SkRect'>SkRect</a>& bounds, const <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>* <ahref='SkPaint_Reference#Paint'>paint</a>);
int <ahref='#SkCanvas_saveLayerPreserveLCDTextRequests'>saveLayerPreserveLCDTextRequests</a>(const <ahref='SkRect_Reference#SkRect'>SkRect</a>* bounds, const <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>* <ahref='SkPaint_Reference#Paint'>paint</a>);
int <ahref='#SkCanvas_saveLayerAlpha'>saveLayerAlpha</a>(const <ahref='SkRect_Reference#SkRect'>SkRect</a>* bounds, <ahref='undocumented#U8CPU'>U8CPU</a><ahref='SkColor_Reference#Alpha'>alpha</a>);
<ahref='SkCanvas_Reference#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='SkCanvas_Reference#Canvas'>Canvas</a> draw call transforms the geometry of the object by the concatenation of all
<ahref='SkMatrix_Reference#Matrix'>Matrix</a> values in the stack. The transformed geometry is clipped by the intersection
of all of Clip values in the stack. The <ahref='SkCanvas_Reference#Canvas'>Canvas</a> draw calls use <ahref='SkPaint_Reference#Paint'>Paint</a> to supply drawing
state such as <ahref='SkColor_Reference#Color'>Color</a>, <ahref='undocumented#Typeface'>Typeface</a>, <ahref='undocumented#Text'>text</a><ahref='undocumented#Size'>size</a>, stroke width, <ahref='undocumented#Shader'>Shader</a> and so on.
To draw to a <ahref='undocumented#Document'>document</a>, obtain <ahref='SkCanvas_Reference#Canvas'>Canvas</a> from <ahref='#SVG_Canvas'>SVG_Canvas</a>, <ahref='#Document_PDF'>Document_PDF</a>, or <ahref='#Picture_Recorder'>Picture_Recorder</a>.
<ahref='undocumented#Document'>Document</a> based <ahref='SkCanvas_Reference#Canvas'>Canvas</a> and other <ahref='SkCanvas_Reference#Canvas'>Canvas</a> subclasses reference <ahref='undocumented#Device'>Device</a> describing the
<ahref='SkCanvas_Reference#Canvas'>Canvas</a> can be constructed to draw to <ahref='SkBitmap_Reference#Bitmap'>Bitmap</a> without first creating <ahref='#Raster_Surface'>Raster_Surface</a>.
<ahref='SkCanvas_Reference#Canvas'>Canvas</a> may be created directly when no <ahref='SkSurface_Reference#Surface'>Surface</a> is required; some <ahref='SkCanvas_Reference#Canvas'>Canvas</a> methods
<ahref='#SkCanvas_MakeRasterDirect_info'>info</a> dimensions are zero or positive;
<ahref='#SkCanvas_MakeRasterDirect_info'>info</a> contains <ahref='SkImageInfo_Reference#SkColorType'>SkColorType</a> and <ahref='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a> supported by <ahref='undocumented#Raster_Surface'>raster surface</a>;
<ahref='#SkCanvas_MakeRasterDirect_pixels'>pixels</a> is not nullptr;
<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#SkColorType'>SkColorType</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 <ahref='undocumented#Size'>size</a> of <ahref='undocumented#Pixel'>pixel</a>.
If <ahref='#SkCanvas_MakeRasterDirect_rowBytes'>rowBytes</a> is greater than zero, it must be equal to or greater than
<ahref='#SkCanvas_MakeRasterDirect_info'>info</a> width times bytes required for <ahref='SkImageInfo_Reference#SkColorType'>SkColorType</a>.
<ahref='undocumented#Pixel'>Pixel</a> buffer <ahref='undocumented#Size'>size</a> 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>().
<div><fiddle-embedname="@Canvas_MakeRasterDirect"><div>Allocates a three by three <ahref='SkBitmap_Reference#Bitmap'>bitmap</a>, clears it to white, and draws a black <ahref='undocumented#Pixel'>pixel</a>
<ahref='SkImageInfo_Reference#SkColorType'>SkColorType</a> is set to <ahref='SkImageInfo_Reference#kN32_SkColorType'>kN32_SkColorType</a>.
<ahref='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a> is set to <ahref='SkImageInfo_Reference#kPremul_SkAlphaType'>kPremul_SkAlphaType</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_width'>width</a> and <ahref='#SkCanvas_MakeRasterDirectN32_height'>height</a> are zero or positive;
<ahref='#SkCanvas_MakeRasterDirectN32_pixels'>pixels</a> is not nullptr;
<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#kN32_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 <ahref='undocumented#Size'>size</a> of <ahref='undocumented#Pixel'>pixel</a>.
If <ahref='#SkCanvas_MakeRasterDirectN32_rowBytes'>rowBytes</a> is greater than zero, it must be equal to or greater than
<ahref='#SkCanvas_MakeRasterDirectN32_width'>width</a> times bytes required for <ahref='SkImageInfo_Reference#SkColorType'>SkColorType</a>.
<ahref='undocumented#Pixel'>Pixel</a> buffer <ahref='undocumented#Size'>size</a> should be <ahref='#SkCanvas_MakeRasterDirectN32_height'>height</a> times <ahref='#SkCanvas_MakeRasterDirectN32_rowBytes'>rowBytes</a>.
<td><ahref='undocumented#Pixel'>pixel</a> column count on <ahref='undocumented#Raster_Surface'>raster surface</a> created; must be zero or greater</td>
<td>pointer to destination <ahref='#SkCanvas_MakeRasterDirectN32_pixels'>pixels</a> buffer; buffer <ahref='undocumented#Size'>size</a> should be <ahref='#SkCanvas_MakeRasterDirectN32_height'>height</a></td>
<div><fiddle-embedname="@Canvas_MakeRasterDirectN32"><div>Allocates a three by three <ahref='SkBitmap_Reference#Bitmap'>bitmap</a>, clears it to white, and draws a black <ahref='undocumented#Pixel'>pixel</a>
If <ahref='#SkCanvas_int_int_const_SkSurfaceProps_star_props'>props</a> equals nullptr, <ahref='undocumented#SkSurfaceProps'>SkSurfaceProps</a> are created with
<ahref='undocumented#SkSurfaceProps'>SkSurfaceProps</a>::<ahref='#SkSurfaceProps_InitType'>InitType</a> settings, which choose the <ahref='undocumented#Pixel'>pixel</a> striping
Constructs a <ahref='SkCanvas_Reference#Canvas'>canvas</a> that draws into <ahref='#SkCanvas_copy_const_SkBitmap_bitmap'>bitmap</a>.
Sets <ahref='undocumented#SkSurfaceProps'>SkSurfaceProps</a>::<ahref='#SkSurfaceProps_kLegacyFontHost_InitType'>kLegacyFontHost_InitType</a> in constructed <ahref='SkSurface_Reference#SkSurface'>SkSurface</a>.
<ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a> is copied so that subsequently editing <ahref='#SkCanvas_copy_const_SkBitmap_bitmap'>bitmap</a> will not affect
Constructs a <ahref='SkCanvas_Reference#Canvas'>canvas</a> that draws into <ahref='#SkCanvas_const_SkBitmap_const_SkSurfaceProps_bitmap'>bitmap</a>.
Use <ahref='#SkCanvas_const_SkBitmap_const_SkSurfaceProps_props'>props</a> to match the <ahref='undocumented#Device'>device</a> characteristics, like LCD striping.
<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
<ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> that can be used to draw into <ahref='#SkCanvas_const_SkBitmap_const_SkSurfaceProps_bitmap'>bitmap</a>
<div><fiddle-embedname="@Canvas_destructor"><div><ahref='SkCanvas_Reference#Canvas'>Canvas</a><ahref='SkCanvas_Reference#Layer'>Layer</a> draws into <ahref='SkBitmap_Reference#Bitmap'>bitmap</a>. <ahref='#SkCanvas_saveLayerAlpha'>saveLayerAlpha</a> sets up an additional
drawing <ahref='SkSurface_Reference#Surface'>surface</a> that blends with the <ahref='SkBitmap_Reference#Bitmap'>bitmap</a>. When <ahref='SkCanvas_Reference#Layer'>Layer</a> goes out of
scope, <ahref='SkCanvas_Reference#Layer'>Layer</a> destructor is called. The saved <ahref='SkCanvas_Reference#Layer'>Layer</a> is restored, drawing
Returns <ahref='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a> for <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a>. If <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> is not associated with raster <ahref='SkSurface_Reference#Surface'>surface</a> or
GPU <ahref='SkSurface_Reference#Surface'>surface</a>, returned <ahref='SkImageInfo_Reference#SkColorType'>SkColorType</a> is set to <ahref='SkImageInfo_Reference#kUnknown_SkColorType'>kUnknown_SkColorType</a>.
Copies <ahref='undocumented#SkSurfaceProps'>SkSurfaceProps</a>, if <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> is associated with <ahref='undocumented#Raster_Surface'>raster surface</a> or
<ahref='undocumented#GPU_Surface'>GPU surface</a>, and returns true. Otherwise, returns false and leave <ahref='#SkCanvas_getProps_props'>props</a> unchanged.
If <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> is associated with GPU <ahref='SkSurface_Reference#Surface'>surface</a>, resolves all pending GPU operations.
If <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> is associated with raster <ahref='SkSurface_Reference#Surface'>surface</a>, has no effect; raster draw
Gets the <ahref='undocumented#Size'>size</a> of the base or root <ahref='SkCanvas_Reference#Layer'>layer</a> in global <ahref='SkCanvas_Reference#Canvas'>canvas</a> coordinates. The
origin of the base <ahref='SkCanvas_Reference#Layer'>layer</a> is always (0,0). The area available for drawing may be
Creates <ahref='SkSurface_Reference#SkSurface'>SkSurface</a> matching <ahref='#SkCanvas_makeSurface_info'>info</a> and <ahref='#SkCanvas_makeSurface_props'>props</a>, and associates it with <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a>.
If <ahref='#SkCanvas_makeSurface_props'>props</a> is nullptr, matches <ahref='undocumented#SkSurfaceProps'>SkSurfaceProps</a> in <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a>. If <ahref='#SkCanvas_makeSurface_props'>props</a> is nullptr and <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a>
does not have <ahref='undocumented#SkSurfaceProps'>SkSurfaceProps</a>, creates <ahref='SkSurface_Reference#SkSurface'>SkSurface</a> with default <ahref='undocumented#SkSurfaceProps'>SkSurfaceProps</a>.
<ahref='SkSurface_Reference#SkSurface'>SkSurface</a> matching <ahref='#SkCanvas_makeSurface_info'>info</a> and <ahref='#SkCanvas_makeSurface_props'>props</a>, or nullptr if no match is available
Returns the <ahref='undocumented#Pixel'>pixel</a> base address, <ahref='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>, <ahref='#SkCanvas_accessTopLayerPixels_rowBytes'>rowBytes</a>, and <ahref='#SkCanvas_accessTopLayerPixels_origin'>origin</a> if the pixels
while <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> is in scope and unchanged. Any <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> call or <ahref='SkSurface_Reference#SkSurface'>SkSurface</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.
<td>storage for <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> top <ahref='SkCanvas_Reference#Layer'>layer</a><ahref='#SkCanvas_accessTopLayerPixels_origin'>origin</a>, its top-left corner;</td>
<div><fiddle-embedname="@Canvas_accessTopLayerPixels_b"><div>Draws "ABC" on the <ahref='undocumented#Device'>device</a>. Then draws "DEF" in <ahref='SkCanvas_Reference#Layer'>Layer</a>, and reads
<ahref='undocumented#SkRasterHandleAllocator'>SkRasterHandleAllocator</a>::<ahref='#SkRasterHandleAllocator_MakeCanvas'>MakeCanvas</a>, which creates a custom <ahref='SkCanvas_Reference#Canvas'>canvas</a> with raster storage for
Pixels are readable when <ahref='undocumented#SkBaseDevice'>SkBaseDevice</a> is raster. Pixels are not readable when <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a>
is returned from <ahref='undocumented#GPU_Surface'>GPU surface</a>, returned by <ahref='undocumented#SkDocument'>SkDocument</a>::<ahref='#SkDocument_beginPage'>beginPage</a>, returned by
<ahref='undocumented#SkPictureRecorder'>SkPictureRecorder</a>::<ahref='#SkPictureRecorder_beginRecording'>beginRecording</a>, or <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> is the base of a utility class
<ahref='#SkCanvas_peekPixels_pixmap'>pixmap</a> is valid only while <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> is in scope and unchanged. Any
<ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> or <ahref='SkSurface_Reference#SkSurface'>SkSurface</a> call may invalidate the <ahref='#SkCanvas_peekPixels_pixmap'>pixmap</a> values.
Copies <ahref='SkRect_Reference#Rect'>Rect</a> of pixels from <ahref='SkCanvas_Reference#Canvas'>Canvas</a> into <ahref='#SkCanvas_readPixels_dstPixels'>dstPixels</a>. <ahref='SkMatrix_Reference#Matrix'>Matrix</a> and Clip 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>().<ahref='#SkImageInfo_width'>width()</a>, <ahref='#SkCanvas_imageInfo'>imageInfo</a>().<ahref='#SkImageInfo_height'>height()</a>).
Destination <ahref='SkRect_Reference#Rect'>Rect</a> corners are (0, 0) and (<ahref='#SkCanvas_readPixels_dstInfo'>dstInfo</a>.<ahref='#SkImageInfo_width'>width()</a>, <ahref='#SkCanvas_readPixels_dstInfo'>dstInfo</a>.<ahref='#SkImageInfo_height'>height()</a>).
Copies each readable <ahref='undocumented#Pixel'>pixel</a> intersecting both rectangles, without scaling,
converting to <ahref='#SkCanvas_readPixels_dstInfo'>dstInfo</a>.<ahref='#SkImageInfo_colorType'>colorType</a>() and <ahref='#SkCanvas_readPixels_dstInfo'>dstInfo</a>.<ahref='#SkImageInfo_alphaType'>alphaType</a>() if required.
Pixels are readable when <ahref='undocumented#Device'>Device</a> is raster, or backed by a GPU.
Pixels are not readable when <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> is returned by <ahref='undocumented#SkDocument'>SkDocument</a>::<ahref='#SkDocument_beginPage'>beginPage</a>,
returned by <ahref='undocumented#SkPictureRecorder'>SkPictureRecorder</a>::<ahref='#SkPictureRecorder_beginRecording'>beginRecording</a>, or <ahref='SkCanvas_Reference#Canvas'>Canvas</a> is the base of a utility
<ahref='undocumented#Pixel'>Pixel</a> values are converted only if <ahref='#Image_Info_Color_Type'>Color_Type</a> and <ahref='#Image_Info_Alpha_Type'>Alpha_Type</a>
do not match. Only pixels within both source and destination rectangles
are copied. <ahref='#SkCanvas_readPixels_dstPixels'>dstPixels</a> contents outside <ahref='SkRect_Reference#Rect'>Rect</a> intersection are unchanged.
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='SkCanvas_Reference#Canvas'>Canvas</a> pixels could not be converted to <ahref='#SkCanvas_readPixels_dstInfo'>dstInfo</a>.<ahref='#SkImageInfo_colorType'>colorType</a>() or <ahref='#SkCanvas_readPixels_dstInfo'>dstInfo</a>.<ahref='#SkImageInfo_alphaType'>alphaType</a>().</td>
<td><ahref='SkCanvas_Reference#Canvas'>Canvas</a> pixels are not readable; for instance, <ahref='SkCanvas_Reference#Canvas'>Canvas</a> is document-based.</td>
<td>width, height, <ahref='#Image_Info_Color_Type'>Color_Type</a>, and <ahref='#Image_Info_Alpha_Type'>Alpha_Type</a> of <ahref='#SkCanvas_readPixels_dstPixels'>dstPixels</a></td>
<td>storage for pixels; <ahref='#SkCanvas_readPixels_dstInfo'>dstInfo</a>.<ahref='#SkImageInfo_height'>height()</a> times <ahref='#SkCanvas_readPixels_dstRowBytes'>dstRowBytes</a>, or larger</td>
<td><ahref='undocumented#Size'>size</a> of one destination row; <ahref='#SkCanvas_readPixels_dstInfo'>dstInfo</a>.<ahref='#SkImageInfo_width'>width()</a> times <ahref='undocumented#Pixel'>pixel</a><ahref='undocumented#Size'>size</a>, or larger</td>
<div><fiddle-embedname="@Canvas_readPixels_a"><div>A black <ahref='undocumented#Circle'>circle</a> drawn on a blue background provides an <ahref='SkImage_Reference#Image'>image</a> to copy.
<div><fiddle-embedname="@Canvas_readPixels_b"><div><ahref='SkCanvas_Reference#Canvas'>Canvas</a> returned by <ahref='#Raster_Surface'>Raster_Surface</a> has <ahref='undocumented#Premultiply'>Premultiplied</a><ahref='undocumented#Pixel'>pixel</a> values.
<ahref='#SkCanvas_clear'>clear()</a> takes <ahref='undocumented#Unpremultiply'>Unpremultiplied</a> input with <ahref='#Color_Alpha'>Color_Alpha</a> equal 0x80
and RGB equal 0x55, 0xAA, 0xFF. RGB is multiplied by <ahref='#Color_Alpha'>Color_Alpha</a>
to generate <ahref='undocumented#Premultiply'>Premultiplied</a> value 0x802B5580. <ahref='#SkCanvas_readPixels'>readPixels</a> converts <ahref='undocumented#Pixel'>pixel</a> back
to <ahref='undocumented#Unpremultiply'>Unpremultiplied</a> value 0x8056A9FF, introducing error.
bool <ahref='#SkCanvas_readPixels'>readPixels</a>(const <ahref='SkPixmap_Reference#SkPixmap'>SkPixmap</a>&<ahref='SkPixmap_Reference#Pixmap'>pixmap</a>, int srcX, int srcY)
Copies <ahref='SkRect_Reference#Rect'>Rect</a> of pixels from <ahref='SkCanvas_Reference#Canvas'>Canvas</a> into <ahref='#SkCanvas_readPixels_2_pixmap'>pixmap</a>. <ahref='SkMatrix_Reference#Matrix'>Matrix</a> and Clip 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>().<ahref='#SkImageInfo_width'>width()</a>, <ahref='#SkCanvas_imageInfo'>imageInfo</a>().<ahref='#SkImageInfo_height'>height()</a>).
Destination <ahref='SkRect_Reference#Rect'>Rect</a> corners are (0, 0) and (<ahref='#SkCanvas_readPixels_2_pixmap'>pixmap</a>.<ahref='#SkPixmap_width'>width()</a>, <ahref='#SkCanvas_readPixels_2_pixmap'>pixmap</a>.<ahref='#SkPixmap_height'>height()</a>).
Copies each readable <ahref='undocumented#Pixel'>pixel</a> intersecting both rectangles, without scaling,
converting to <ahref='#SkCanvas_readPixels_2_pixmap'>pixmap</a>.<ahref='#SkPixmap_colorType'>colorType</a>() and <ahref='#SkCanvas_readPixels_2_pixmap'>pixmap</a>.<ahref='#SkPixmap_alphaType'>alphaType</a>() if required.
Pixels are readable when <ahref='undocumented#Device'>Device</a> is raster, or backed by a GPU.
Pixels are not readable when <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> is returned by <ahref='undocumented#SkDocument'>SkDocument</a>::<ahref='#SkDocument_beginPage'>beginPage</a>,
returned by <ahref='undocumented#SkPictureRecorder'>SkPictureRecorder</a>::<ahref='#SkPictureRecorder_beginRecording'>beginRecording</a>, or <ahref='SkCanvas_Reference#Canvas'>Canvas</a> is the base of a utility
<ahref='undocumented#Pixel'>Pixel</a> values are converted only if <ahref='#Image_Info_Color_Type'>Color_Type</a> and <ahref='#Image_Info_Alpha_Type'>Alpha_Type</a>
do not match. Only pixels within both source and destination <ahref='SkRect_Reference#Rect'>Rects</a>
are copied. <ahref='SkPixmap_Reference#Pixmap_Pixels'>pixmap pixels</a> 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='SkCanvas_Reference#Canvas'>Canvas</a> pixels could not be converted to <ahref='#SkCanvas_readPixels_2_pixmap'>pixmap</a>.<ahref='#SkPixmap_colorType'>colorType</a>() or <ahref='#SkCanvas_readPixels_2_pixmap'>pixmap</a>.<ahref='#SkPixmap_alphaType'>alphaType</a>().</td>
<td><ahref='SkCanvas_Reference#Canvas'>Canvas</a> pixels are not readable; for instance, <ahref='SkCanvas_Reference#Canvas'>Canvas</a> is document-based.</td>
bool <ahref='#SkCanvas_readPixels'>readPixels</a>(const <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a>&<ahref='SkBitmap_Reference#Bitmap'>bitmap</a>, int srcX, int srcY)
Copies <ahref='SkRect_Reference#Rect'>Rect</a> of pixels from <ahref='SkCanvas_Reference#Canvas'>Canvas</a> into <ahref='#SkCanvas_readPixels_3_bitmap'>bitmap</a>. <ahref='SkMatrix_Reference#Matrix'>Matrix</a> and Clip 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>().<ahref='#SkImageInfo_width'>width()</a>, <ahref='#SkCanvas_imageInfo'>imageInfo</a>().<ahref='#SkImageInfo_height'>height()</a>).
Destination <ahref='SkRect_Reference#Rect'>Rect</a> corners are (0, 0) and (<ahref='#SkCanvas_readPixels_3_bitmap'>bitmap</a>.<ahref='#SkBitmap_width'>width()</a>, <ahref='#SkCanvas_readPixels_3_bitmap'>bitmap</a>.<ahref='#SkBitmap_height'>height()</a>).
Copies each readable <ahref='undocumented#Pixel'>pixel</a> intersecting both rectangles, without scaling,
converting to <ahref='#SkCanvas_readPixels_3_bitmap'>bitmap</a>.<ahref='#SkBitmap_colorType'>colorType</a>() and <ahref='#SkCanvas_readPixels_3_bitmap'>bitmap</a>.<ahref='#SkBitmap_alphaType'>alphaType</a>() if required.
Pixels are readable when <ahref='undocumented#Device'>Device</a> is raster, or backed by a GPU.
Pixels are not readable when <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> is returned by <ahref='undocumented#SkDocument'>SkDocument</a>::<ahref='#SkDocument_beginPage'>beginPage</a>,
returned by <ahref='undocumented#SkPictureRecorder'>SkPictureRecorder</a>::<ahref='#SkPictureRecorder_beginRecording'>beginRecording</a>, or <ahref='SkCanvas_Reference#Canvas'>Canvas</a> is the base of a utility
<ahref='SkBitmap_Reference#Bitmap'>Bitmap</a> values are converted only if <ahref='#Image_Info_Color_Type'>Color_Type</a> and <ahref='#Image_Info_Alpha_Type'>Alpha_Type</a>
do not match. Only pixels within both source and destination rectangles
are copied. <ahref='SkBitmap_Reference#Bitmap'>Bitmap</a> pixels outside <ahref='SkRect_Reference#Rect'>Rect</a> intersection are unchanged.
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='SkCanvas_Reference#Canvas'>Canvas</a> pixels could not be converted to <ahref='#SkCanvas_readPixels_3_bitmap'>bitmap</a>.<ahref='#SkBitmap_colorType'>colorType</a>() or <ahref='#SkCanvas_readPixels_3_bitmap'>bitmap</a>.<ahref='#SkBitmap_alphaType'>alphaType</a>().</td>
<td><ahref='SkCanvas_Reference#Canvas'>Canvas</a> pixels are not readable; for instance, <ahref='SkCanvas_Reference#Canvas'>Canvas</a> is document-based.</td>
Copies <ahref='SkRect_Reference#Rect'>Rect</a> from <ahref='#SkCanvas_writePixels_pixels'>pixels</a> to <ahref='SkCanvas_Reference#Canvas'>Canvas</a>. <ahref='SkMatrix_Reference#Matrix'>Matrix</a> and Clip are ignored.
Source <ahref='SkRect_Reference#Rect'>Rect</a> corners are (0, 0) and (<ahref='#SkCanvas_writePixels_info'>info</a>.<ahref='#SkImageInfo_width'>width()</a>, <ahref='#SkCanvas_writePixels_info'>info</a>.<ahref='#SkImageInfo_height'>height()</a>).
Destination <ahref='SkRect_Reference#Rect'>Rect</a> corners are (<ahref='#SkCanvas_writePixels_x'>x</a>, <ahref='#SkCanvas_writePixels_y'>y</a>) and
Copies each readable <ahref='undocumented#Pixel'>pixel</a> intersecting both rectangles, without scaling,
converting to <ahref='#SkCanvas_imageInfo'>imageInfo</a>().<ahref='#SkImageInfo_colorType'>colorType</a>() and <ahref='#SkCanvas_imageInfo'>imageInfo</a>().<ahref='#SkImageInfo_alphaType'>alphaType</a>() if required.
Pixels are writable when <ahref='undocumented#Device'>Device</a> is raster, or backed by a GPU.
Pixels are not writable when <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> is returned by <ahref='undocumented#SkDocument'>SkDocument</a>::<ahref='#SkDocument_beginPage'>beginPage</a>,
returned by <ahref='undocumented#SkPictureRecorder'>SkPictureRecorder</a>::<ahref='#SkPictureRecorder_beginRecording'>beginRecording</a>, or <ahref='SkCanvas_Reference#Canvas'>Canvas</a> is the base of a utility
<ahref='undocumented#Pixel'>Pixel</a> values are converted only if <ahref='#Image_Info_Color_Type'>Color_Type</a> and <ahref='#Image_Info_Alpha_Type'>Alpha_Type</a>
do not match. Only <ahref='#SkCanvas_writePixels_pixels'>pixels</a> within both source and destination rectangles
are copied. <ahref='SkCanvas_Reference#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='SkCanvas_Reference#Canvas'>Canvas</a><ahref='#SkCanvas_imageInfo'>imageInfo</a>().<ahref='#SkImageInfo_colorType'>colorType</a>() or
<td><ahref='SkCanvas_Reference#Canvas'>Canvas</a><ahref='#SkCanvas_writePixels_pixels'>pixels</a> are not writable; for instance, <ahref='SkCanvas_Reference#Canvas'>Canvas</a> is document-based.</td>
<td>width, height, <ahref='#Image_Info_Color_Type'>Color_Type</a>, and <ahref='#Image_Info_Alpha_Type'>Alpha_Type</a> of <ahref='#SkCanvas_writePixels_pixels'>pixels</a></td>
<td><ahref='#SkCanvas_writePixels_pixels'>pixels</a> to copy, of <ahref='undocumented#Size'>size</a><ahref='#SkCanvas_writePixels_info'>info</a>.<ahref='#SkImageInfo_height'>height()</a> times <ahref='#SkCanvas_writePixels_rowBytes'>rowBytes</a>, or larger</td>
<td><ahref='undocumented#Size'>size</a> of one row of <ahref='#SkCanvas_writePixels_pixels'>pixels</a>; <ahref='#SkCanvas_writePixels_info'>info</a>.<ahref='#SkImageInfo_width'>width()</a> times <ahref='undocumented#Pixel'>pixel</a><ahref='undocumented#Size'>size</a>, or larger</td>
<td>offset into <ahref='SkCanvas_Reference#Canvas'>Canvas</a> writable <ahref='#SkCanvas_writePixels_pixels'>pixels</a> on x-axis; may be negative</td>
<td>offset into <ahref='SkCanvas_Reference#Canvas'>Canvas</a> writable <ahref='#SkCanvas_writePixels_pixels'>pixels</a> on y-axis; may be negative</td>
bool <ahref='#SkCanvas_writePixels'>writePixels</a>(const <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a>&<ahref='SkBitmap_Reference#Bitmap'>bitmap</a>, int x, int y)
Copies <ahref='SkRect_Reference#Rect'>Rect</a> from pixels to <ahref='SkCanvas_Reference#Canvas'>Canvas</a>. <ahref='SkMatrix_Reference#Matrix'>Matrix</a> and Clip are ignored.
Source <ahref='SkRect_Reference#Rect'>Rect</a> corners are (0, 0) and (<ahref='#SkCanvas_writePixels_2_bitmap'>bitmap</a>.<ahref='#SkBitmap_width'>width()</a>, <ahref='#SkCanvas_writePixels_2_bitmap'>bitmap</a>.<ahref='#SkBitmap_height'>height()</a>).
Destination <ahref='SkRect_Reference#Rect'>Rect</a> corners are (<ahref='#SkCanvas_writePixels_2_x'>x</a>, <ahref='#SkCanvas_writePixels_2_y'>y</a>) and
Copies each readable <ahref='undocumented#Pixel'>pixel</a> intersecting both rectangles, without scaling,
converting to <ahref='#SkCanvas_imageInfo'>imageInfo</a>().<ahref='#SkImageInfo_colorType'>colorType</a>() and <ahref='#SkCanvas_imageInfo'>imageInfo</a>().<ahref='#SkImageInfo_alphaType'>alphaType</a>() if required.
Pixels are writable when <ahref='undocumented#Device'>Device</a> is raster, or backed by a GPU.
Pixels are not writable when <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> is returned by <ahref='undocumented#SkDocument'>SkDocument</a>::<ahref='#SkDocument_beginPage'>beginPage</a>,
returned by <ahref='undocumented#SkPictureRecorder'>SkPictureRecorder</a>::<ahref='#SkPictureRecorder_beginRecording'>beginRecording</a>, or <ahref='SkCanvas_Reference#Canvas'>Canvas</a> is the base of a utility
<ahref='undocumented#Pixel'>Pixel</a> values are converted only if <ahref='#Image_Info_Color_Type'>Color_Type</a> and <ahref='#Image_Info_Alpha_Type'>Alpha_Type</a>
do not match. Only pixels within both source and destination rectangles
are copied. <ahref='SkCanvas_Reference#Canvas'>Canvas</a> pixels outside <ahref='SkRect_Reference#Rect'>Rect</a> intersection are unchanged.
<td><ahref='SkBitmap_Reference#Bitmap_Pixels'>bitmap pixels</a> could not be converted to <ahref='SkCanvas_Reference#Canvas'>Canvas</a><ahref='#SkCanvas_imageInfo'>imageInfo</a>().<ahref='#SkImageInfo_colorType'>colorType</a>() or
<td><ahref='SkCanvas_Reference#Canvas'>Canvas</a> pixels are not writable; for instance, <ahref='SkCanvas_Reference#Canvas'>Canvas</a> is <ahref='undocumented#Document'>document</a> based.</td>
<td><ahref='SkBitmap_Reference#Bitmap_Pixels'>bitmap pixels</a> are inaccessible; for instance, <ahref='#SkCanvas_writePixels_2_bitmap'>bitmap</a> wraps a <ahref='undocumented#Texture'>texture</a>.</td>
<ahref='SkCanvas_Reference#Canvas'>Canvas</a> maintains a stack of state that allows hierarchical drawing, commonly used
to implement windows and views. The initial state has an identity <ahref='SkMatrix_Reference#Matrix'>matrix</a> and and
an infinite clip. Even with a wide-open clip, drawing is constrained by the
bounds of the <ahref='SkCanvas_Reference#Canvas'>Canvas</a><ahref='SkSurface_Reference#Surface'>Surface</a> or <ahref='undocumented#Device'>Device</a>.
<ahref='#SkCanvas_save'>save()</a>, <ahref='#SkCanvas_saveLayer'>saveLayer</a>, <ahref='#SkCanvas_saveLayerPreserveLCDTextRequests'>saveLayerPreserveLCDTextRequests</a>, and <ahref='#SkCanvas_saveLayerAlpha'>saveLayerAlpha</a>
<ahref='#SkCanvas_restore'>restore()</a>, <ahref='#SkCanvas_restoreToCount'>restoreToCount</a>, and <ahref='#SkCanvas_destructor'>~SkCanvas()</a> revert state to its value when saved.
<div><fiddle-embedname="@State_Stack_b"><div>While <ahref='#SkCanvas_clipRect'>clipRect</a> is given the same rectangle twice, <ahref='SkMatrix_Reference#Matrix'>Matrix</a> makes the second
<ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</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>(). Clip may be changed by <ahref='#SkCanvas_clipRect'>clipRect</a>(), <ahref='#SkCanvas_clipRRect'>clipRRect</a>(), <ahref='#SkCanvas_clipPath'>clipPath</a>(), <ahref='#SkCanvas_clipRegion'>clipRegion</a>().
Saved <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> state is put on a stack; multiple calls to <ahref='#SkCanvas_save'>save()</a> should be balance
Restoring <ahref='SkCanvas_Reference#Canvas'>Canvas</a> state removes <ahref='#SkCanvas_translate'>translate()</a> from <ahref='SkCanvas_Reference#Canvas'>Canvas</a> stack;
the red square is not translated, and is drawn at the origin.
Restores state to <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and clip 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>.
<ahref='SkCanvas_Reference#Layer'>Layer</a> is saved in a stack along with other saved state. When state with a <ahref='SkCanvas_Reference#Layer'>Layer</a>
is restored, the <ahref='SkBitmap_Reference#Bitmap'>Bitmap</a> is drawn into the previous <ahref='SkCanvas_Reference#Layer'>Layer</a>.
<ahref='SkCanvas_Reference#Layer'>Layer</a> may be initialized with the contents of the previous <ahref='SkCanvas_Reference#Layer'>Layer</a>. When <ahref='SkCanvas_Reference#Layer'>Layer</a> is
restored, its <ahref='SkBitmap_Reference#Bitmap'>Bitmap</a> can be modified by <ahref='SkPaint_Reference#Paint'>Paint</a> passed to <ahref='SkCanvas_Reference#Layer'>Layer</a> to apply
<ahref='#Color_Alpha'>Color_Alpha</a>, <ahref='#Color_Filter'>Color_Filter</a>, <ahref='#Image_Filter'>Image_Filter</a>, and <ahref='#Blend_Mode'>Blend_Mode</a>.
Saves <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and clip, and allocates a <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a> for subsequent drawing.
Calling <ahref='#SkCanvas_restore'>restore()</a> discards changes to <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and clip, and draws the <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a>.
<ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</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>(). Clip may be changed by <ahref='#SkCanvas_clipRect'>clipRect</a>(), <ahref='#SkCanvas_clipRRect'>clipRRect</a>(),
<ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_saveLayer_bounds'>bounds</a> suggests but does not define the <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a><ahref='undocumented#Size'>size</a>. To clip drawing to
<div><fiddle-embedname="@Canvas_saveLayer"><div>Rectangles are blurred by <ahref='#Image_Filter'>Image_Filter</a> when <ahref='#SkCanvas_restore'>restore()</a> draws <ahref='SkCanvas_Reference#Layer'>Layer</a> to main
Saves <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and clip, and allocates a <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a> for subsequent drawing.
Calling <ahref='#SkCanvas_restore'>restore()</a> discards changes to <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and clip, and draws the <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a>.
<ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</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>(). Clip may be changed by <ahref='#SkCanvas_clipRect'>clipRect</a>(), <ahref='#SkCanvas_clipRRect'>clipRRect</a>(),
<ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_saveLayer_2_bounds'>bounds</a> suggests but does not define the <ahref='SkCanvas_Reference#Layer'>layer</a><ahref='undocumented#Size'>size</a>. To clip drawing to
<div><fiddle-embedname="@Canvas_saveLayer_2"><div>Rectangles are blurred by <ahref='#Image_Filter'>Image_Filter</a> when <ahref='#SkCanvas_restore'>restore()</a> draws <ahref='SkCanvas_Reference#Layer'>Layer</a> to main <ahref='SkCanvas_Reference#Canvas'>Canvas</a>.
Saves <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and clip, and allocates a <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a> for subsequent drawing.
LCD <ahref='undocumented#Text'>text</a> is preserved when the <ahref='SkCanvas_Reference#Layer'>layer</a> is drawn to the prior <ahref='SkCanvas_Reference#Layer'>layer</a>.
Calling <ahref='#SkCanvas_restore'>restore()</a> discards changes to <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and clip, and draws <ahref='SkCanvas_Reference#Layer'>layer</a>.
<ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</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>(). Clip may be changed by <ahref='#SkCanvas_clipRect'>clipRect</a>(), <ahref='#SkCanvas_clipRRect'>clipRRect</a>(),
<ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_saveLayerPreserveLCDTextRequests_bounds'>bounds</a> suggests but does not define the <ahref='SkCanvas_Reference#Layer'>layer</a><ahref='undocumented#Size'>size</a>. To clip drawing to
int <ahref='#SkCanvas_saveLayerAlpha'>saveLayerAlpha</a>(const <ahref='SkRect_Reference#SkRect'>SkRect</a>* bounds, <ahref='undocumented#U8CPU'>U8CPU</a><ahref='SkColor_Reference#Alpha'>alpha</a>)
Saves <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and clip, and allocates <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a> for subsequent drawing.
Calling <ahref='#SkCanvas_restore'>restore()</a> discards changes to <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and clip,
and blends <ahref='SkCanvas_Reference#Layer'>layer</a> with <ahref='#SkCanvas_saveLayerAlpha_alpha'>alpha</a> opacity onto prior <ahref='SkCanvas_Reference#Layer'>layer</a>.
<ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</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>(). Clip may be changed by <ahref='#SkCanvas_clipRect'>clipRect</a>(), <ahref='#SkCanvas_clipRRect'>clipRRect</a>(),
<ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_saveLayerAlpha_bounds'>bounds</a> suggests but does not define <ahref='SkCanvas_Reference#Layer'>layer</a><ahref='undocumented#Size'>size</a>. To clip drawing to
<ahref='#SkCanvas_SaveLayerFlags'>SaveLayerFlags</a> provides options that may be used in any combination in <ahref='#SkCanvas_SaveLayerRec'>SaveLayerRec</a>,
defining how <ahref='SkCanvas_Reference#Layer'>Layer</a> allocated by <ahref='#SkCanvas_saveLayer'>saveLayer</a> operates. It may be set to zero,
<ahref='#SkCanvas_kPreserveLCDText_SaveLayerFlag'>kPreserveLCDText_SaveLayerFlag</a>, <ahref='#SkCanvas_kInitWithPrevious_SaveLayerFlag'>kInitWithPrevious_SaveLayerFlag</a>, or both flags.
Creates <ahref='SkCanvas_Reference#Layer'>Layer</a> for LCD <ahref='undocumented#Text'>text</a>. Flag is ignored if <ahref='SkCanvas_Reference#Layer'>Layer</a><ahref='SkPaint_Reference#Paint'>Paint</a> contains
<div><fiddle-embedname="@Canvas_kInitWithPrevious_SaveLayerFlag"><div><ahref='SkCanvas_Reference#Canvas'>Canvas</a><ahref='SkCanvas_Reference#Layer'>Layer</a> captures red and blue <ahref='undocumented#Circle'>circles</a> scaled up by four.
<ahref='#SkCanvas_SaveLayerRec'>SaveLayerRec</a> contains the state used to create the <ahref='SkCanvas_Reference#Layer'>Layer</a>.<tablestyle='border-collapse: collapse; width: 62.5em'>
<ahref='#SkCanvas_SaveLayerRec_fBounds'>fBounds</a> is used as a hint to limit the <ahref='undocumented#Size'>size</a> of <ahref='SkCanvas_Reference#Layer'>Layer</a>; may be nullptr.
<ahref='#SkCanvas_SaveLayerRec_fBounds'>fBounds</a> suggests but does not define <ahref='SkCanvas_Reference#Layer'>Layer</a><ahref='undocumented#Size'>size</a>. To clip drawing to
a specific rectangle, use <ahref='#SkCanvas_clipRect'>clipRect</a>.
<ahref='#SkCanvas_SaveLayerRec_fPaint'>fPaint</a> modifies how <ahref='SkCanvas_Reference#Layer'>Layer</a> overlays the prior <ahref='SkCanvas_Reference#Layer'>Layer</a>; may be nullptr.
<ahref='#Color_Alpha'>Color_Alpha</a>, <ahref='#Blend_Mode'>Blend_Mode</a>, <ahref='#Color_Filter'>Color_Filter</a>, <ahref='#Draw_Looper'>Draw_Looper</a>, <ahref='#Image_Filter'>Image_Filter</a>, and
<ahref='#SkCanvas_SaveLayerRec_fBackdrop'>fBackdrop</a> applies <ahref='#Image_Filter'>Image_Filter</a> to the prior <ahref='SkCanvas_Reference#Layer'>Layer</a> when copying to the <ahref='SkCanvas_Reference#Layer'>Layer</a>;
may be nullptr. Use <ahref='#SkCanvas_kInitWithPrevious_SaveLayerFlag'>kInitWithPrevious_SaveLayerFlag</a> to copy the
prior <ahref='SkCanvas_Reference#Layer'>Layer</a> without an <ahref='#Image_Filter'>Image_Filter</a>.
<ahref='#SkCanvas_restore'>restore()</a> clips <ahref='SkCanvas_Reference#Layer'>Layer</a> by the <ahref='#Color_Alpha'>Color_Alpha</a> channel of <ahref='#SkCanvas_SaveLayerRec_fClipMask'>fClipMask</a> when
<ahref='SkCanvas_Reference#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='SkCanvas_Reference#Layer'>Layer</a>. If
<ahref='#SkCanvas_SaveLayerRec_fClipMask'>fClipMask</a> describes a translucent gradient, it may be scaled and rotated
without introducing artifacts. <ahref='#SkCanvas_SaveLayerRec_fClipMatrix'>fClipMatrix</a> may be nullptr.
<ahref='#SkCanvas_SaveLayerRec_fSaveLayerFlags'>fSaveLayerFlags</a> are used to create <ahref='SkCanvas_Reference#Layer'>Layer</a> without transparency,
create <ahref='SkCanvas_Reference#Layer'>Layer</a> for LCD <ahref='undocumented#Text'>text</a>, and to create <ahref='SkCanvas_Reference#Layer'>Layer</a> with the
<div><fiddle-embedname="@Canvas_SaveLayerRec"><div><ahref='SkCanvas_Reference#Canvas'>Canvas</a><ahref='SkCanvas_Reference#Layer'>Layer</a> captures a red <ahref='#Paint_Anti_Alias'>Anti_Aliased</a><ahref='undocumented#Circle'>circle</a> and a blue <ahref='undocumented#Alias'>Aliased</a><ahref='undocumented#Circle'>circle</a> scaled
up by four. After drawing another red <ahref='undocumented#Circle'>circle</a> without scaling on top, the <ahref='SkCanvas_Reference#Layer'>Layer</a> is
transferred to the main <ahref='SkCanvas_Reference#Canvas'>canvas</a>.
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.
Saves <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and clip, and allocates <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a> for subsequent drawing.
Calling <ahref='#SkCanvas_restore'>restore()</a> discards changes to <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and clip,
and blends <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a> with <ahref='SkColor_Reference#Alpha'>alpha</a> opacity onto the prior <ahref='SkCanvas_Reference#Layer'>layer</a>.
<ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</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>(). Clip may be changed by <ahref='#SkCanvas_clipRect'>clipRect</a>(), <ahref='#SkCanvas_clipRRect'>clipRRect</a>(),
<div><fiddle-embedname="@Canvas_saveLayer_3"><div>The example draws an <ahref='SkImage_Reference#Image'>image</a>, and saves it into a <ahref='SkCanvas_Reference#Layer'>Layer</a> with <ahref='#SkCanvas_kInitWithPrevious_SaveLayerFlag'>kInitWithPrevious_SaveLayerFlag</a>.
Next it punches a hole in <ahref='SkCanvas_Reference#Layer'>Layer</a> and restore with <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<ahref='#SkBlendMode_kPlus'>kPlus</a>.
Where <ahref='SkCanvas_Reference#Layer'>Layer</a> was cleared, the original <ahref='SkImage_Reference#Image'>image</a> will draw unchanged.
Outside of the <ahref='undocumented#Circle'>circle</a> the mandrill is brightened.
Translates <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</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="@Canvas_translate"><div><ahref='#SkCanvas_scale'>scale()</a> followed by <ahref='#SkCanvas_translate'>translate()</a> produces different results from <ahref='#SkCanvas_translate'>translate()</a> followed
Scales <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> by <ahref='#SkCanvas_scale_sx'>sx</a> on the x-axis and <ahref='#SkCanvas_scale_sy'>sy</a> on the y-axis.
<div><fiddle-embedname="@Canvas_rotate"><div>Draw clock hands at time 5:10. The hour hand and minute hand <ahref='SkPoint_Reference#Point'>point</a> up and
Rotates <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> by <ahref='#SkCanvas_rotate_2_degrees'>degrees</a> about a <ahref='SkPoint_Reference#Point'>point</a> at (<ahref='#SkCanvas_rotate_2_px'>px</a>, <ahref='#SkCanvas_rotate_2_py'>py</a>). Positive <ahref='#SkCanvas_rotate_2_degrees'>degrees</a> rotates
Mathematically, constructs a rotation <ahref='SkMatrix_Reference#Matrix'>matrix</a>; <ahref='undocumented#Premultiply'>premultiplies</a> the rotation <ahref='SkMatrix_Reference#Matrix'>matrix</a> by
a translation <ahref='SkMatrix_Reference#Matrix'>matrix</a>; then replaces <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> with the resulting <ahref='SkMatrix_Reference#Matrix'>matrix</a>
<ahref='undocumented#Premultiply'>premultiplied</a> with <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>.
Skews <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</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-axis values increase; a positive value of <ahref='#SkCanvas_skew_sy'>sy</a> skews
Mathematically, replaces <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> with a skew <ahref='SkMatrix_Reference#Matrix'>matrix</a><ahref='undocumented#Premultiply'>premultiplied</a> with <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>.
<div><fiddle-embedname="@Canvas_skew"><div>Black <ahref='undocumented#Text'>text</a> mimics an oblique <ahref='undocumented#Text'>text</a> style by using a negative skew on x-axis
Replaces <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> with <ahref='#SkCanvas_concat_matrix'>matrix</a><ahref='undocumented#Premultiply'>premultiplied</a> with existing <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>.
<td><ahref='#SkCanvas_concat_matrix'>matrix</a> to <ahref='undocumented#Premultiply'>premultiply</a> with existing <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a></td>
Clip stack of <ahref='SkPath_Reference#Path'>Path</a> elements successfully restrict the <ahref='SkPath_Reference#Path'>Path</a> area. Each
<ahref='SkPath_Reference#Path'>Path</a> is transformed by <ahref='SkMatrix_Reference#Matrix'>Matrix</a>, then intersected with or subtracted from the
prior Clip to form the replacement Clip. Use <ahref='undocumented#SkClipOp'>SkClipOp</a>::<ahref='#SkClipOp_kDifference'>kDifference</a>
to subtract <ahref='SkPath_Reference#Path'>Path</a> from Clip; use <ahref='undocumented#SkClipOp'>SkClipOp</a>::<ahref='#SkClipOp_kIntersect'>kIntersect</a> to intersect <ahref='SkPath_Reference#Path'>Path</a>
A clipping <ahref='SkPath_Reference#Path'>Path</a> may be <ahref='#Paint_Anti_Alias'>Anti_Aliased</a>; if <ahref='SkPath_Reference#Path'>Path</a>, after transformation, is
composed of horizontal and vertical <ahref='undocumented#Line'>lines</a>, clearing <ahref='#Paint_Anti_Alias'>Anti_Alias</a> allows whole pixels
to either be inside or outside the clip. The fastest drawing has a <ahref='undocumented#Alias'>Aliased</a>,
If clipping <ahref='SkPath_Reference#Path'>Path</a> has <ahref='#Paint_Anti_Alias'>Anti_Alias</a> set, clip may partially clip a <ahref='undocumented#Pixel'>pixel</a>, requiring
that drawing blend partially with the destination along the edge. A rotated
rectangular <ahref='#Paint_Anti_Alias'>Anti_Aliased</a> clip looks smoother but draws slower.
Clip can combine with <ahref='SkRegion_Reference#Region'>Region</a>. <ahref='SkRegion_Reference#Region'>Region</a> is assumed to be in <ahref='undocumented#Device'>Device</a> coordinates
and is unaffected by <ahref='SkMatrix_Reference#Matrix'>Matrix</a>.
<div><fiddle-embedname="@Clip"><div>Draw a red <ahref='undocumented#Circle'>circle</a> with an <ahref='undocumented#Alias'>Aliased</a> clip and an <ahref='#Paint_Anti_Alias'>Anti_Aliased</a> clip.
with an <ahref='undocumented#Alias'>aliased</a> or <ahref='SkPaint_Reference#Anti_Alias'>anti-aliased</a> clip edge. <ahref='#SkCanvas_clipRect_rect'>rect</a> is transformed by <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>
<div><fiddle-embedname="@Canvas_clipRect_3"><div>A <ahref='undocumented#Circle'>circle</a> drawn in pieces looks uniform when drawn <ahref='undocumented#Alias'>Aliased</a>.
with an <ahref='undocumented#Alias'>aliased</a> or <ahref='SkPaint_Reference#Anti_Alias'>anti-aliased</a> clip edge. <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_FillType'>FillType</a> determines if <ahref='#SkCanvas_clipPath_path'>path</a>
describes the area inside or outside its <ahref='SkPath_Overview#Contour'>contours</a>; and if <ahref='SkPath_Overview#Contour'>path contour</a> overlaps
itself or another <ahref='SkPath_Overview#Contour'>path contour</a>, whether the overlaps form part of the area.
<ahref='#SkCanvas_clipPath_path'>path</a> is transformed by <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> before it is combined with clip.
Resulting clip is <ahref='undocumented#Alias'>aliased</a>; pixels are fully contained by the clip.
<ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_FillType'>FillType</a> determines if <ahref='#SkCanvas_clipPath_2_path'>path</a>
describes the area inside or outside its <ahref='SkPath_Overview#Contour'>contours</a>; and if <ahref='SkPath_Overview#Contour'>path contour</a> overlaps
itself or another <ahref='SkPath_Overview#Contour'>path contour</a>, whether the overlaps form part of the area.
<ahref='#SkCanvas_clipPath_2_path'>path</a> is transformed by <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>
<div><fiddle-embedname="@Canvas_clipPath_2"><div>Overlapping <ahref='SkRect_Reference#Rect'>Rects</a> form a clip. When clip <ahref='#Path_Fill_Type'>Path_Fill_Type</a> is set to
Resulting clip is <ahref='undocumented#Alias'>aliased</a>; pixels are fully contained by the clip.
<ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_FillType'>FillType</a> determines if <ahref='#SkCanvas_clipPath_3_path'>path</a>
describes the area inside or outside its <ahref='SkPath_Overview#Contour'>contours</a>; and if <ahref='SkPath_Overview#Contour'>path contour</a> overlaps
itself or another <ahref='SkPath_Overview#Contour'>path contour</a>, whether the overlaps form part of the area.
<ahref='#SkCanvas_clipPath_3_path'>path</a> is transformed by <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> before it is combined with clip.
<div><fiddle-embedname="@Canvas_clipPath_3"><div>Clip loops over itself covering its center twice. When clip <ahref='#Path_Fill_Type'>Path_Fill_Type</a>
Replaces clip with the intersection or difference of clip and <ahref='SkRegion_Reference#SkRegion'>SkRegion</a><ahref='#SkCanvas_clipRegion_deviceRgn'>deviceRgn</a>.
<div><fiddle-embedname="@Canvas_clipRegion"><div><ahref='SkRegion_Reference#Region'>region</a> is unaffected by <ahref='SkCanvas_Reference#Canvas'>canvas</a> rotation; iRect is affected by <ahref='SkCanvas_Reference#Canvas'>canvas</a> rotation.
Returns true if <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_quickReject_rect'>rect</a>, transformed by <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, can be quickly determined to be
outside of clip. May return false even though <ahref='#SkCanvas_quickReject_rect'>rect</a> is outside of clip.
Returns true if <ahref='#SkCanvas_quickReject_2_path'>path</a>, transformed by <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, can be quickly determined to be
outside of clip. May return false even though <ahref='#SkCanvas_quickReject_2_path'>path</a> is outside of clip.
Returns bounds of clip, transformed by inverse of <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>. If clip is empty,
return <ahref='SkRect_Reference#SkRect'>SkRect</a>::<ahref='#SkRect_MakeEmpty'>MakeEmpty</a>, where all <ahref='SkRect_Reference#SkRect'>SkRect</a> sides equal zero.
Returns <ahref='#SkCanvas_getLocalClipBounds_2_bounds'>bounds</a> of clip, transformed by inverse of <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>. If clip is empty,
return false, and set <ahref='#SkCanvas_getLocalClipBounds_2_bounds'>bounds</a> to <ahref='SkRect_Reference#SkRect'>SkRect</a>::<ahref='#SkRect_MakeEmpty'>MakeEmpty</a>, where all <ahref='SkRect_Reference#SkRect'>SkRect</a> sides equal zero.
<ahref='#SkCanvas_getLocalClipBounds_2_bounds'>bounds</a> is outset by one to account for partial <ahref='undocumented#Pixel'>pixel</a> coverage if clip
Returns <ahref='SkIRect_Reference#SkIRect'>SkIRect</a> bounds of clip, unaffected by <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>. If clip is empty,
return <ahref='SkRect_Reference#SkRect'>SkRect</a>::<ahref='#SkRect_MakeEmpty'>MakeEmpty</a>, where all <ahref='SkRect_Reference#SkRect'>SkRect</a> sides equal zero.
Returns <ahref='SkIRect_Reference#SkIRect'>SkIRect</a><ahref='#SkCanvas_getDeviceClipBounds_2_bounds'>bounds</a> of clip, unaffected by <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>. If clip is empty,
return false, and set <ahref='#SkCanvas_getDeviceClipBounds_2_bounds'>bounds</a> to <ahref='SkRect_Reference#SkRect'>SkRect</a>::<ahref='#SkRect_MakeEmpty'>MakeEmpty</a>, where all <ahref='SkRect_Reference#SkRect'>SkRect</a> sides equal zero.
<td><ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> used to combine source <ahref='#SkCanvas_drawColor_color'>color</a> and destination</td>
Fills clip with <ahref='#SkCanvas_clear_color'>color color</a> using <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<ahref='#SkBlendMode_kSrc'>kSrc</a>.
Makes <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> contents undefined. Subsequent calls that read <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> pixels,
such as drawing with <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, return undefined results. <ahref='#SkCanvas_discard'>discard()</a> does
<ahref='#SkCanvas_discard'>discard()</a> may do nothing, depending on the implementation of <ahref='SkSurface_Reference#SkSurface'>SkSurface</a> or <ahref='undocumented#SkBaseDevice'>SkBaseDevice</a>
<ahref='#SkCanvas_discard'>discard()</a> allows optimized performance on subsequent draws by removing
cached <ahref='undocumented#Data'>data</a> associated with <ahref='SkSurface_Reference#SkSurface'>SkSurface</a> or <ahref='undocumented#SkBaseDevice'>SkBaseDevice</a>.
It is not necessary to call <ahref='#SkCanvas_discard'>discard()</a> once done with <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a>;
any cached <ahref='undocumented#Data'>data</a> is deleted when owning <ahref='SkSurface_Reference#SkSurface'>SkSurface</a> or <ahref='undocumented#SkBaseDevice'>SkBaseDevice</a> is deleted.
Selects if an array of <ahref='SkPoint_Reference#Point'>points</a> are drawn as discrete <ahref='SkPoint_Reference#Point'>points</a>, as <ahref='undocumented#Line'>lines</a>, or as
The upper right corner shows one <ahref='undocumented#Line'>line</a>; when drawn as <ahref='undocumented#Line'>lines</a>, two <ahref='SkPoint_Reference#Point'>points</a> are required per <ahref='undocumented#Line'>line</a>.
The lower right corner shows two <ahref='undocumented#Line'>lines</a>; when draw as polygon, no miter is drawn at the corner.
The lower left corner shows two <ahref='undocumented#Line'>lines</a> with a miter when <ahref='SkPath_Reference#Path'>path</a> contains polygon.
Draws <ahref='#SkCanvas_drawPoints_pts'>pts</a> using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawPoints_paint'>paint</a>.
<ahref='#SkCanvas_drawPoints_count'>count</a> is the number of <ahref='SkPoint_Reference#Point'>points</a>; 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 <ahref='SkPoint_Reference#Point'>point</a> drawn depends on <ahref='#SkCanvas_drawPoints_paint'>paint</a>
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Cap'>Cap</a>. If <ahref='#SkCanvas_drawPoints_paint'>paint</a> is set to <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kRound_Cap'>kRound_Cap</a>, each <ahref='SkPoint_Reference#Point'>point</a> draws a
<ahref='undocumented#Circle'>circle</a> of diameter <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width. If <ahref='#SkCanvas_drawPoints_paint'>paint</a> is set to <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kSquare_Cap'>kSquare_Cap</a>
or <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kButt_Cap'>kButt_Cap</a>, each <ahref='SkPoint_Reference#Point'>point</a> draws a square of width and height
If <ahref='#SkCanvas_drawPoints_mode'>mode</a> is <ahref='#SkCanvas_kLines_PointMode'>kLines_PointMode</a>, each pair of <ahref='SkPoint_Reference#Point'>points</a> draws a <ahref='undocumented#Line'>line</a> segment.
One <ahref='undocumented#Line'>line</a> is drawn for every two <ahref='SkPoint_Reference#Point'>points</a>; each <ahref='SkPoint_Reference#Point'>point</a> is used once. If <ahref='#SkCanvas_drawPoints_count'>count</a> is odd,
the final <ahref='SkPoint_Reference#Point'>point</a> is ignored.
If <ahref='#SkCanvas_drawPoints_mode'>mode</a> is <ahref='#SkCanvas_kPolygon_PointMode'>kPolygon_PointMode</a>, each adjacent pair of <ahref='SkPoint_Reference#Point'>points</a> draws a <ahref='undocumented#Line'>line</a> segment.
<ahref='#SkCanvas_drawPoints_count'>count</a> minus one <ahref='undocumented#Line'>lines</a> are drawn; the first and last <ahref='SkPoint_Reference#Point'>point</a> are used once.
Each <ahref='undocumented#Line'>line</a> segment respects <ahref='#SkCanvas_drawPoints_paint'>paint</a><ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Cap'>Cap</a> and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width.
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Style'>Style</a> is ignored, as if were set to <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kStroke_Style'>kStroke_Style</a>.
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Join'>Join</a>, and unlike <ahref='#SkCanvas_drawPath'>drawPath</a>(), does not create a mask from all <ahref='SkPoint_Reference#Point'>points</a>
and <ahref='undocumented#Line'>lines</a> before drawing.
Draws <ahref='SkPoint_Reference#Point'>point</a> at (<ahref='#SkCanvas_drawPoint_x'>x</a>, <ahref='#SkCanvas_drawPoint_y'>y</a>) using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawPoint_paint'>paint</a>.
The shape of <ahref='SkPoint_Reference#Point'>point</a> drawn depends on <ahref='#SkCanvas_drawPoint_paint'>paint</a><ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Cap'>Cap</a>.
If <ahref='#SkCanvas_drawPoint_paint'>paint</a> is set to <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kRound_Cap'>kRound_Cap</a>, draw a <ahref='undocumented#Circle'>circle</a> of diameter
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width. If <ahref='#SkCanvas_drawPoint_paint'>paint</a> is set to <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kSquare_Cap'>kSquare_Cap</a> or <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kButt_Cap'>kButt_Cap</a>,
draw a square of width and height <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width.
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Style'>Style</a> is ignored, as if were set to <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kStroke_Style'>kStroke_Style</a>.
Draws <ahref='SkPoint_Reference#Point'>point</a><ahref='#SkCanvas_drawPoint_2_p'>p</a> using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawPoint_2_paint'>paint</a>.
The shape of <ahref='SkPoint_Reference#Point'>point</a> drawn depends on <ahref='#SkCanvas_drawPoint_2_paint'>paint</a><ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Cap'>Cap</a>.
If <ahref='#SkCanvas_drawPoint_2_paint'>paint</a> is set to <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kRound_Cap'>kRound_Cap</a>, draw a <ahref='undocumented#Circle'>circle</a> of diameter
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width. If <ahref='#SkCanvas_drawPoint_2_paint'>paint</a> is set to <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kSquare_Cap'>kSquare_Cap</a> or <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kButt_Cap'>kButt_Cap</a>,
draw a square of width and height <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width.
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Style'>Style</a> is ignored, as if were set to <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kStroke_Style'>kStroke_Style</a>.
Draws <ahref='undocumented#Line'>line</a> 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 clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawLine_paint'>paint</a>.
In <ahref='#SkCanvas_drawLine_paint'>paint</a>: <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width describes the <ahref='undocumented#Line'>line</a> thickness;
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Cap'>Cap</a> draws the end rounded or square;
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Style'>Style</a> is ignored, as if were set to <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kStroke_Style'>kStroke_Style</a>.
Draws <ahref='undocumented#Line'>line</a> segment from <ahref='#SkCanvas_drawLine_2_p0'>p0</a> to <ahref='#SkCanvas_drawLine_2_p1'>p1</a> using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawLine_2_paint'>paint</a>.
In <ahref='#SkCanvas_drawLine_2_paint'>paint</a>: <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width describes the <ahref='undocumented#Line'>line</a> thickness;
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Cap'>Cap</a> draws the end rounded or square;
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Style'>Style</a> is ignored, as if were set to <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kStroke_Style'>kStroke_Style</a>.
Draws <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawRect_rect'>rect</a> using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawRect_paint'>paint</a>.
In <ahref='#SkCanvas_drawRect_paint'>paint</a>: <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Style'>Style</a> determines if rectangle is stroked or filled;
if stroked, <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width describes the <ahref='undocumented#Line'>line</a> thickness, and
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Join'>Join</a> draws the corners rounded or square.
Draws <ahref='SkIRect_Reference#SkIRect'>SkIRect</a><ahref='#SkCanvas_drawIRect_rect'>rect</a> using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawIRect_paint'>paint</a>.
In <ahref='#SkCanvas_drawIRect_paint'>paint</a>: <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Style'>Style</a> determines if rectangle is stroked or filled;
if stroked, <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width describes the <ahref='undocumented#Line'>line</a> thickness, and
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Join'>Join</a> draws the corners rounded or square.
Draws <ahref='SkRegion_Reference#SkRegion'>SkRegion</a><ahref='#SkCanvas_drawRegion_region'>region</a> using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawRegion_paint'>paint</a>.
In <ahref='#SkCanvas_drawRegion_paint'>paint</a>: <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Style'>Style</a> determines if rectangle is stroked or filled;
if stroked, <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width describes the <ahref='undocumented#Line'>line</a> thickness, and
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Join'>Join</a> draws the corners rounded or square.
Draws <ahref='#SkCanvas_drawOval_oval'>oval</a><ahref='#SkCanvas_drawOval_oval'>oval</a> using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>.
In <ahref='#SkCanvas_drawOval_paint'>paint</a>: <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Style'>Style</a> determines if <ahref='#SkCanvas_drawOval_oval'>oval</a> is stroked or filled;
if stroked, <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width describes the <ahref='undocumented#Line'>line</a> thickness.
Draws <ahref='SkRRect_Reference#SkRRect'>SkRRect</a><ahref='#SkCanvas_drawRRect_rrect'>rrect</a> using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawRRect_paint'>paint</a>.
In <ahref='#SkCanvas_drawRRect_paint'>paint</a>: <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Style'>Style</a> determines if <ahref='#SkCanvas_drawRRect_rrect'>rrect</a> is stroked or filled;
if stroked, <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width describes the <ahref='undocumented#Line'>line</a> thickness.
<ahref='#SkCanvas_drawRRect_rrect'>rrect</a> may represent a rectangle, <ahref='undocumented#Circle'>circle</a>, <ahref='undocumented#Oval'>oval</a>, uniformly rounded rectangle, or
Draws <ahref='SkRRect_Reference#SkRRect'>SkRRect</a><ahref='#SkCanvas_drawDRRect_outer'>outer</a> and <ahref='#SkCanvas_drawDRRect_inner'>inner</a>
using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawDRRect_paint'>paint</a>.
<ahref='#SkCanvas_drawDRRect_outer'>outer</a> must contain <ahref='#SkCanvas_drawDRRect_inner'>inner</a> or the drawing is undefined.
In <ahref='#SkCanvas_drawDRRect_paint'>paint</a>: <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Style'>Style</a> determines if <ahref='SkRRect_Reference#SkRRect'>SkRRect</a> is stroked or filled;
if stroked, <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width describes the <ahref='undocumented#Line'>line</a> thickness.
If stroked and <ahref='SkRRect_Reference#SkRRect'>SkRRect</a> corner has zero length radii, <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Join'>Join</a> can
GPU-backed platforms optimize drawing when both <ahref='#SkCanvas_drawDRRect_outer'>outer</a> and <ahref='#SkCanvas_drawDRRect_inner'>inner</a> are
concave and <ahref='#SkCanvas_drawDRRect_outer'>outer</a> contains <ahref='#SkCanvas_drawDRRect_inner'>inner</a>. These platforms may not be able to draw
<ahref='SkPath_Reference#SkPath'>SkPath</a> built with identical <ahref='undocumented#Data'>data</a> as fast.
Draws <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 clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawCircle_paint'>paint</a>.
If <ahref='#SkCanvas_drawCircle_radius'>radius</a> is zero or less, nothing is drawn.
In <ahref='#SkCanvas_drawCircle_paint'>paint</a>: <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Style'>Style</a> determines if <ahref='undocumented#Circle'>circle</a> is stroked or filled;
if stroked, <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width describes the <ahref='undocumented#Line'>line</a> thickness.
Draws <ahref='undocumented#Circle'>circle</a> at <ahref='#SkCanvas_drawCircle_2_center'>center</a> with <ahref='#SkCanvas_drawCircle_2_radius'>radius</a> using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawCircle_2_paint'>paint</a>.
If <ahref='#SkCanvas_drawCircle_2_radius'>radius</a> is zero or less, nothing is drawn.
In <ahref='#SkCanvas_drawCircle_2_paint'>paint</a>: <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Style'>Style</a> determines if <ahref='undocumented#Circle'>circle</a> is stroked or filled;
if stroked, <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width describes the <ahref='undocumented#Line'>line</a> thickness.
Draws <ahref='undocumented#Arc'>arc</a> using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawArc_paint'>paint</a>.
<ahref='undocumented#Arc'>Arc</a> is part of <ahref='#SkCanvas_drawArc_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 <ahref='SkPoint_Reference#Point'>point</a> 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 <ahref='SkPoint_Reference#Point'>point</a> clockwise from start <ahref='SkPoint_Reference#Point'>point</a>;
a negative <ahref='#SkCanvas_drawArc_sweepAngle'>sweepAngle</a> places <ahref='undocumented#Arc'>arc</a> end <ahref='SkPoint_Reference#Point'>point</a> counterclockwise from start <ahref='SkPoint_Reference#Point'>point</a>.
<ahref='#SkCanvas_drawArc_sweepAngle'>sweepAngle</a> may exceed 360 degrees, a full <ahref='undocumented#Circle'>circle</a>.
If <ahref='#SkCanvas_drawArc_useCenter'>useCenter</a> is true, draw a wedge that includes <ahref='undocumented#Line'>lines</a> from <ahref='#SkCanvas_drawArc_oval'>oval</a>
center to <ahref='undocumented#Arc'>arc</a> end <ahref='SkPoint_Reference#Point'>points</a>. If <ahref='#SkCanvas_drawArc_useCenter'>useCenter</a> is false, draw <ahref='undocumented#Arc'>arc</a> between end <ahref='SkPoint_Reference#Point'>points</a>.
If <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawArc_oval'>oval</a> is empty or <ahref='#SkCanvas_drawArc_sweepAngle'>sweepAngle</a> is zero, nothing is drawn.
<td><ahref='SkRect_Reference#SkRect'>SkRect</a> bounds of <ahref='#SkCanvas_drawArc_oval'>oval</a> containing <ahref='undocumented#Arc'>arc</a> to draw</td>
Draws <ahref='SkRRect_Reference#SkRRect'>SkRRect</a> bounded by <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawRoundRect_rect'>rect</a>, with corner radii (<ahref='#SkCanvas_drawRoundRect_rx'>rx</a>, <ahref='#SkCanvas_drawRoundRect_ry'>ry</a>) using clip,
<ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawRoundRect_paint'>paint</a>.
In <ahref='#SkCanvas_drawRoundRect_paint'>paint</a>: <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Style'>Style</a> determines if <ahref='SkRRect_Reference#SkRRect'>SkRRect</a> is stroked or filled;
if stroked, <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width describes the <ahref='undocumented#Line'>line</a> 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='SkRRect_Reference#SkRRect'>SkRRect</a> is drawn as <ahref='SkRect_Reference#SkRect'>SkRect</a> and if stroked is affected by
Draws <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='#SkCanvas_drawPath_path'>path</a> using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawPath_paint'>paint</a>.
<ahref='SkPath_Reference#SkPath'>SkPath</a> contains an array of <ahref='SkPath_Overview#Contour'>path contour</a>, each of which may be open or closed.
In <ahref='#SkCanvas_drawPath_paint'>paint</a>: <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Style'>Style</a> determines if <ahref='SkRRect_Reference#SkRRect'>SkRRect</a> is stroked or filled:
if filled, <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_FillType'>FillType</a> determines whether <ahref='SkPath_Overview#Contour'>path contour</a> describes inside or
outside of fill; if stroked, <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> stroke width describes the <ahref='undocumented#Line'>line</a> thickness,
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Cap'>Cap</a> describes <ahref='undocumented#Line'>line</a> ends, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Join'>Join</a> describes how
<div><fiddle-embedname="@Canvas_drawPath"><div>Top rows draw stroked <ahref='#SkCanvas_drawPath_path'>path</a> with combinations of joins and caps. The open <ahref='SkPath_Overview#Contour'>contour</a>
<ahref='#SkCanvas_drawImage'>drawImage</a>, <ahref='#SkCanvas_drawImageRect'>drawImageRect</a>, and <ahref='#SkCanvas_drawImageNine'>drawImageNine</a> can be called with a bare pointer or
a <ahref='undocumented#Smart_Pointer'>smart pointer</a> as a convenience. The pairs of calls are otherwise identical.
Draws <ahref='SkImage_Reference#SkImage'>SkImage</a><ahref='#SkCanvas_drawImage_image'>image</a>, with its top-left corner at (<ahref='#SkCanvas_drawImage_left'>left</a>, <ahref='#SkCanvas_drawImage_top'>top</a>),
using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and optional <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawImage_paint'>paint</a>.
If <ahref='#SkCanvas_drawImage_paint'>paint</a> is supplied, apply <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>,
and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>. If <ahref='#SkCanvas_drawImage_image'>image</a> is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#SkShader'>SkShader</a>.
If <ahref='#SkCanvas_drawImage_paint'>paint</a> contains <ahref='undocumented#SkMaskFilter'>SkMaskFilter</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#SkShader'>SkShader</a>
made from <ahref='SkImage_Reference#SkImage'>SkImage</a>::<ahref='#SkImage_makeShader'>makeShader</a> with <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set replicates the
<ahref='#SkCanvas_drawImage_image'>image</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples outside of its bounds.
Draws <ahref='SkImage_Reference#SkImage'>SkImage</a><ahref='#SkCanvas_drawImage_2_image'>image</a>, with its top-left corner at (<ahref='#SkCanvas_drawImage_2_left'>left</a>, <ahref='#SkCanvas_drawImage_2_top'>top</a>),
using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and optional <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawImage_2_paint'>paint</a>.
If <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawImage_2_paint'>paint</a> is supplied, apply <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>,
<ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>. If <ahref='#SkCanvas_drawImage_2_image'>image</a> is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#SkShader'>SkShader</a>.
If <ahref='#SkCanvas_drawImage_2_paint'>paint</a> contains <ahref='undocumented#SkMaskFilter'>SkMaskFilter</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#SkShader'>SkShader</a>
made from <ahref='SkImage_Reference#SkImage'>SkImage</a>::<ahref='#SkImage_makeShader'>makeShader</a> with <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set replicates the
<ahref='#SkCanvas_drawImage_2_image'>image</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples outside of its bounds.
<ahref='#Image_Filter'>Image_Filter</a> in <ahref='SkPaint_Reference#Paint'>Paint</a> may sample multiple pixels in the <ahref='SkImage_Reference#Image'>image</a>. Source <ahref='SkRect_Reference#Rect'>Rect</a>
restricts the bounds of pixels that may be read. <ahref='#Image_Filter'>Image_Filter</a> may slow down if
it cannot read outside the bounds, when sampling near the edge of source <ahref='SkRect_Reference#Rect'>Rect</a>.
<ahref='#SkCanvas_SrcRectConstraint'>SrcRectConstraint</a> specifies whether an <ahref='#Image_Filter'>Image_Filter</a> is allowed to read pixels
Draws <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawImageRect_src'>src</a> of <ahref='SkImage_Reference#SkImage'>SkImage</a><ahref='#SkCanvas_drawImageRect_image'>image</a>, scaled and translated to fill <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawImageRect_dst'>dst</a>.
Additionally transform draw using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and optional <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawImageRect_paint'>paint</a>.
If <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawImageRect_paint'>paint</a> is supplied, apply <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>,
<ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>. If <ahref='#SkCanvas_drawImageRect_image'>image</a> is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#SkShader'>SkShader</a>.
If <ahref='#SkCanvas_drawImageRect_paint'>paint</a> contains <ahref='undocumented#SkMaskFilter'>SkMaskFilter</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#SkShader'>SkShader</a> made from <ahref='SkImage_Reference#SkImage'>SkImage</a>::<ahref='#SkImage_makeShader'>makeShader</a> with <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set
replicates the <ahref='#SkCanvas_drawImageRect_image'>image</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples outside of its bounds.
<ahref='#SkCanvas_drawImageRect_constraint'>constraint</a> set to <ahref='#SkCanvas_kStrict_SrcRectConstraint'>kStrict_SrcRectConstraint</a> limits <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='undocumented#SkFilterQuality'>SkFilterQuality</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="@Canvas_drawImageRect"><div>The left <ahref='SkBitmap_Reference#Bitmap'>bitmap</a> draws with <ahref='SkPaint_Reference#Paint'>Paint</a> default <ahref='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, and stays within
its bounds; there is no bleeding with <ahref='#SkCanvas_kFast_SrcRectConstraint'>kFast_SrcRectConstraint</a>.
the middle and right <ahref='SkBitmap_Reference#Bitmap'>bitmaps</a> draw with <ahref='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>; with
<ahref='#SkCanvas_kStrict_SrcRectConstraint'>kStrict_SrcRectConstraint</a>, the filter remains within the checkerboard, and
with <ahref='#SkCanvas_kFast_SrcRectConstraint'>kFast_SrcRectConstraint</a> red bleeds on the edges.
Draws <ahref='SkIRect_Reference#SkIRect'>SkIRect</a><ahref='#SkCanvas_drawImageRect_2_isrc'>isrc</a> of <ahref='SkImage_Reference#SkImage'>SkImage</a><ahref='#SkCanvas_drawImageRect_2_image'>image</a>, scaled and translated to fill <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawImageRect_2_dst'>dst</a>.
Note that <ahref='#SkCanvas_drawImageRect_2_isrc'>isrc</a> is on integer <ahref='undocumented#Pixel'>pixel</a> boundaries; <ahref='#SkCanvas_drawImageRect_2_dst'>dst</a> may include fractional
boundaries. Additionally transform draw using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and optional <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>
If <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawImageRect_2_paint'>paint</a> is supplied, apply <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>,
<ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>. If <ahref='#SkCanvas_drawImageRect_2_image'>image</a> is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#SkShader'>SkShader</a>.
If <ahref='#SkCanvas_drawImageRect_2_paint'>paint</a> contains <ahref='undocumented#SkMaskFilter'>SkMaskFilter</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#SkShader'>SkShader</a> made from <ahref='SkImage_Reference#SkImage'>SkImage</a>::<ahref='#SkImage_makeShader'>makeShader</a> with <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set
replicates the <ahref='#SkCanvas_drawImageRect_2_image'>image</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples outside of its bounds.
<ahref='#SkCanvas_drawImageRect_2_constraint'>constraint</a> set to <ahref='#SkCanvas_kStrict_SrcRectConstraint'>kStrict_SrcRectConstraint</a> limits <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='undocumented#SkFilterQuality'>SkFilterQuality</a> to
sample within <ahref='#SkCanvas_drawImageRect_2_isrc'>isrc</a>; set to <ahref='#SkCanvas_kFast_SrcRectConstraint'>kFast_SrcRectConstraint</a> allows sampling outside to
Draws <ahref='SkImage_Reference#SkImage'>SkImage</a><ahref='#SkCanvas_drawImageRect_3_image'>image</a>, scaled and translated to fill <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawImageRect_3_dst'>dst</a>, using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>,
If <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawImageRect_3_paint'>paint</a> is supplied, apply <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>,
<ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>. If <ahref='#SkCanvas_drawImageRect_3_image'>image</a> is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#SkShader'>SkShader</a>.
If <ahref='#SkCanvas_drawImageRect_3_paint'>paint</a> contains <ahref='undocumented#SkMaskFilter'>SkMaskFilter</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#SkShader'>SkShader</a> made from <ahref='SkImage_Reference#SkImage'>SkImage</a>::<ahref='#SkImage_makeShader'>makeShader</a> with <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set
replicates the <ahref='#SkCanvas_drawImageRect_3_image'>image</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples outside of its bounds.
Draws <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawImageRect_4_src'>src</a> of <ahref='SkImage_Reference#SkImage'>SkImage</a><ahref='#SkCanvas_drawImageRect_4_image'>image</a>, scaled and translated to fill <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawImageRect_4_dst'>dst</a>.
Additionally transform draw using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and optional <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawImageRect_4_paint'>paint</a>.
If <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawImageRect_4_paint'>paint</a> is supplied, apply <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>,
<ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>. If <ahref='#SkCanvas_drawImageRect_4_image'>image</a> is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#SkShader'>SkShader</a>.
If <ahref='#SkCanvas_drawImageRect_4_paint'>paint</a> contains <ahref='undocumented#SkMaskFilter'>SkMaskFilter</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#SkShader'>SkShader</a> made from <ahref='SkImage_Reference#SkImage'>SkImage</a>::<ahref='#SkImage_makeShader'>makeShader</a> with <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set
replicates the <ahref='#SkCanvas_drawImageRect_4_image'>image</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples outside of its bounds.
<div><fiddle-embedname="@Canvas_drawImageRect_4"><div><ahref='SkCanvas_Reference#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.
Draws <ahref='SkIRect_Reference#SkIRect'>SkIRect</a><ahref='#SkCanvas_drawImageRect_5_isrc'>isrc</a> of <ahref='SkImage_Reference#SkImage'>SkImage</a><ahref='#SkCanvas_drawImageRect_5_image'>image</a>, scaled and translated to fill <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawImageRect_5_dst'>dst</a>.
<ahref='#SkCanvas_drawImageRect_5_isrc'>isrc</a> is on integer <ahref='undocumented#Pixel'>pixel</a> boundaries; <ahref='#SkCanvas_drawImageRect_5_dst'>dst</a> may include fractional boundaries.
Additionally transform draw using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and optional <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawImageRect_5_paint'>paint</a>.
If <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawImageRect_5_paint'>paint</a> is supplied, apply <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>,
<ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>. If <ahref='#SkCanvas_drawImageRect_5_image'>image</a> is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#SkShader'>SkShader</a>.
If <ahref='#SkCanvas_drawImageRect_5_paint'>paint</a> contains <ahref='undocumented#SkMaskFilter'>SkMaskFilter</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#SkShader'>SkShader</a> made from <ahref='SkImage_Reference#SkImage'>SkImage</a>::<ahref='#SkImage_makeShader'>makeShader</a> with <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set
replicates the <ahref='#SkCanvas_drawImageRect_5_image'>image</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples outside of its bounds.
<ahref='#SkCanvas_drawImageRect_5_constraint'>constraint</a> set to <ahref='#SkCanvas_kStrict_SrcRectConstraint'>kStrict_SrcRectConstraint</a> limits <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='undocumented#SkFilterQuality'>SkFilterQuality</a> to
sample within <ahref='#SkCanvas_drawImageRect_5_image'>image</a>; set to <ahref='#SkCanvas_kFast_SrcRectConstraint'>kFast_SrcRectConstraint</a> allows sampling outside to
Draws <ahref='SkImage_Reference#SkImage'>SkImage</a><ahref='#SkCanvas_drawImageRect_6_image'>image</a>, scaled and translated to fill <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawImageRect_6_dst'>dst</a>,
using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and optional <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawImageRect_6_paint'>paint</a>.
If <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawImageRect_6_paint'>paint</a> is supplied, apply <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>,
<ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>. If <ahref='#SkCanvas_drawImageRect_6_image'>image</a> is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#SkShader'>SkShader</a>.
If <ahref='#SkCanvas_drawImageRect_6_paint'>paint</a> contains <ahref='undocumented#SkMaskFilter'>SkMaskFilter</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#SkShader'>SkShader</a> made from <ahref='SkImage_Reference#SkImage'>SkImage</a>::<ahref='#SkImage_makeShader'>makeShader</a> with <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set
replicates the <ahref='#SkCanvas_drawImageRect_6_image'>image</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples outside of its bounds.
constraint set to <ahref='#SkCanvas_kStrict_SrcRectConstraint'>kStrict_SrcRectConstraint</a> limits <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='undocumented#SkFilterQuality'>SkFilterQuality</a> to
sample within <ahref='#SkCanvas_drawImageRect_6_image'>image</a>; set to <ahref='#SkCanvas_kFast_SrcRectConstraint'>kFast_SrcRectConstraint</a> allows sampling outside to
Draws <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
the <ahref='#SkCanvas_drawImageNine_center'>center</a>. Corners are unmodified or scaled down proportionately if their sides
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 Clip, <ahref='SkMatrix_Reference#Matrix'>Matrix</a>, and optional <ahref='SkPaint_Reference#Paint'>Paint</a><ahref='#SkCanvas_drawImageNine_paint'>paint</a>.
If <ahref='SkPaint_Reference#Paint'>Paint</a><ahref='#SkCanvas_drawImageNine_paint'>paint</a> is supplied, apply <ahref='#Color_Filter'>Color_Filter</a>, <ahref='#Color_Alpha'>Color_Alpha</a>, <ahref='#Image_Filter'>Image_Filter</a>,
<ahref='#Blend_Mode'>Blend_Mode</a>, and <ahref='#Draw_Looper'>Draw_Looper</a>. If image is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#Shader'>Shader</a>.
If <ahref='#SkCanvas_drawImageNine_paint'>paint</a> contains <ahref='#Mask_Filter'>Mask_Filter</a>, generate mask from image bounds. If <ahref='#SkCanvas_drawImageNine_paint'>paint</a>
<ahref='#Filter_Quality'>Filter_Quality</a> set to <ahref='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, disable <ahref='undocumented#Pixel'>pixel</a> filtering. For all
other values of <ahref='#SkCanvas_drawImageNine_paint'>paint</a><ahref='#Filter_Quality'>Filter_Quality</a>, use <ahref='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a> to filter pixels.
Any <ahref='undocumented#SkMaskFilter'>SkMaskFilter</a> on <ahref='#SkCanvas_drawImageNine_paint'>paint</a> is ignored as is <ahref='#SkCanvas_drawImageNine_paint'>paint</a><ahref='#Paint_Anti_Alias'>Anti_Aliasing</a> state.
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_Reference#SkImage'>SkImage</a>::<ahref='#SkImage_makeShader'>makeShader</a> with <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set
replicates the <ahref='#SkCanvas_drawImageNine_image'>image</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples outside of its bounds.
<div><fiddle-embedname="@Canvas_drawImageNine"><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 <ahref='undocumented#Size'>size</a> 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.
Draws <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
the <ahref='#SkCanvas_drawImageNine_2_center'>center</a>. Corners are not scaled, or scaled down proportionately if their sides
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 Clip, <ahref='SkMatrix_Reference#Matrix'>Matrix</a>, and optional <ahref='SkPaint_Reference#Paint'>Paint</a><ahref='#SkCanvas_drawImageNine_2_paint'>paint</a>.
If <ahref='SkPaint_Reference#Paint'>Paint</a><ahref='#SkCanvas_drawImageNine_2_paint'>paint</a> is supplied, apply <ahref='#Color_Filter'>Color_Filter</a>, <ahref='#Color_Alpha'>Color_Alpha</a>, <ahref='#Image_Filter'>Image_Filter</a>,
<ahref='#Blend_Mode'>Blend_Mode</a>, and <ahref='#Draw_Looper'>Draw_Looper</a>. If image is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#Shader'>Shader</a>.
If <ahref='#SkCanvas_drawImageNine_2_paint'>paint</a> contains <ahref='#Mask_Filter'>Mask_Filter</a>, generate mask from image bounds. If <ahref='#SkCanvas_drawImageNine_2_paint'>paint</a>
<ahref='#Filter_Quality'>Filter_Quality</a> set to <ahref='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, disable <ahref='undocumented#Pixel'>pixel</a> filtering. For all
other values of <ahref='#SkCanvas_drawImageNine_2_paint'>paint</a><ahref='#Filter_Quality'>Filter_Quality</a>, use <ahref='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a> to filter pixels.
Any <ahref='undocumented#SkMaskFilter'>SkMaskFilter</a> on <ahref='#SkCanvas_drawImageNine_2_paint'>paint</a> is ignored as is <ahref='#SkCanvas_drawImageNine_2_paint'>paint</a><ahref='#Paint_Anti_Alias'>Anti_Aliasing</a> state.
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_Reference#SkImage'>SkImage</a>::<ahref='#SkImage_makeShader'>makeShader</a> with <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set
replicates the <ahref='#SkCanvas_drawImageNine_2_image'>image</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples outside of its bounds.
<div><fiddle-embedname="@Canvas_drawImageNine_2"><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
fill the remaining space.
The rightmost <ahref='#SkCanvas_drawImageNine_2_image'>image</a> has four corners scaled vertically to fit, and uses sides above
and below <ahref='#SkCanvas_drawImageNine_2_center'>center</a> to fill the remaining space.
Draws <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a><ahref='#SkCanvas_drawBitmap_bitmap'>bitmap</a>, with its top-left corner at (<ahref='#SkCanvas_drawBitmap_left'>left</a>, <ahref='#SkCanvas_drawBitmap_top'>top</a>),
using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and optional <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawBitmap_paint'>paint</a>.
If <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawBitmap_paint'>paint</a> is not nullptr, apply <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>,
<ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>. If <ahref='#SkCanvas_drawBitmap_bitmap'>bitmap</a> is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#SkShader'>SkShader</a>.
If <ahref='#SkCanvas_drawBitmap_paint'>paint</a> contains <ahref='undocumented#SkMaskFilter'>SkMaskFilter</a>, generate mask from <ahref='#SkCanvas_drawBitmap_bitmap'>bitmap</a> bounds.
just as <ahref='undocumented#SkShader'>SkShader</a> made from <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_MakeBitmapShader'>MakeBitmapShader</a> with
<ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set replicates the <ahref='#SkCanvas_drawBitmap_bitmap'>bitmap</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples
Draws <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawBitmapRect_src'>src</a> of <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a><ahref='#SkCanvas_drawBitmapRect_bitmap'>bitmap</a>, scaled and translated to fill <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawBitmapRect_dst'>dst</a>.
Additionally transform draw using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and optional <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawBitmapRect_paint'>paint</a>.
If <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawBitmapRect_paint'>paint</a> is supplied, apply <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>,
<ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>. If <ahref='#SkCanvas_drawBitmapRect_bitmap'>bitmap</a> is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#SkShader'>SkShader</a>.
If <ahref='#SkCanvas_drawBitmapRect_paint'>paint</a> contains <ahref='undocumented#SkMaskFilter'>SkMaskFilter</a>, generate mask from <ahref='#SkCanvas_drawBitmapRect_bitmap'>bitmap</a> bounds.
just as <ahref='undocumented#SkShader'>SkShader</a> made from <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_MakeBitmapShader'>MakeBitmapShader</a> with
<ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set replicates the <ahref='#SkCanvas_drawBitmapRect_bitmap'>bitmap</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples
<ahref='#SkCanvas_drawBitmapRect_constraint'>constraint</a> set to <ahref='#SkCanvas_kStrict_SrcRectConstraint'>kStrict_SrcRectConstraint</a> limits <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='undocumented#SkFilterQuality'>SkFilterQuality</a> to
sample within <ahref='#SkCanvas_drawBitmapRect_src'>src</a>; set to <ahref='#SkCanvas_kFast_SrcRectConstraint'>kFast_SrcRectConstraint</a> allows sampling outside to
Draws <ahref='SkIRect_Reference#SkIRect'>SkIRect</a><ahref='#SkCanvas_drawBitmapRect_2_isrc'>isrc</a> of <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a><ahref='#SkCanvas_drawBitmapRect_2_bitmap'>bitmap</a>, scaled and translated to fill <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawBitmapRect_2_dst'>dst</a>.
<ahref='#SkCanvas_drawBitmapRect_2_isrc'>isrc</a> is on integer <ahref='undocumented#Pixel'>pixel</a> boundaries; <ahref='#SkCanvas_drawBitmapRect_2_dst'>dst</a> may include fractional boundaries.
Additionally transform draw using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and optional <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawBitmapRect_2_paint'>paint</a>.
If <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawBitmapRect_2_paint'>paint</a> is supplied, apply <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>,
<ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>. If <ahref='#SkCanvas_drawBitmapRect_2_bitmap'>bitmap</a> is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#SkShader'>SkShader</a>.
If <ahref='#SkCanvas_drawBitmapRect_2_paint'>paint</a> contains <ahref='undocumented#SkMaskFilter'>SkMaskFilter</a>, generate mask from <ahref='#SkCanvas_drawBitmapRect_2_bitmap'>bitmap</a> bounds.
just as <ahref='undocumented#SkShader'>SkShader</a> made from <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_MakeBitmapShader'>MakeBitmapShader</a> with
<ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set replicates the <ahref='#SkCanvas_drawBitmapRect_2_bitmap'>bitmap</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples
<ahref='#SkCanvas_drawBitmapRect_2_constraint'>constraint</a> set to <ahref='#SkCanvas_kStrict_SrcRectConstraint'>kStrict_SrcRectConstraint</a> limits <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='undocumented#SkFilterQuality'>SkFilterQuality</a> to
sample within <ahref='#SkCanvas_drawBitmapRect_2_isrc'>isrc</a>; set to <ahref='#SkCanvas_kFast_SrcRectConstraint'>kFast_SrcRectConstraint</a> allows sampling outside to
Draws <ahref='SkBitmap_Reference#SkBitmap'>SkBitmap</a><ahref='#SkCanvas_drawBitmapRect_3_bitmap'>bitmap</a>, scaled and translated to fill <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawBitmapRect_3_dst'>dst</a>.
<ahref='#SkCanvas_drawBitmapRect_3_bitmap'>bitmap</a> bounds is on integer <ahref='undocumented#Pixel'>pixel</a> boundaries; <ahref='#SkCanvas_drawBitmapRect_3_dst'>dst</a> may include fractional boundaries.
Additionally transform draw using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and optional <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawBitmapRect_3_paint'>paint</a>.
If <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawBitmapRect_3_paint'>paint</a> is supplied, apply <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>,
<ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>. If <ahref='#SkCanvas_drawBitmapRect_3_bitmap'>bitmap</a> is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#SkShader'>SkShader</a>.
If <ahref='#SkCanvas_drawBitmapRect_3_paint'>paint</a> contains <ahref='undocumented#SkMaskFilter'>SkMaskFilter</a>, generate mask from <ahref='#SkCanvas_drawBitmapRect_3_bitmap'>bitmap</a> bounds.
just as <ahref='undocumented#SkShader'>SkShader</a> made from <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_MakeBitmapShader'>MakeBitmapShader</a> with
<ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set replicates the <ahref='#SkCanvas_drawBitmapRect_3_bitmap'>bitmap</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples
<ahref='#SkCanvas_drawBitmapRect_3_constraint'>constraint</a> set to <ahref='#SkCanvas_kStrict_SrcRectConstraint'>kStrict_SrcRectConstraint</a> limits <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='undocumented#SkFilterQuality'>SkFilterQuality</a> to
sample within <ahref='#SkCanvas_drawBitmapRect_3_bitmap'>bitmap</a>; set to <ahref='#SkCanvas_kFast_SrcRectConstraint'>kFast_SrcRectConstraint</a> allows sampling outside to
Draws <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,
and the <ahref='#SkCanvas_drawBitmapNine_center'>center</a>. Corners are not scaled, or scaled down proportionately if their
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 Clip, <ahref='SkMatrix_Reference#Matrix'>Matrix</a>, and optional <ahref='SkPaint_Reference#Paint'>Paint</a><ahref='#SkCanvas_drawBitmapNine_paint'>paint</a>.
If <ahref='SkPaint_Reference#Paint'>Paint</a><ahref='#SkCanvas_drawBitmapNine_paint'>paint</a> is supplied, apply <ahref='#Color_Filter'>Color_Filter</a>, <ahref='#Color_Alpha'>Color_Alpha</a>, <ahref='#Image_Filter'>Image_Filter</a>,
<ahref='#Blend_Mode'>Blend_Mode</a>, and <ahref='#Draw_Looper'>Draw_Looper</a>. If bitmap is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#Shader'>Shader</a>.
If <ahref='#SkCanvas_drawBitmapNine_paint'>paint</a> contains <ahref='#Mask_Filter'>Mask_Filter</a>, generate mask from bitmap bounds. If <ahref='#SkCanvas_drawBitmapNine_paint'>paint</a>
<ahref='#Filter_Quality'>Filter_Quality</a> set to <ahref='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, disable <ahref='undocumented#Pixel'>pixel</a> filtering. For all
other values of <ahref='#SkCanvas_drawBitmapNine_paint'>paint</a><ahref='#Filter_Quality'>Filter_Quality</a>, use <ahref='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a> to filter pixels.
Any <ahref='undocumented#SkMaskFilter'>SkMaskFilter</a> on <ahref='#SkCanvas_drawBitmapNine_paint'>paint</a> is ignored as is <ahref='#SkCanvas_drawBitmapNine_paint'>paint</a><ahref='#Paint_Anti_Alias'>Anti_Aliasing</a> state.
just as <ahref='undocumented#Shader'>Shader</a> made from <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_MakeBitmapShader'>MakeBitmapShader</a> with
<ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set replicates the <ahref='#SkCanvas_drawBitmapNine_bitmap'>bitmap</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples
<div><fiddle-embedname="@Canvas_drawBitmapNine"><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>.
<ahref='#SkCanvas_Lattice'>Lattice</a> divides <ahref='SkBitmap_Reference#Bitmap'>Bitmap</a> or <ahref='SkImage_Reference#Image'>Image</a> into a rectangular grid.
Grid entries on even columns and even rows are fixed; these entries are
always drawn at their original <ahref='undocumented#Size'>size</a> if the destination is large enough.
If the destination side is too small to hold the fixed entries, all fixed
entries are proportionately scaled down to fit.
The grid entries not on even columns and rows are scaled to fit the
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>.
Draws <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.
Each intersection of an even-numbered row and column is fixed; like the corners
of <ahref='#SkCanvas_drawBitmapNine'>drawBitmapNine</a>, fixed <ahref='#SkCanvas_drawBitmapLattice_lattice'>lattice</a> elements never scale larger than their initial
<ahref='undocumented#Size'>size</a> and shrink proportionately when all fixed elements exceed the <ahref='#SkCanvas_drawBitmapLattice_bitmap'>bitmap</a>
dimension. All other grid elements scale to fill the available space, if any.
Additionally transform draw using Clip, <ahref='SkMatrix_Reference#Matrix'>Matrix</a>, and optional <ahref='SkPaint_Reference#Paint'>Paint</a><ahref='#SkCanvas_drawBitmapLattice_paint'>paint</a>.
If <ahref='SkPaint_Reference#Paint'>Paint</a><ahref='#SkCanvas_drawBitmapLattice_paint'>paint</a> is supplied, apply <ahref='#Color_Filter'>Color_Filter</a>, <ahref='#Color_Alpha'>Color_Alpha</a>, <ahref='#Image_Filter'>Image_Filter</a>,
<ahref='#Blend_Mode'>Blend_Mode</a>, and <ahref='#Draw_Looper'>Draw_Looper</a>. If bitmap is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#Shader'>Shader</a>.
If <ahref='#SkCanvas_drawBitmapLattice_paint'>paint</a> contains <ahref='#Mask_Filter'>Mask_Filter</a>, generate mask from bitmap bounds. If <ahref='#SkCanvas_drawBitmapLattice_paint'>paint</a>
<ahref='#Filter_Quality'>Filter_Quality</a> set to <ahref='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, disable <ahref='undocumented#Pixel'>pixel</a> filtering. For all
other values of <ahref='#SkCanvas_drawBitmapLattice_paint'>paint</a><ahref='#Filter_Quality'>Filter_Quality</a>, use <ahref='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a> to filter pixels.
Any <ahref='undocumented#SkMaskFilter'>SkMaskFilter</a> on <ahref='#SkCanvas_drawBitmapLattice_paint'>paint</a> is ignored as is <ahref='#SkCanvas_drawBitmapLattice_paint'>paint</a><ahref='#Paint_Anti_Alias'>Anti_Aliasing</a> state.
just as <ahref='undocumented#Shader'>Shader</a> made from <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_MakeBitmapShader'>MakeBitmapShader</a> with
<ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set replicates the <ahref='#SkCanvas_drawBitmapLattice_bitmap'>bitmap</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples
<div><fiddle-embedname="@Canvas_drawBitmapLattice"><div>The two leftmost <ahref='#SkCanvas_drawBitmapLattice_bitmap'>bitmap</a> draws has four corners and sides to the left and right of center.
Draws <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.
Each intersection of an even-numbered row and column is fixed; like the corners
of <ahref='#SkCanvas_drawBitmapNine'>drawBitmapNine</a>, fixed <ahref='#SkCanvas_drawImageLattice_lattice'>lattice</a> elements never scale larger than their initial
<ahref='undocumented#Size'>size</a> and shrink proportionately when all fixed elements exceed the <ahref='SkBitmap_Reference#Bitmap'>bitmap</a>
dimension. All other grid elements scale to fill the available space, if any.
Additionally transform draw using Clip, <ahref='SkMatrix_Reference#Matrix'>Matrix</a>, and optional <ahref='SkPaint_Reference#Paint'>Paint</a><ahref='#SkCanvas_drawImageLattice_paint'>paint</a>.
If <ahref='SkPaint_Reference#Paint'>Paint</a><ahref='#SkCanvas_drawImageLattice_paint'>paint</a> is supplied, apply <ahref='#Color_Filter'>Color_Filter</a>, <ahref='#Color_Alpha'>Color_Alpha</a>, <ahref='#Image_Filter'>Image_Filter</a>,
<ahref='#Blend_Mode'>Blend_Mode</a>, and <ahref='#Draw_Looper'>Draw_Looper</a>. If image is <ahref='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, apply <ahref='undocumented#Shader'>Shader</a>.
If <ahref='#SkCanvas_drawImageLattice_paint'>paint</a> contains <ahref='#Mask_Filter'>Mask_Filter</a>, generate mask from image bounds. If <ahref='#SkCanvas_drawImageLattice_paint'>paint</a>
<ahref='#Filter_Quality'>Filter_Quality</a> set to <ahref='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, disable <ahref='undocumented#Pixel'>pixel</a> filtering. For all
other values of <ahref='#SkCanvas_drawImageLattice_paint'>paint</a><ahref='#Filter_Quality'>Filter_Quality</a>, use <ahref='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a> to filter pixels.
Any <ahref='undocumented#SkMaskFilter'>SkMaskFilter</a> on <ahref='#SkCanvas_drawImageLattice_paint'>paint</a> is ignored as is <ahref='#SkCanvas_drawImageLattice_paint'>paint</a><ahref='#Paint_Anti_Alias'>Anti_Aliasing</a> state.
just as <ahref='undocumented#Shader'>Shader</a> made from <ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_MakeBitmapShader'>MakeBitmapShader</a> with
<ahref='undocumented#SkShader'>SkShader</a>::<ahref='#SkShader_kClamp_TileMode'>kClamp_TileMode</a> set replicates the <ahref='SkBitmap_Reference#Bitmap'>bitmap</a> edge <ahref='SkColor_Reference#Color'>color</a> when it samples
<div><fiddle-embedname="@Canvas_drawImageNine"><div>The leftmost <ahref='#SkCanvas_drawImageLattice_image'>image</a> is smaller than center; only corners are drawn, all scaled to fit.
The second <ahref='#SkCanvas_drawImageLattice_image'>image</a> equals the <ahref='undocumented#Size'>size</a> of center; only corners are drawn without scaling.
The remaining images are larger than center. All corners draw without scaling. The sides
are scaled if needed to take up the remaining space; the center is transparent.
Draws <ahref='#SkCanvas_drawText_text'>text</a>, with origin at (<ahref='#SkCanvas_drawText_x'>x</a>, <ahref='#SkCanvas_drawText_y'>y</a>), using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawText_paint'>paint</a>.
<ahref='#SkCanvas_drawText_text'>text</a> meaning depends on <ahref='undocumented#SkTextEncoding'>SkTextEncoding</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='SkPaint_Reference#SkPaint'>SkPaint</a>::Align and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> vertical <ahref='#SkCanvas_drawText_text'>text</a>; by default
<ahref='#SkCanvas_drawText_text'>text</a> draws left to right, positioning the first <ahref='undocumented#Glyph'>glyph</a><ahref='undocumented#Left_Side_Bearing'>left side bearing</a> at <ahref='#SkCanvas_drawText_x'>x</a>
and its baseline at <ahref='#SkCanvas_drawText_y'>y</a>. <ahref='undocumented#Text'>Text</a><ahref='undocumented#Size'>size</a> is affected by <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawText_text'>text</a><ahref='undocumented#Size'>size</a>.
All elements of <ahref='#SkCanvas_drawText_paint'>paint</a>: <ahref='undocumented#SkPathEffect'>SkPathEffect</a>, <ahref='undocumented#SkMaskFilter'>SkMaskFilter</a>, <ahref='undocumented#SkShader'>SkShader</a>,
<ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>; apply to <ahref='#SkCanvas_drawText_text'>text</a>. By default, draws
filled 12 <ahref='SkPoint_Reference#Point'>point</a> black <ahref='undocumented#Glyph'>glyphs</a>.
<td><ahref='#SkCanvas_drawText_text'>text</a><ahref='undocumented#Size'>size</a>, blend, <ahref='SkColor_Reference#Color'>color</a>, and so on, used to draw</td>
<div><fiddle-embedname="@Canvas_drawText"><div>The same <ahref='#SkCanvas_drawText_text'>text</a> is drawn varying <ahref='#Paint_Text_Size'>Paint_Text_Size</a> and varying
Draws null terminated <ahref='#SkCanvas_drawString_string'>string</a>, with origin at (<ahref='#SkCanvas_drawString_x'>x</a>, <ahref='#SkCanvas_drawString_y'>y</a>), using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and
<ahref='#SkCanvas_drawString_string'>string</a> meaning depends on <ahref='undocumented#SkTextEncoding'>SkTextEncoding</a>; by default, strings are encoded
as UTF-8. Other values of <ahref='undocumented#SkTextEncoding'>SkTextEncoding</a> are unlikely to produce the desired
<ahref='#SkCanvas_drawString_x'>x</a> and <ahref='#SkCanvas_drawString_y'>y</a> meaning depends on <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::Align and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> vertical <ahref='undocumented#Text'>text</a>; by default
<ahref='#SkCanvas_drawString_string'>string</a> draws left to right, positioning the first <ahref='undocumented#Glyph'>glyph</a><ahref='undocumented#Left_Side_Bearing'>left side bearing</a> at <ahref='#SkCanvas_drawString_x'>x</a>
and its baseline at <ahref='#SkCanvas_drawString_y'>y</a>. <ahref='undocumented#Text'>Text</a><ahref='undocumented#Size'>size</a> is affected by <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='undocumented#Text'>text</a><ahref='undocumented#Size'>size</a>.
All elements of <ahref='#SkCanvas_drawString_paint'>paint</a>: <ahref='undocumented#SkPathEffect'>SkPathEffect</a>, <ahref='undocumented#SkMaskFilter'>SkMaskFilter</a>, <ahref='undocumented#SkShader'>SkShader</a>,
<ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>; apply to <ahref='undocumented#Text'>text</a>. By default, draws
filled 12 <ahref='SkPoint_Reference#Point'>point</a> black <ahref='undocumented#Glyph'>glyphs</a>.
<td><ahref='undocumented#Text'>text</a><ahref='undocumented#Size'>size</a>, blend, <ahref='SkColor_Reference#Color'>color</a>, and so on, used to draw</td>
Draws 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 clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and
<ahref='#SkCanvas_drawString_2_string'>string</a> meaning depends on <ahref='undocumented#SkTextEncoding'>SkTextEncoding</a>; by default, strings are encoded
as UTF-8. Other values of <ahref='undocumented#SkTextEncoding'>SkTextEncoding</a> are unlikely to produce the desired
<ahref='#SkCanvas_drawString_2_x'>x</a> and <ahref='#SkCanvas_drawString_2_y'>y</a> meaning depends on <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::Align and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a> vertical <ahref='undocumented#Text'>text</a>; by default
<ahref='#SkCanvas_drawString_2_string'>string</a> draws left to right, positioning the first <ahref='undocumented#Glyph'>glyph</a><ahref='undocumented#Left_Side_Bearing'>left side bearing</a> at <ahref='#SkCanvas_drawString_2_x'>x</a>
and its baseline at <ahref='#SkCanvas_drawString_2_y'>y</a>. <ahref='undocumented#Text'>Text</a><ahref='undocumented#Size'>size</a> is affected by <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='undocumented#Text'>text</a><ahref='undocumented#Size'>size</a>.
All elements of <ahref='#SkCanvas_drawString_2_paint'>paint</a>: <ahref='undocumented#SkPathEffect'>SkPathEffect</a>, <ahref='undocumented#SkMaskFilter'>SkMaskFilter</a>, <ahref='undocumented#SkShader'>SkShader</a>,
<ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>; apply to <ahref='undocumented#Text'>text</a>. By default, draws
filled 12 <ahref='SkPoint_Reference#Point'>point</a> black <ahref='undocumented#Glyph'>glyphs</a>.
<td><ahref='undocumented#Text'>text</a><ahref='undocumented#Size'>size</a>, blend, <ahref='SkColor_Reference#Color'>color</a>, and so on, used to draw</td>
Draws each <ahref='undocumented#Glyph'>glyph</a> in <ahref='#SkCanvas_drawPosText_text'>text</a> with the origin in <ahref='#SkCanvas_drawPosText_pos'>pos</a> array, using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and
<ahref='SkPaint_Reference#SkPaint'>SkPaint</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='undocumented#Glyph'>glyphs</a>
described by <ahref='#SkCanvas_drawPosText_byteLength'>byteLength</a> of <ahref='#SkCanvas_drawPosText_text'>text</a>.
<ahref='#SkCanvas_drawPosText_text'>text</a> meaning depends on <ahref='undocumented#SkTextEncoding'>SkTextEncoding</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='SkPaint_Reference#SkPaint'>SkPaint</a> vertical <ahref='#SkCanvas_drawPosText_text'>text</a>; by default
<ahref='undocumented#Glyph'>glyph</a><ahref='undocumented#Left_Side_Bearing'>left side bearing</a> and baseline are relative to <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> in <ahref='#SkCanvas_drawPosText_pos'>pos</a> array.
<ahref='undocumented#Text'>Text</a><ahref='undocumented#Size'>size</a> is affected by <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawPosText_text'>text</a><ahref='undocumented#Size'>size</a>.
All elements of <ahref='#SkCanvas_drawPosText_paint'>paint</a>: <ahref='undocumented#SkPathEffect'>SkPathEffect</a>, <ahref='undocumented#SkMaskFilter'>SkMaskFilter</a>, <ahref='undocumented#SkShader'>SkShader</a>,
<ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>; apply to <ahref='#SkCanvas_drawPosText_text'>text</a>. By default, draws
filled 12 <ahref='SkPoint_Reference#Point'>point</a> black <ahref='undocumented#Glyph'>glyphs</a>.
<td><ahref='#SkCanvas_drawPosText_text'>text</a><ahref='undocumented#Size'>size</a>, blend, <ahref='SkColor_Reference#Color'>color</a>, and so on, used to draw</td>
Draws each <ahref='undocumented#Glyph'>glyph</a> in <ahref='#SkCanvas_drawPosTextH_text'>text</a> with its origin composed from <ahref='#SkCanvas_drawPosTextH_xpos'>xpos</a> array and
<ahref='#SkCanvas_drawPosTextH_constY'>constY</a>, using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</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='undocumented#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='undocumented#SkTextEncoding'>SkTextEncoding</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='SkPaint_Reference#SkPaint'>SkPaint</a> vertical <ahref='#SkCanvas_drawPosTextH_text'>text</a>;
by default each <ahref='undocumented#Glyph'>glyph</a><ahref='undocumented#Left_Side_Bearing'>left side bearing</a> is positioned at an <ahref='#SkCanvas_drawPosTextH_xpos'>xpos</a> element and
its baseline is positioned at <ahref='#SkCanvas_drawPosTextH_constY'>constY</a>. <ahref='undocumented#Text'>Text</a><ahref='undocumented#Size'>size</a> is affected by <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a> and
All elements of <ahref='#SkCanvas_drawPosTextH_paint'>paint</a>: <ahref='undocumented#SkPathEffect'>SkPathEffect</a>, <ahref='undocumented#SkMaskFilter'>SkMaskFilter</a>, <ahref='undocumented#SkShader'>SkShader</a>,
<ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>; apply to <ahref='#SkCanvas_drawPosTextH_text'>text</a>. By default, draws
filled 12 <ahref='SkPoint_Reference#Point'>point</a> black <ahref='undocumented#Glyph'>glyphs</a>.
<td><ahref='#SkCanvas_drawPosTextH_text'>text</a><ahref='undocumented#Size'>size</a>, blend, <ahref='SkColor_Reference#Color'>color</a>, and so on, used to draw</td>
Draws <ahref='#SkCanvas_drawTextRSXform_text'>text</a>, transforming each <ahref='undocumented#Glyph'>glyph</a> by the corresponding <ahref='undocumented#SkRSXform'>SkRSXform</a>,
using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawTextRSXform_paint'>paint</a>.
<ahref='undocumented#SkRSXform'>SkRSXform</a><ahref='#SkCanvas_drawTextRSXform_xform'>xform</a> array specifies a separate square scale, rotation, and translation
for each <ahref='undocumented#Glyph'>glyph</a>. <ahref='#SkCanvas_drawTextRSXform_xform'>xform</a> does not affect <ahref='#SkCanvas_drawTextRSXform_paint'>paint</a><ahref='undocumented#SkShader'>SkShader</a>.
Optional <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawTextRSXform_cullRect'>cullRect</a> is a conservative bounds of <ahref='#SkCanvas_drawTextRSXform_text'>text</a>, taking into account
<ahref='undocumented#SkRSXform'>SkRSXform</a> and <ahref='#SkCanvas_drawTextRSXform_paint'>paint</a>. If <ahref='#SkCanvas_drawTextRSXform_cullRect'>cullRect</a> is outside of clip, <ahref='SkCanvas_Reference#Canvas'>canvas</a> can skip drawing.
All elements of <ahref='#SkCanvas_drawTextRSXform_paint'>paint</a>: <ahref='undocumented#SkPathEffect'>SkPathEffect</a>, <ahref='undocumented#SkMaskFilter'>SkMaskFilter</a>, <ahref='undocumented#SkShader'>SkShader</a>,
<ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, and <ahref='undocumented#SkDrawLooper'>SkDrawLooper</a>; apply to <ahref='#SkCanvas_drawTextRSXform_text'>text</a>. By default, draws
filled 12 <ahref='SkPoint_Reference#Point'>point</a> black <ahref='undocumented#Glyph'>glyphs</a>.
<td><ahref='#SkCanvas_drawTextRSXform_text'>text</a><ahref='undocumented#Size'>size</a>, blend, <ahref='SkColor_Reference#Color'>color</a>, and so on, used to draw</td>
Draws <ahref='#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 Clip, <ahref='SkMatrix_Reference#Matrix'>Matrix</a>, and <ahref='SkPaint_Reference#Paint'>Paint</a><ahref='#SkCanvas_drawTextBlob_paint'>paint</a>.
<ahref='#SkCanvas_drawTextBlob_blob'>blob</a> contains <ahref='undocumented#Glyph'>Glyphs</a>, their positions, and <ahref='#SkCanvas_drawTextBlob_paint'>paint</a> attributes specific to <ahref='undocumented#Text'>text</a>: <ahref='undocumented#Typeface'>Typeface</a>, <ahref='#Font_Size'>Font_Size</a>, <ahref='#Font_Scale_X'>Font_Scale_X</a>,
Elements of <ahref='#SkCanvas_drawTextBlob_paint'>paint</a>: <ahref='#Paint_Anti_Alias'>Anti_Alias</a>, <ahref='#Blend_Mode'>Blend_Mode</a>, <ahref='SkColor_Reference#Color'>Color</a> including <ahref='#Color_Alpha'>Color_Alpha</a>,
<ahref='#Color_Filter'>Color_Filter</a>, <ahref='#Paint_Dither'>Paint_Dither</a>, <ahref='#Draw_Looper'>Draw_Looper</a>, <ahref='#Mask_Filter'>Mask_Filter</a>, <ahref='#Path_Effect'>Path_Effect</a>, <ahref='undocumented#Shader'>Shader</a>, and
<ahref='#Paint_Style'>Paint_Style</a>; apply to <ahref='#SkCanvas_drawTextBlob_blob'>blob</a>. If <ahref='SkPaint_Reference#Paint'>Paint</a> contains <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kStroke_Style'>kStroke_Style</a>:
<ahref='#Paint_Miter_Limit'>Paint_Miter_Limit</a>, <ahref='#Paint_Stroke_Cap'>Paint_Stroke_Cap</a>, <ahref='#Paint_Stroke_Join'>Paint_Stroke_Join</a>, and <ahref='#Paint_Stroke_Width'>Paint_Stroke_Width</a>;
apply to <ahref='SkPath_Reference#Path'>Path</a> created from <ahref='#SkCanvas_drawTextBlob_blob'>blob</a>.
<td><ahref='undocumented#Glyph'>Glyphs</a>, positions, and their paints' <ahref='undocumented#Text'>text</a><ahref='undocumented#Size'>size</a>, <ahref='undocumented#Typeface'>typeface</a>, and so on</td>
Draws <ahref='#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 Clip, <ahref='SkMatrix_Reference#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='undocumented#Glyph'>Glyphs</a>, their positions, and <ahref='#SkCanvas_drawTextBlob_2_paint'>paint</a> attributes specific to <ahref='undocumented#Text'>text</a>: <ahref='undocumented#Typeface'>Typeface</a>, <ahref='#Font_Size'>Font_Size</a>, <ahref='#Font_Scale_X'>Font_Scale_X</a>,
Elements of <ahref='#SkCanvas_drawTextBlob_2_paint'>paint</a>: <ahref='#Path_Effect'>Path_Effect</a>, <ahref='#Mask_Filter'>Mask_Filter</a>, <ahref='undocumented#Shader'>Shader</a>, <ahref='#Color_Filter'>Color_Filter</a>,
<ahref='#Image_Filter'>Image_Filter</a>, and <ahref='#Draw_Looper'>Draw_Looper</a>; apply to <ahref='#SkCanvas_drawTextBlob_2_blob'>blob</a>.
<td><ahref='undocumented#Glyph'>Glyphs</a>, positions, and their paints' <ahref='undocumented#Text'>text</a><ahref='undocumented#Size'>size</a>, <ahref='undocumented#Typeface'>typeface</a>, and so on</td>
<div><fiddle-embedname="@Canvas_drawTextBlob_2"><div><ahref='SkPaint_Reference#Paint'>Paint</a> attributes related to <ahref='undocumented#Text'>text</a>, like <ahref='undocumented#Text'>text</a><ahref='undocumented#Size'>size</a>, have no effect on <ahref='#SkCanvas_drawTextBlob_2_paint'>paint</a> passed to <ahref='#SkCanvas_drawTextBlob'>drawTextBlob</a>.
Draws <ahref='SkPicture_Reference#SkPicture'>SkPicture</a><ahref='#SkCanvas_drawPicture_picture'>picture</a>, using clip and <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>.
Clip and <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</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>().
Draws <ahref='SkPicture_Reference#SkPicture'>SkPicture</a><ahref='#SkCanvas_drawPicture_2_picture'>picture</a>, using clip and <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>.
Clip and <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</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>().
Draws <ahref='SkPicture_Reference#SkPicture'>SkPicture</a><ahref='#SkCanvas_drawPicture_3_picture'>picture</a>, using clip and <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>; transforming <ahref='#SkCanvas_drawPicture_3_picture'>picture</a> with
<ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a><ahref='#SkCanvas_drawPicture_3_matrix'>matrix</a>, if provided; and use <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawPicture_3_paint'>paint alpha</a>, <ahref='undocumented#SkColorFilter'>SkColorFilter</a>,
<ahref='undocumented#SkImageFilter'>SkImageFilter</a>, and <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, if provided.
<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>.
Draws <ahref='SkPicture_Reference#SkPicture'>SkPicture</a><ahref='#SkCanvas_drawPicture_4_picture'>picture</a>, using clip and <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>; transforming <ahref='#SkCanvas_drawPicture_4_picture'>picture</a> with
<ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a><ahref='#SkCanvas_drawPicture_4_matrix'>matrix</a>, if provided; and use <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawPicture_4_paint'>paint alpha</a>, <ahref='undocumented#SkColorFilter'>SkColorFilter</a>,
<ahref='undocumented#SkImageFilter'>SkImageFilter</a>, and <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, if provided.
<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>.
Draws <ahref='undocumented#SkVertices'>SkVertices</a><ahref='#SkCanvas_drawVertices_vertices'>vertices</a>, a triangle mesh, using clip and <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>.
If <ahref='undocumented#Vertices_Texs'>vertices texs</a> and <ahref='undocumented#Vertices_Colors'>vertices colors</a> are defined in <ahref='#SkCanvas_drawVertices_vertices'>vertices</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawVertices_paint'>paint</a>
contains <ahref='undocumented#SkShader'>SkShader</a>, <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a><ahref='#SkCanvas_drawVertices_mode'>mode</a> combines <ahref='undocumented#Vertices_Colors'>vertices colors</a> with <ahref='undocumented#SkShader'>SkShader</a>.
<td>specifies the <ahref='undocumented#SkShader'>SkShader</a>, used as <ahref='undocumented#SkVertices'>SkVertices</a><ahref='undocumented#Texture'>texture</a>; may be nullptr</td>
Draws <ahref='undocumented#SkVertices'>SkVertices</a><ahref='#SkCanvas_drawVertices_2_vertices'>vertices</a>, a triangle mesh, using clip and <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>.
If <ahref='undocumented#Vertices_Texs'>vertices texs</a> and <ahref='undocumented#Vertices_Colors'>vertices colors</a> are defined in <ahref='#SkCanvas_drawVertices_2_vertices'>vertices</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawVertices_2_paint'>paint</a>
contains <ahref='undocumented#SkShader'>SkShader</a>, <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a><ahref='#SkCanvas_drawVertices_2_mode'>mode</a> combines <ahref='undocumented#Vertices_Colors'>vertices colors</a> with <ahref='undocumented#SkShader'>SkShader</a>.
<td>specifies the <ahref='undocumented#SkShader'>SkShader</a>, used as <ahref='undocumented#SkVertices'>SkVertices</a><ahref='undocumented#Texture'>texture</a>, may be nullptr</td>
Draws <ahref='undocumented#SkVertices'>SkVertices</a><ahref='#SkCanvas_drawVertices_3_vertices'>vertices</a>, a triangle mesh, using clip and <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>. Bone <ahref='undocumented#Data'>data</a> is used to
deform <ahref='#SkCanvas_drawVertices_3_vertices'>vertices</a> with bone <ahref='SkPath_Reference#Conic_Weight'>weights</a>.
If <ahref='undocumented#Vertices_Texs'>vertices texs</a> and <ahref='undocumented#Vertices_Colors'>vertices colors</a> are defined in <ahref='#SkCanvas_drawVertices_3_vertices'>vertices</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawVertices_3_paint'>paint</a>
contains <ahref='undocumented#SkShader'>SkShader</a>, <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a><ahref='#SkCanvas_drawVertices_3_mode'>mode</a> combines <ahref='undocumented#Vertices_Colors'>vertices colors</a> with <ahref='undocumented#SkShader'>SkShader</a>.
The first element of <ahref='#SkCanvas_drawVertices_3_bones'>bones</a> should be an object to world space transformation <ahref='SkMatrix_Reference#Matrix'>matrix</a> that
<ahref='#SkCanvas_drawVertices_3_boneCount'>boneCount</a> must be at most 80, and thus the <ahref='undocumented#Size'>size</a> of <ahref='#SkCanvas_drawVertices_3_bones'>bones</a> should be at most 80.
<td>specifies the <ahref='undocumented#SkShader'>SkShader</a>, used as <ahref='undocumented#SkVertices'>SkVertices</a><ahref='undocumented#Texture'>texture</a>, may be nullptr</td>
Draws <ahref='undocumented#SkVertices'>SkVertices</a><ahref='#SkCanvas_drawVertices_4_vertices'>vertices</a>, a triangle mesh, using clip and <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>. Bone <ahref='undocumented#Data'>data</a> is used to
deform <ahref='#SkCanvas_drawVertices_4_vertices'>vertices</a> with bone <ahref='SkPath_Reference#Conic_Weight'>weights</a>.
If <ahref='undocumented#Vertices_Texs'>vertices texs</a> and <ahref='undocumented#Vertices_Colors'>vertices colors</a> are defined in <ahref='#SkCanvas_drawVertices_4_vertices'>vertices</a>, and <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawVertices_4_paint'>paint</a>
contains <ahref='undocumented#SkShader'>SkShader</a>, <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a><ahref='#SkCanvas_drawVertices_4_mode'>mode</a> combines <ahref='undocumented#Vertices_Colors'>vertices colors</a> with <ahref='undocumented#SkShader'>SkShader</a>.
The first element of <ahref='#SkCanvas_drawVertices_4_bones'>bones</a> should be an object to world space transformation <ahref='SkMatrix_Reference#Matrix'>matrix</a> that
<ahref='#SkCanvas_drawVertices_4_boneCount'>boneCount</a> must be at most 80, and thus the <ahref='undocumented#Size'>size</a> of <ahref='#SkCanvas_drawVertices_4_bones'>bones</a> should be at most 80.
<td>specifies the <ahref='undocumented#SkShader'>SkShader</a>, used as <ahref='undocumented#SkVertices'>SkVertices</a><ahref='undocumented#Texture'>texture</a>, may be nullptr</td>
Draws a <ahref='undocumented#Coons_Patch'>Coons patch</a>: the interpolation of four <ahref='#SkCanvas_drawPatch_cubics'>cubics</a> with shared corners,
associating a <ahref='SkColor_Reference#Color'>color</a>, and optionally a <ahref='undocumented#Texture'>texture</a><ahref='SkPoint_Reference#SkPoint'>SkPoint</a>, with each corner.
<ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, and <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>. If <ahref='undocumented#SkShader'>SkShader</a> is provided it is treated
as <ahref='undocumented#Coons_Patch'>Coons patch</a><ahref='undocumented#Texture'>texture</a>; <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a><ahref='#SkCanvas_drawPatch_mode'>mode</a> combines <ahref='SkColor_Reference#Color'>color</a><ahref='#SkCanvas_drawPatch_colors'>colors</a> and <ahref='undocumented#SkShader'>SkShader</a> if
<ahref='SkPath_Reference#Point_Array'>SkPoint array</a><ahref='#SkCanvas_drawPatch_cubics'>cubics</a> specifies four <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPath_Reference#Cubic'>cubic</a> starting at the top-left corner,
in clockwise order, sharing every fourth <ahref='SkPoint_Reference#Point'>point</a>. The last <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPath_Reference#Cubic'>cubic</a> ends at the
<ahref='SkColor_Reference#Color'>Color</a> array <ahref='SkColor_Reference#Color'>color</a> associates <ahref='#SkCanvas_drawPatch_colors'>colors</a> with corners in top-left, top-right,
If <ahref='#SkCanvas_drawPatch_paint'>paint</a> contains <ahref='undocumented#SkShader'>SkShader</a>, <ahref='SkPath_Reference#Point_Array'>SkPoint array</a><ahref='#SkCanvas_drawPatch_texCoords'>texCoords</a> maps <ahref='undocumented#SkShader'>SkShader</a> as <ahref='undocumented#Texture'>texture</a> to
<td><ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPath_Reference#Cubic'>cubic</a> array, sharing common <ahref='SkPoint_Reference#Point'>points</a></td>
<td><ahref='SkPath_Reference#Point_Array'>SkPoint array</a> of <ahref='undocumented#Texture'>texture</a> coordinates, mapping <ahref='undocumented#SkShader'>SkShader</a> to corners;</td>
<td><ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> for <ahref='#SkCanvas_drawPatch_colors'>colors</a>, and for <ahref='undocumented#SkShader'>SkShader</a> if <ahref='#SkCanvas_drawPatch_paint'>paint</a> has one</td>
<td><ahref='undocumented#SkShader'>SkShader</a>, <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, used to draw</td>
Draws <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPath_Reference#Cubic'>cubic</a><ahref='undocumented#Coons_Patch'>Coons patch</a>: the interpolation of four <ahref='#SkCanvas_drawPatch_2_cubics'>cubics</a> with shared corners,
associating a <ahref='SkColor_Reference#Color'>color</a>, and optionally a <ahref='undocumented#Texture'>texture</a><ahref='SkPoint_Reference#SkPoint'>SkPoint</a>, with each corner.
<ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, and <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>. If <ahref='undocumented#SkShader'>SkShader</a> is provided it is treated
as <ahref='undocumented#Coons_Patch'>Coons patch</a><ahref='undocumented#Texture'>texture</a>; <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode combines <ahref='SkColor_Reference#Color'>color</a><ahref='#SkCanvas_drawPatch_2_colors'>colors</a> and <ahref='undocumented#SkShader'>SkShader</a> if
<ahref='SkPath_Reference#Point_Array'>SkPoint array</a><ahref='#SkCanvas_drawPatch_2_cubics'>cubics</a> specifies four <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPath_Reference#Cubic'>cubic</a> starting at the top-left corner,
in clockwise order, sharing every fourth <ahref='SkPoint_Reference#Point'>point</a>. The last <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPath_Reference#Cubic'>cubic</a> ends at the
<ahref='SkColor_Reference#Color'>Color</a> array <ahref='SkColor_Reference#Color'>color</a> associates <ahref='#SkCanvas_drawPatch_2_colors'>colors</a> with corners in top-left, top-right,
If <ahref='#SkCanvas_drawPatch_2_paint'>paint</a> contains <ahref='undocumented#SkShader'>SkShader</a>, <ahref='SkPath_Reference#Point_Array'>SkPoint array</a><ahref='#SkCanvas_drawPatch_2_texCoords'>texCoords</a> maps <ahref='undocumented#SkShader'>SkShader</a> as <ahref='undocumented#Texture'>texture</a> to
<td><ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPath_Reference#Cubic'>cubic</a> array, sharing common <ahref='SkPoint_Reference#Point'>points</a></td>
<td><ahref='SkPath_Reference#Point_Array'>SkPoint array</a> of <ahref='undocumented#Texture'>texture</a> coordinates, mapping <ahref='undocumented#SkShader'>SkShader</a> to corners;</td>
<td><ahref='undocumented#SkShader'>SkShader</a>, <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, used to draw</td>
Draws a set of <ahref='undocumented#Sprite'>sprites</a> from <ahref='#SkCanvas_drawAtlas_atlas'>atlas</a>, using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and optional <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawAtlas_paint'>paint</a>.
<ahref='#SkCanvas_drawAtlas_paint'>paint</a> uses <ahref='SkPaint_Reference#Anti_Alias'>anti-alias</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, and <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>
to draw, if present. For each entry in the array, <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawAtlas_tex'>tex</a> locates <ahref='undocumented#Sprite'>sprite</a> in
<ahref='#SkCanvas_drawAtlas_atlas'>atlas</a>, and <ahref='undocumented#SkRSXform'>SkRSXform</a><ahref='#SkCanvas_drawAtlas_xform'>xform</a> transforms it into destination space.
<ahref='#SkCanvas_drawAtlas_xform'>xform</a>, <ahref='undocumented#Text'>text</a>, 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 <ahref='undocumented#Sprite'>sprite</a> using <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a><ahref='#SkCanvas_drawAtlas_mode'>mode</a>, treating
<ahref='undocumented#Sprite'>sprite</a> as source and <ahref='#SkCanvas_drawAtlas_colors'>colors</a> as destination.
Optional <ahref='#SkCanvas_drawAtlas_cullRect'>cullRect</a> is a conservative bounds of all transformed <ahref='undocumented#Sprite'>sprites</a>.
If <ahref='#SkCanvas_drawAtlas_cullRect'>cullRect</a> is outside of clip, <ahref='SkCanvas_Reference#Canvas'>canvas</a> can skip drawing.
<td><ahref='undocumented#SkRSXform'>SkRSXform</a> mappings for <ahref='undocumented#Sprite'>sprites</a> in <ahref='#SkCanvas_drawAtlas_atlas'>atlas</a></td>
<td><ahref='SkRect_Reference#SkRect'>SkRect</a> locations of <ahref='undocumented#Sprite'>sprites</a> in <ahref='#SkCanvas_drawAtlas_atlas'>atlas</a></td>
<td>one per <ahref='undocumented#Sprite'>sprite</a>, blended with <ahref='undocumented#Sprite'>sprite</a> using <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>; may be nullptr</td>
<td><ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> combining <ahref='#SkCanvas_drawAtlas_colors'>colors</a> and <ahref='undocumented#Sprite'>sprites</a></td>
<td><ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and so on; may be nullptr</td>
Draws a set of <ahref='undocumented#Sprite'>sprites</a> from <ahref='#SkCanvas_drawAtlas_2_atlas'>atlas</a>, using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and optional <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawAtlas_2_paint'>paint</a>.
<ahref='#SkCanvas_drawAtlas_2_paint'>paint</a> uses <ahref='SkPaint_Reference#Anti_Alias'>anti-alias</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, and <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>
to draw, if present. For each entry in the array, <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawAtlas_2_tex'>tex</a> locates <ahref='undocumented#Sprite'>sprite</a> in
<ahref='#SkCanvas_drawAtlas_2_atlas'>atlas</a>, and <ahref='undocumented#SkRSXform'>SkRSXform</a><ahref='#SkCanvas_drawAtlas_2_xform'>xform</a> transforms it into destination space.
<ahref='#SkCanvas_drawAtlas_2_xform'>xform</a>, <ahref='undocumented#Text'>text</a>, 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 <ahref='undocumented#Sprite'>sprite</a> using <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>.
Optional <ahref='#SkCanvas_drawAtlas_2_cullRect'>cullRect</a> is a conservative bounds of all transformed <ahref='undocumented#Sprite'>sprites</a>.
If <ahref='#SkCanvas_drawAtlas_2_cullRect'>cullRect</a> is outside of clip, <ahref='SkCanvas_Reference#Canvas'>canvas</a> can skip drawing.
<td><ahref='undocumented#SkRSXform'>SkRSXform</a> mappings for <ahref='undocumented#Sprite'>sprites</a> in <ahref='#SkCanvas_drawAtlas_2_atlas'>atlas</a></td>
<td><ahref='SkRect_Reference#SkRect'>SkRect</a> locations of <ahref='undocumented#Sprite'>sprites</a> in <ahref='#SkCanvas_drawAtlas_2_atlas'>atlas</a></td>
<td>one per <ahref='undocumented#Sprite'>sprite</a>, blended with <ahref='undocumented#Sprite'>sprite</a> using <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>; may be nullptr</td>
<td><ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> combining <ahref='#SkCanvas_drawAtlas_2_colors'>colors</a> and <ahref='undocumented#Sprite'>sprites</a></td>
<td><ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and so on; may be nullptr</td>
Draws a set of <ahref='undocumented#Sprite'>sprites</a> from <ahref='#SkCanvas_drawAtlas_3_atlas'>atlas</a>, using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and optional <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawAtlas_3_paint'>paint</a>.
<ahref='#SkCanvas_drawAtlas_3_paint'>paint</a> uses <ahref='SkPaint_Reference#Anti_Alias'>anti-alias</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, and <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>
to draw, if present. For each entry in the array, <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawAtlas_3_tex'>tex</a> locates <ahref='undocumented#Sprite'>sprite</a> in
<ahref='#SkCanvas_drawAtlas_3_atlas'>atlas</a>, and <ahref='undocumented#SkRSXform'>SkRSXform</a><ahref='#SkCanvas_drawAtlas_3_xform'>xform</a> transforms it into destination space.
<ahref='#SkCanvas_drawAtlas_3_xform'>xform</a> and <ahref='undocumented#Text'>text</a> must contain <ahref='#SkCanvas_drawAtlas_3_count'>count</a> entries.
Optional <ahref='#SkCanvas_drawAtlas_3_cullRect'>cullRect</a> is a conservative bounds of all transformed <ahref='undocumented#Sprite'>sprites</a>.
If <ahref='#SkCanvas_drawAtlas_3_cullRect'>cullRect</a> is outside of clip, <ahref='SkCanvas_Reference#Canvas'>canvas</a> can skip drawing.
<td><ahref='undocumented#SkRSXform'>SkRSXform</a> mappings for <ahref='undocumented#Sprite'>sprites</a> in <ahref='#SkCanvas_drawAtlas_3_atlas'>atlas</a></td>
<td><ahref='SkRect_Reference#SkRect'>SkRect</a> locations of <ahref='undocumented#Sprite'>sprites</a> in <ahref='#SkCanvas_drawAtlas_3_atlas'>atlas</a></td>
<td><ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and so on; may be nullptr</td>
Draws a set of <ahref='undocumented#Sprite'>sprites</a> from <ahref='#SkCanvas_drawAtlas_4_atlas'>atlas</a>, using clip, <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, and optional <ahref='SkPaint_Reference#SkPaint'>SkPaint</a><ahref='#SkCanvas_drawAtlas_4_paint'>paint</a>.
<ahref='#SkCanvas_drawAtlas_4_paint'>paint</a> uses <ahref='SkPaint_Reference#Anti_Alias'>anti-alias</a>, <ahref='SkColor_Reference#Alpha'>alpha</a>, <ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, and <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>
to draw, if present. For each entry in the array, <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkCanvas_drawAtlas_4_tex'>tex</a> locates <ahref='undocumented#Sprite'>sprite</a> in
<ahref='#SkCanvas_drawAtlas_4_atlas'>atlas</a>, and <ahref='undocumented#SkRSXform'>SkRSXform</a><ahref='#SkCanvas_drawAtlas_4_xform'>xform</a> transforms it into destination space.
<ahref='#SkCanvas_drawAtlas_4_xform'>xform</a> and <ahref='undocumented#Text'>text</a> must contain <ahref='#SkCanvas_drawAtlas_4_count'>count</a> entries.
Optional <ahref='#SkCanvas_drawAtlas_4_cullRect'>cullRect</a> is a conservative bounds of all transformed <ahref='undocumented#Sprite'>sprites</a>.
If <ahref='#SkCanvas_drawAtlas_4_cullRect'>cullRect</a> is outside of clip, <ahref='SkCanvas_Reference#Canvas'>canvas</a> can skip drawing.
<td><ahref='undocumented#SkRSXform'>SkRSXform</a> mappings for <ahref='undocumented#Sprite'>sprites</a> in <ahref='#SkCanvas_drawAtlas_4_atlas'>atlas</a></td>
<td><ahref='SkRect_Reference#SkRect'>SkRect</a> locations of <ahref='undocumented#Sprite'>sprites</a> in <ahref='#SkCanvas_drawAtlas_4_atlas'>atlas</a></td>
<td><ahref='undocumented#SkColorFilter'>SkColorFilter</a>, <ahref='undocumented#SkImageFilter'>SkImageFilter</a>, <ahref='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and so on; may be nullptr</td>
Draws <ahref='undocumented#SkDrawable'>SkDrawable</a><ahref='#SkCanvas_drawDrawable_drawable'>drawable</a> using clip and <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, concatenated with
If <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> has an asynchronous implementation, as is the case
when it is recording into <ahref='SkPicture_Reference#SkPicture'>SkPicture</a>, then <ahref='#SkCanvas_drawDrawable_drawable'>drawable</a> will be referenced,
so that <ahref='undocumented#SkDrawable'>SkDrawable</a>::<ahref='#SkDrawable_draw'>draw()</a> can be called when the operation is finalized. To force
Draws <ahref='undocumented#SkDrawable'>SkDrawable</a><ahref='#SkCanvas_drawDrawable_2_drawable'>drawable</a> using clip and <ahref='SkMatrix_Reference#SkMatrix'>SkMatrix</a>, offset by (<ahref='#SkCanvas_drawDrawable_2_x'>x</a>, <ahref='#SkCanvas_drawDrawable_2_y'>y</a>).
If <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> has an asynchronous implementation, as is the case
when it is recording into <ahref='SkPicture_Reference#SkPicture'>SkPicture</a>, then <ahref='#SkCanvas_drawDrawable_2_drawable'>drawable</a> will be referenced,
so that <ahref='undocumented#SkDrawable'>SkDrawable</a>::<ahref='#SkDrawable_draw'>draw()</a> can be called when the operation is finalized. To force
Associates <ahref='SkRect_Reference#SkRect'>SkRect</a> on <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> with an annotation; a key-value pair, where the <ahref='#SkCanvas_drawAnnotation_key'>key</a> is
a null-terminated UTF-8 <ahref='undocumented#String'>string</a>, and optional <ahref='#SkCanvas_drawAnnotation_value'>value</a> is stored as <ahref='undocumented#SkData'>SkData</a>.
Only some <ahref='SkCanvas_Reference#Canvas'>canvas</a> implementations, such as recording to <ahref='SkPicture_Reference#SkPicture'>SkPicture</a>, or drawing to
<ahref='undocumented#Document_PDF'>document PDF</a>, use annotations.
Associates <ahref='SkRect_Reference#SkRect'>SkRect</a> on <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> when an annotation; a key-value pair, where the <ahref='#SkCanvas_drawAnnotation_2_key'>key</a> is
a null-terminated UTF-8 <ahref='undocumented#String'>string</a>, and optional <ahref='#SkCanvas_drawAnnotation_2_value'>value</a> is stored as <ahref='undocumented#SkData'>SkData</a>.
Only some <ahref='SkCanvas_Reference#Canvas'>canvas</a> implementations, such as recording to <ahref='SkPicture_Reference#SkPicture'>SkPicture</a>, or drawing to
<ahref='undocumented#Document_PDF'>document PDF</a>, use annotations.