<ahref='#Picture'>Picture</a> records drawing commands made to <ahref='SkCanvas_Reference#Canvas'>Canvas</a>. The command stream may be
played in whole or in part at a later time.
<ahref='#Picture'>Picture</a> is an abstract class. <ahref='#Picture'>Picture</a> may be generated by <ahref='undocumented#Picture_Recorder'>Picture Recorder</a>
or <ahref='undocumented#Drawable'>Drawable</a>, or from <ahref='#Picture'>Picture</a> previously saved to <ahref='undocumented#Data'>Data</a> or <ahref='SkStream_Reference#Stream'>Stream</a>.
<ahref='#Picture'>Picture</a> may contain any <ahref='SkCanvas_Reference#Canvas'>Canvas</a> drawing command, as well as one or more
<ahref='SkCanvas_Reference#Matrix'>Canvas Matrix</a> or <ahref='SkCanvas_Reference#Clip'>Canvas Clip</a>. <ahref='#Picture'>Picture</a> has a cull <ahref='SkRect_Reference#Rect'>Rect</a>, which is used as
a bounding box hint. To limit <ahref='#Picture'>Picture</a> bounds, use <ahref='SkCanvas_Reference#Clip'>Canvas Clip</a> when
recording or drawing <ahref='#Picture'>Picture</a>.
<ahref='#SkPicture_AbortCallback_AbortCallback'>AbortCallback</a> is an abstract class. An implementation of <ahref='#SkPicture_AbortCallback_AbortCallback'>AbortCallback</a> may
Stops <ahref='SkPicture_Reference#SkPicture'>SkPicture</a> playback when some condition is met. A subclass of
<ahref='#SkPicture_AbortCallback'>AbortCallback</a> provides an override for <ahref='#SkPicture_AbortCallback_abort'>abort()</a> that can stop <ahref='SkPicture_Reference#SkPicture'>SkPicture</a>::playback.
The part of <ahref='SkPicture_Reference#SkPicture'>SkPicture</a> drawn when aborted is undefined. <ahref='SkPicture_Reference#SkPicture'>SkPicture</a> instantiations are
free to stop drawing at different <ahref='SkPoint_Reference#Point'>points</a> during playback.
If the abort happens inside one or more calls to <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<ahref='#SkCanvas_save'>save()</a>, stack
of <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a><ahref='SkMatrix_Reference#Matrix'>matrix</a> and <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a> clip values is restored to its state before
<ahref='SkPicture_Reference#SkPicture'>SkPicture</a>::playback was called.
Recreates <ahref='SkPicture_Reference#SkPicture'>SkPicture</a> that was serialized into a <ahref='#SkPicture_MakeFromStream_stream'>stream</a>. Returns constructed <ahref='SkPicture_Reference#SkPicture'>SkPicture</a>
if successful; otherwise, returns nullptr. Fails if <ahref='undocumented#Data'>data</a> does not permit
<ahref='#SkPicture_MakeFromStream_procs'>procs</a>-><ahref='#SkDeserialProcs_fPictureProc'>fPictureProc</a> permits supplying a custom function to decode <ahref='SkPicture_Reference#SkPicture'>SkPicture</a>.
If <ahref='#SkPicture_MakeFromStream_procs'>procs</a>-><ahref='#SkDeserialProcs_fPictureProc'>fPictureProc</a> is nullptr, default decoding is used. <ahref='#SkPicture_MakeFromStream_procs'>procs</a>-><ahref='#SkDeserialProcs_fPictureCtx'>fPictureCtx</a>
may be used to provide user context to <ahref='#SkPicture_MakeFromStream_procs'>procs</a>-><ahref='#SkDeserialProcs_fPictureProc'>fPictureProc</a>; <ahref='#SkPicture_MakeFromStream_procs'>procs</a>-><ahref='#SkDeserialProcs_fPictureProc'>fPictureProc</a>
is called with a pointer to <ahref='undocumented#Data'>data</a>, <ahref='undocumented#Data'>data</a> byte length, and user context.
<ahref='SkPicture_Reference#SkPicture'>SkPicture</a> constructed from <ahref='#SkPicture_MakeFromStream_stream'>stream</a><ahref='undocumented#Data'>data</a>
Recreates <ahref='SkPicture_Reference#SkPicture'>SkPicture</a> that was serialized into <ahref='#SkPicture_MakeFromData_data'>data</a>. Returns constructed <ahref='SkPicture_Reference#SkPicture'>SkPicture</a>
<ahref='#SkPicture_MakeFromData_procs'>procs</a>-><ahref='#SkDeserialProcs_fPictureProc'>fPictureProc</a> permits supplying a custom function to decode <ahref='SkPicture_Reference#SkPicture'>SkPicture</a>.
If <ahref='#SkPicture_MakeFromData_procs'>procs</a>-><ahref='#SkDeserialProcs_fPictureProc'>fPictureProc</a> is nullptr, default decoding is used. <ahref='#SkPicture_MakeFromData_procs'>procs</a>-><ahref='#SkDeserialProcs_fPictureCtx'>fPictureCtx</a>
may be used to provide user context to <ahref='#SkPicture_MakeFromData_procs'>procs</a>-><ahref='#SkDeserialProcs_fPictureProc'>fPictureProc</a>; <ahref='#SkPicture_MakeFromData_procs'>procs</a>-><ahref='#SkDeserialProcs_fPictureProc'>fPictureProc</a>
is called with a pointer to <ahref='#SkPicture_MakeFromData_data'>data</a>, <ahref='#SkPicture_MakeFromData_data'>data</a> byte length, and user context.
Replays the drawing commands on the specified <ahref='#SkPicture_playback()_canvas'>canvas</a>. In the case that the
commands are recorded, each command in the <ahref='SkPicture_Reference#SkPicture'>SkPicture</a> is sent separately to <ahref='#SkPicture_playback()_canvas'>canvas</a>.
To add a single command to draw <ahref='SkPicture_Reference#SkPicture'>SkPicture</a> to recording <ahref='#SkPicture_playback()_canvas'>canvas</a>, call
Returns cull <ahref='SkRect_Reference#SkRect'>SkRect</a> for this <ahref='SkPicture_Reference#Picture'>picture</a>, passed in when <ahref='SkPicture_Reference#SkPicture'>SkPicture</a> was created.
Returned <ahref='SkRect_Reference#SkRect'>SkRect</a> does not specify clipping <ahref='SkRect_Reference#SkRect'>SkRect</a> for <ahref='SkPicture_Reference#SkPicture'>SkPicture</a>; cull is hint
of <ahref='SkPicture_Reference#SkPicture'>SkPicture</a> bounds.
<div><fiddle-embedname="15bb9a9596b40c5e2045f76e8c1dcf8e"><div><ahref='#Picture'>Picture</a> recorded bounds are smaller than contents; contents outside recorded
bounds may be drawn, and are drawn in this example.
<ahref='#SkPicture_serialize()_procs'>procs</a>-><ahref='#SkSerialProcs_fPictureProc'>fPictureProc</a> permits supplying a custom function to encode <ahref='SkPicture_Reference#SkPicture'>SkPicture</a>.
If <ahref='#SkPicture_serialize()_procs'>procs</a>-><ahref='#SkSerialProcs_fPictureProc'>fPictureProc</a> is nullptr, default encoding is used. <ahref='#SkPicture_serialize()_procs'>procs</a>-><ahref='#SkSerialProcs_fPictureCtx'>fPictureCtx</a>
may be used to provide user context to <ahref='#SkPicture_serialize()_procs'>procs</a>-><ahref='#SkSerialProcs_fPictureProc'>fPictureProc</a>; <ahref='#SkPicture_serialize()_procs'>procs</a>-><ahref='#SkSerialProcs_fPictureProc'>fPictureProc</a>
is called with a pointer to <ahref='SkPicture_Reference#SkPicture'>SkPicture</a> and user context.
<ahref='#SkPicture_serialize_2_procs'>procs</a>-><ahref='#SkSerialProcs_fPictureProc'>fPictureProc</a> permits supplying a custom function to encode <ahref='SkPicture_Reference#SkPicture'>SkPicture</a>.
If <ahref='#SkPicture_serialize_2_procs'>procs</a>-><ahref='#SkSerialProcs_fPictureProc'>fPictureProc</a> is nullptr, default encoding is used. <ahref='#SkPicture_serialize_2_procs'>procs</a>-><ahref='#SkSerialProcs_fPictureCtx'>fPictureCtx</a>
may be used to provide user context to <ahref='#SkPicture_serialize_2_procs'>procs</a>-><ahref='#SkSerialProcs_fPictureProc'>fPictureProc</a>; <ahref='#SkPicture_serialize_2_procs'>procs</a>-><ahref='#SkSerialProcs_fPictureProc'>fPictureProc</a>
is called with a pointer to <ahref='SkPicture_Reference#SkPicture'>SkPicture</a> and user context.
Returns a placeholder <ahref='SkPicture_Reference#SkPicture'>SkPicture</a>. Result does not draw, and contains only
<ahref='#SkPicture_MakePlaceholder_cull'>cull</a><ahref='SkRect_Reference#SkRect'>SkRect</a>, a hint of its bounds. Result is immutable; it cannot be changed
Returns the approximate byte <ahref='undocumented#Size'>size</a> of <ahref='SkPicture_Reference#SkPicture'>SkPicture</a>. Does not include large objects
referenced by <ahref='SkPicture_Reference#SkPicture'>SkPicture</a>.