Home | History | Annotate | Download | only in api
      1 SkPicture Reference
      2 ===
      3 
      4 
      5 <a name='SkPicture'></a>
      6 
      7 ---
      8 
      9 <pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
     10 class <a href='SkPicture_Reference#SkPicture'>SkPicture</a> : public <a href='undocumented#SkRefCnt'>SkRefCnt</a> {
     11 
     12     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkPicture_Reference#SkPicture'>SkPicture</a>> <a href='#SkPicture_MakeFromStream'>MakeFromStream</a>(<a href='SkStream_Reference#SkStream'>SkStream</a>* <a href='SkStream_Reference#Stream'>stream</a>,
     13                                            const <a href='undocumented#SkDeserialProcs'>SkDeserialProcs</a>* procs = nullptr);
     14     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkPicture_Reference#SkPicture'>SkPicture</a>> <a href='#SkPicture_MakeFromData'>MakeFromData</a>(const <a href='undocumented#SkData'>SkData</a>* <a href='undocumented#Data'>data</a>,
     15                                          const <a href='undocumented#SkDeserialProcs'>SkDeserialProcs</a>* procs = nullptr);
     16     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkPicture_Reference#SkPicture'>SkPicture</a>> <a href='#SkPicture_MakeFromData'>MakeFromData</a>(const void* <a href='undocumented#Data'>data</a>, size_t <a href='undocumented#Size'>size</a>,
     17                                          const <a href='undocumented#SkDeserialProcs'>SkDeserialProcs</a>* procs = nullptr);
     18     virtual void <a href='#SkPicture_playback'>playback</a>(<a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>* <a href='SkCanvas_Reference#Canvas'>canvas</a>, <a href='#SkPicture_AbortCallback'>AbortCallback</a>* callback = nullptr) const = 0;
     19     virtual <a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPicture_cullRect'>cullRect</a>() const = 0;
     20     uint32_t <a href='#SkPicture_uniqueID'>uniqueID</a>() const;
     21     <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkData'>SkData</a>> <a href='#SkPicture_serialize'>serialize</a>(const <a href='undocumented#SkSerialProcs'>SkSerialProcs</a>* procs = nullptr) const;
     22     void <a href='#SkPicture_serialize'>serialize</a>(<a href='SkWStream_Reference#SkWStream'>SkWStream</a>* <a href='SkStream_Reference#Stream'>stream</a>, const <a href='undocumented#SkSerialProcs'>SkSerialProcs</a>* procs = nullptr) const;
     23     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkPicture_Reference#SkPicture'>SkPicture</a>> <a href='#SkPicture_MakePlaceholder'>MakePlaceholder</a>(<a href='SkRect_Reference#SkRect'>SkRect</a> cull);
     24     virtual int <a href='#SkPicture_approximateOpCount'>approximateOpCount</a>() const = 0;
     25     virtual size_t <a href='#SkPicture_approximateBytesUsed'>approximateBytesUsed</a>() const = 0;
     26 };
     27 
     28 </pre>
     29 
     30 <a href='SkPicture_Reference#Picture'>Picture</a> records drawing commands made to <a href='SkCanvas_Reference#Canvas'>Canvas</a>. The command <a href='SkStream_Reference#Stream'>stream</a> may be
     31 played in whole or in part at a later time.
     32 
     33 <a href='SkPicture_Reference#Picture'>Picture</a> is an abstract class. <a href='SkPicture_Reference#Picture'>Picture</a> may be generated by <a href='#Picture_Recorder'>Picture_Recorder</a>
     34 or <a href='undocumented#Drawable'>Drawable</a>, or from <a href='SkPicture_Reference#Picture'>Picture</a> previously saved to <a href='undocumented#Data'>Data</a> or <a href='SkStream_Reference#Stream'>Stream</a>.
     35 
     36 <a href='SkPicture_Reference#Picture'>Picture</a> may contain any <a href='SkCanvas_Reference#Canvas'>Canvas</a> drawing command, as well as one or more
     37 <a href='#Canvas_Matrix'>Canvas_Matrix</a> or <a href='#Canvas_Clip'>Canvas_Clip</a>. <a href='SkPicture_Reference#Picture'>Picture</a> has a cull <a href='SkRect_Reference#Rect'>Rect</a>, which is used as
     38 a bounding box hint. To limit <a href='SkPicture_Reference#Picture'>Picture</a> bounds, use <a href='#Canvas_Clip'>Canvas_Clip</a> when
     39 recording or drawing <a href='SkPicture_Reference#Picture'>Picture</a>.
     40 
     41 <a name='SkPicture_AbortCallback'></a>
     42 
     43 ---
     44 
     45 <pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
     46     class <a href='#SkPicture_AbortCallback'>AbortCallback</a> {
     47     public:
     48         <a href='#SkPicture_AbortCallback_AbortCallback'>AbortCallback()</a> {}
     49         virtual <a href='#SkPicture_AbortCallback_destructor'>~AbortCallback()</a> {}
     50         virtual bool <a href='#SkPicture_AbortCallback_abort'>abort()</a> = 0;
     51     };
     52 </pre>
     53 
     54 <a href='#SkPicture_AbortCallback'>AbortCallback</a> is an abstract class. An implementation of <a href='#SkPicture_AbortCallback'>AbortCallback</a> may
     55 passed as a parameter to <a href='SkPicture_Reference#SkPicture'>SkPicture</a>::<a href='#SkPicture_playback'>playback</a>, to stop it before all drawing
     56 commands have been processed.
     57 
     58 If <a href='#SkPicture_AbortCallback'>AbortCallback</a>::<a href='#SkPicture_AbortCallback_abort'>abort</a> returns true, <a href='SkPicture_Reference#SkPicture'>SkPicture</a>::<a href='#SkPicture_playback'>playback</a> is interrupted.
     59 
     60 <a name='SkPicture_AbortCallback_AbortCallback'></a>
     61 
     62 ---
     63 
     64 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
     65 <a href='#SkPicture_AbortCallback_AbortCallback'>AbortCallback()</a>
     66 </pre>
     67 
     68 Has no effect.
     69 
     70 ### Return Value
     71 
     72 abstract class cannot be instantiated
     73 
     74 ### See Also
     75 
     76 <a href='#SkPicture_playback'>playback</a>
     77 
     78 <a name='SkPicture_AbortCallback_destructor'></a>
     79 
     80 ---
     81 
     82 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
     83 virtual <a href='#SkPicture_AbortCallback_destructor'>~AbortCallback()</a>
     84 </pre>
     85 
     86 Has no effect.
     87 
     88 ### See Also
     89 
     90 <a href='#SkPicture_playback'>playback</a>
     91 
     92 <a name='SkPicture_AbortCallback_abort'></a>
     93 
     94 ---
     95 
     96 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
     97 virtual bool <a href='#SkPicture_AbortCallback_abort'>abort()</a> = 0
     98 </pre>
     99 
    100 Stops <a href='SkPicture_Reference#SkPicture'>SkPicture</a> playback when some condition is met. A subclass of
    101 <a href='#SkPicture_AbortCallback'>AbortCallback</a> provides an override for <a href='#SkPicture_AbortCallback_abort'>abort()</a> that can stop <a href='SkPicture_Reference#SkPicture'>SkPicture</a>::<a href='#SkPicture_playback'>playback</a>.
    102 
    103 The part of <a href='SkPicture_Reference#SkPicture'>SkPicture</a> drawn when aborted is undefined. <a href='SkPicture_Reference#SkPicture'>SkPicture</a> instantiations are
    104 free to stop drawing at different <a href='SkPoint_Reference#Point'>points</a> during playback.
    105 
    106 If the abort happens inside one or more calls to <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_save'>save()</a>, stack
    107 of <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> <a href='SkMatrix_Reference#Matrix'>matrix</a> and <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> clip values is restored to its state before
    108 <a href='SkPicture_Reference#SkPicture'>SkPicture</a>::<a href='#SkPicture_playback'>playback</a> was called.
    109 
    110 ### Return Value
    111 
    112 true to stop playback
    113 
    114 ### See Also
    115 
    116 <a href='#SkPicture_playback'>playback</a>
    117 
    118 ### Example
    119 
    120 <div><fiddle-embed name="56ed920dadbf2b2967ac45fb5a9bded6"><div>JustOneDraw allows the black rectangle to draw but stops playback before the
    121 white rectangle appears.
    122 </div></fiddle-embed></div>
    123 
    124 <a name='SkPicture_MakeFromStream'></a>
    125 
    126 ---
    127 
    128 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    129 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkPicture_Reference#SkPicture'>SkPicture</a>&gt; <a href='#SkPicture_MakeFromStream'>MakeFromStream</a>(<a href='SkStream_Reference#SkStream'>SkStream</a>* <a href='SkStream_Reference#Stream'>stream</a>, const <a href='undocumented#SkDeserialProcs'>SkDeserialProcs</a>* procs = nullptr)
    130 </pre>
    131 
    132 Recreates <a href='SkPicture_Reference#SkPicture'>SkPicture</a> that was serialized into a <a href='#SkPicture_MakeFromStream_stream'>stream</a>. Returns constructed <a href='SkPicture_Reference#SkPicture'>SkPicture</a>
    133 if successful; otherwise, returns nullptr. Fails if <a href='undocumented#Data'>data</a> does not permit
    134 constructing valid <a href='SkPicture_Reference#SkPicture'>SkPicture</a>.
    135 
    136 <a href='#SkPicture_MakeFromStream_procs'>procs</a>-><a href='#SkDeserialProcs_fPictureProc'>fPictureProc</a> permits supplying a custom function to decode <a href='SkPicture_Reference#SkPicture'>SkPicture</a>.
    137 If <a href='#SkPicture_MakeFromStream_procs'>procs</a>-><a href='#SkDeserialProcs_fPictureProc'>fPictureProc</a> is nullptr, default decoding is used. <a href='#SkPicture_MakeFromStream_procs'>procs</a>-><a href='#SkDeserialProcs_fPictureCtx'>fPictureCtx</a>
    138 may be used to provide user context to <a href='#SkPicture_MakeFromStream_procs'>procs</a>-><a href='#SkDeserialProcs_fPictureProc'>fPictureProc</a>; <a href='#SkPicture_MakeFromStream_procs'>procs</a>-><a href='#SkDeserialProcs_fPictureProc'>fPictureProc</a>
    139 is called with a pointer to <a href='undocumented#Data'>data</a>, <a href='undocumented#Data'>data</a> byte length, and user context.
    140 
    141 ### Parameters
    142 
    143 <table>  <tr>    <td><a name='SkPicture_MakeFromStream_stream'><code><strong>stream</strong></code></a></td>
    144     <td>container for serial <a href='undocumented#Data'>data</a></td>
    145   </tr>
    146   <tr>    <td><a name='SkPicture_MakeFromStream_procs'><code><strong>procs</strong></code></a></td>
    147     <td>custom serial <a href='undocumented#Data'>data</a> decoders; may be nullptr</td>
    148   </tr>
    149 </table>
    150 
    151 ### Return Value
    152 
    153 <a href='SkPicture_Reference#SkPicture'>SkPicture</a> constructed from <a href='#SkPicture_MakeFromStream_stream'>stream</a> <a href='undocumented#Data'>data</a>
    154 
    155 ### Example
    156 
    157 <div><fiddle-embed name="404fb42560a289c2004cad1caf3b96de"></fiddle-embed></div>
    158 
    159 ### See Also
    160 
    161 <a href='#SkPicture_MakeFromData'>MakeFromData</a> <a href='undocumented#SkPictureRecorder'>SkPictureRecorder</a>
    162 
    163 <a name='SkPicture_MakeFromData'></a>
    164 
    165 ---
    166 
    167 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    168 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkPicture_Reference#SkPicture'>SkPicture</a>&gt; <a href='#SkPicture_MakeFromData'>MakeFromData</a>(const <a href='undocumented#SkData'>SkData</a>* <a href='undocumented#Data'>data</a>, const <a href='undocumented#SkDeserialProcs'>SkDeserialProcs</a>* procs = nullptr)
    169 </pre>
    170 
    171 Recreates <a href='SkPicture_Reference#SkPicture'>SkPicture</a> that was serialized into <a href='#SkPicture_MakeFromData_data'>data</a>. Returns constructed <a href='SkPicture_Reference#SkPicture'>SkPicture</a>
    172 if successful; otherwise, returns nullptr. Fails if <a href='#SkPicture_MakeFromData_data'>data</a> does not permit
    173 constructing valid <a href='SkPicture_Reference#SkPicture'>SkPicture</a>.
    174 
    175 <a href='#SkPicture_MakeFromData_procs'>procs</a>-><a href='#SkDeserialProcs_fPictureProc'>fPictureProc</a> permits supplying a custom function to decode <a href='SkPicture_Reference#SkPicture'>SkPicture</a>.
    176 If <a href='#SkPicture_MakeFromData_procs'>procs</a>-><a href='#SkDeserialProcs_fPictureProc'>fPictureProc</a> is nullptr, default decoding is used. <a href='#SkPicture_MakeFromData_procs'>procs</a>-><a href='#SkDeserialProcs_fPictureCtx'>fPictureCtx</a>
    177 may be used to provide user context to <a href='#SkPicture_MakeFromData_procs'>procs</a>-><a href='#SkDeserialProcs_fPictureProc'>fPictureProc</a>; <a href='#SkPicture_MakeFromData_procs'>procs</a>-><a href='#SkDeserialProcs_fPictureProc'>fPictureProc</a>
    178 is called with a pointer to <a href='#SkPicture_MakeFromData_data'>data</a>, <a href='#SkPicture_MakeFromData_data'>data</a> byte length, and user context.
    179 
    180 ### Parameters
    181 
    182 <table>  <tr>    <td><a name='SkPicture_MakeFromData_data'><code><strong>data</strong></code></a></td>
    183     <td>container for serial <a href='#SkPicture_MakeFromData_data'>data</a></td>
    184   </tr>
    185   <tr>    <td><a name='SkPicture_MakeFromData_procs'><code><strong>procs</strong></code></a></td>
    186     <td>custom serial <a href='#SkPicture_MakeFromData_data'>data</a> decoders; may be nullptr</td>
    187   </tr>
    188 </table>
    189 
    190 ### Return Value
    191 
    192 <a href='SkPicture_Reference#SkPicture'>SkPicture</a> constructed from <a href='#SkPicture_MakeFromData_data'>data</a>
    193 
    194 ### Example
    195 
    196 <div><fiddle-embed name="58b44bf47d8816782066618700afdecb"></fiddle-embed></div>
    197 
    198 ### See Also
    199 
    200 <a href='#SkPicture_MakeFromStream'>MakeFromStream</a> <a href='undocumented#SkPictureRecorder'>SkPictureRecorder</a>
    201 
    202 <a name='SkPicture_MakeFromData_2'></a>
    203 
    204 ---
    205 
    206 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    207 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkPicture_Reference#SkPicture'>SkPicture</a>&gt; <a href='#SkPicture_MakeFromData'>MakeFromData</a>(const void* <a href='undocumented#Data'>data</a>, size_t <a href='undocumented#Size'>size</a>,
    208                                      const <a href='undocumented#SkDeserialProcs'>SkDeserialProcs</a>* procs = nullptr)
    209 </pre>
    210 
    211 ### Parameters
    212 
    213 <table>  <tr>    <td><a name='SkPicture_MakeFromData_2_data'><code><strong>data</strong></code></a></td>
    214     <td>pointer to serial <a href='#SkPicture_MakeFromData_2_data'>data</a></td>
    215   </tr>
    216   <tr>    <td><a name='SkPicture_MakeFromData_2_size'><code><strong>size</strong></code></a></td>
    217     <td><a href='#SkPicture_MakeFromData_2_size'>size</a> of <a href='#SkPicture_MakeFromData_2_data'>data</a></td>
    218   </tr>
    219   <tr>    <td><a name='SkPicture_MakeFromData_2_procs'><code><strong>procs</strong></code></a></td>
    220     <td>custom serial <a href='#SkPicture_MakeFromData_2_data'>data</a> decoders; may be nullptr</td>
    221   </tr>
    222 </table>
    223 
    224 ### Return Value
    225 
    226 <a href='SkPicture_Reference#SkPicture'>SkPicture</a> constructed from <a href='#SkPicture_MakeFromData_2_data'>data</a>
    227 
    228 ### Example
    229 
    230 <div><fiddle-embed name="30b9f1b310187db6aff720a5d67591e2"></fiddle-embed></div>
    231 
    232 ### See Also
    233 
    234 <a href='#SkPicture_MakeFromStream'>MakeFromStream</a> <a href='undocumented#SkPictureRecorder'>SkPictureRecorder</a>
    235 
    236 <a name='SkPicture_playback'></a>
    237 
    238 ---
    239 
    240 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    241 virtual void playback(<a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>* <a href='SkCanvas_Reference#Canvas'>canvas</a>, <a href='#SkPicture_AbortCallback'>AbortCallback</a>* callback = nullptr) const = 0
    242 </pre>
    243 
    244 Replays the drawing commands on the specified <a href='#SkPicture_playback_canvas'>canvas</a>. In the case that the
    245 commands are recorded, each command in the <a href='SkPicture_Reference#SkPicture'>SkPicture</a> is sent separately to <a href='#SkPicture_playback_canvas'>canvas</a>.
    246 
    247 To add a single command to draw <a href='SkPicture_Reference#SkPicture'>SkPicture</a> to recording <a href='#SkPicture_playback_canvas'>canvas</a>, call
    248 <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawPicture'>drawPicture</a> instead.
    249 
    250 ### Parameters
    251 
    252 <table>  <tr>    <td><a name='SkPicture_playback_canvas'><code><strong>canvas</strong></code></a></td>
    253     <td>receiver of drawing commands</td>
    254   </tr>
    255   <tr>    <td><a name='SkPicture_playback_callback'><code><strong>callback</strong></code></a></td>
    256     <td>allows interruption of playback</td>
    257   </tr>
    258 </table>
    259 
    260 ### Example
    261 
    262 <div><fiddle-embed name="6b0ffb03ba05f526b345dc65a1c73fe4"></fiddle-embed></div>
    263 
    264 ### See Also
    265 
    266 <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawPicture'>drawPicture</a>
    267 
    268 <a name='SkPicture_cullRect'></a>
    269 
    270 ---
    271 
    272 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    273 virtual <a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPicture_cullRect'>cullRect</a>() const = 0
    274 </pre>
    275 
    276 Returns cull <a href='SkRect_Reference#SkRect'>SkRect</a> for this <a href='SkPicture_Reference#Picture'>picture</a>, passed in when <a href='SkPicture_Reference#SkPicture'>SkPicture</a> was created.
    277 Returned <a href='SkRect_Reference#SkRect'>SkRect</a> does not specify clipping <a href='SkRect_Reference#SkRect'>SkRect</a> for <a href='SkPicture_Reference#SkPicture'>SkPicture</a>; cull is hint
    278 of <a href='SkPicture_Reference#SkPicture'>SkPicture</a> bounds.
    279 
    280 <a href='SkPicture_Reference#SkPicture'>SkPicture</a> is free to discard recorded drawing commands that fall outside
    281 cull.
    282 
    283 ### Return Value
    284 
    285 bounds passed when <a href='SkPicture_Reference#SkPicture'>SkPicture</a> was created
    286 
    287 ### Example
    288 
    289 <div><fiddle-embed name="15bb9a9596b40c5e2045f76e8c1dcf8e"><div><a href='SkPicture_Reference#Picture'>Picture</a> recorded bounds are smaller than contents; contents outside recorded
    290 bounds may be drawn, and are drawn in this example.
    291 </div></fiddle-embed></div>
    292 
    293 ### See Also
    294 
    295 <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_clipRect'>clipRect</a>
    296 
    297 <a name='SkPicture_uniqueID'></a>
    298 
    299 ---
    300 
    301 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    302 uint32_t <a href='#SkPicture_uniqueID'>uniqueID</a>()const
    303 </pre>
    304 
    305 Returns a non-zero value unique among <a href='SkPicture_Reference#SkPicture'>SkPicture</a> in Skia process.
    306 
    307 ### Return Value
    308 
    309 identifier for <a href='SkPicture_Reference#SkPicture'>SkPicture</a>
    310 
    311 ### Example
    312 
    313 <div><fiddle-embed name="8e4257245c988c600410fe4fd7293f07">
    314 
    315 #### Example Output
    316 
    317 ~~~~
    318 empty picture id = 1
    319 placeholder id = 2
    320 ~~~~
    321 
    322 </fiddle-embed></div>
    323 
    324 ### See Also
    325 
    326 <a href='undocumented#SkRefCnt'>SkRefCnt</a>
    327 
    328 <a name='SkPicture_serialize'></a>
    329 
    330 ---
    331 
    332 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    333 <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkData'>SkData</a>&gt; <a href='#SkPicture_serialize'>serialize</a>(const <a href='undocumented#SkSerialProcs'>SkSerialProcs</a>* procs = nullptr)const
    334 </pre>
    335 
    336 Returns storage containing <a href='undocumented#SkData'>SkData</a> describing <a href='SkPicture_Reference#SkPicture'>SkPicture</a>, using optional custom
    337 encoders.
    338 
    339 <a href='#SkPicture_serialize_procs'>procs</a>-><a href='#SkSerialProcs_fPictureProc'>fPictureProc</a> permits supplying a custom function to encode <a href='SkPicture_Reference#SkPicture'>SkPicture</a>.
    340 If <a href='#SkPicture_serialize_procs'>procs</a>-><a href='#SkSerialProcs_fPictureProc'>fPictureProc</a> is nullptr, default encoding is used. <a href='#SkPicture_serialize_procs'>procs</a>-><a href='#SkSerialProcs_fPictureCtx'>fPictureCtx</a>
    341 may be used to provide user context to <a href='#SkPicture_serialize_procs'>procs</a>-><a href='#SkSerialProcs_fPictureProc'>fPictureProc</a>; <a href='#SkPicture_serialize_procs'>procs</a>-><a href='#SkSerialProcs_fPictureProc'>fPictureProc</a>
    342 is called with a pointer to <a href='SkPicture_Reference#SkPicture'>SkPicture</a> and user context.
    343 
    344 ### Parameters
    345 
    346 <table>  <tr>    <td><a name='SkPicture_serialize_procs'><code><strong>procs</strong></code></a></td>
    347     <td>custom serial <a href='undocumented#Data'>data</a> encoders; may be nullptr</td>
    348   </tr>
    349 </table>
    350 
    351 ### Return Value
    352 
    353 storage containing serialized <a href='SkPicture_Reference#SkPicture'>SkPicture</a>
    354 
    355 ### Example
    356 
    357 <div><fiddle-embed name="dacdebe1355c884ebd3c2ea038cc7a20"></fiddle-embed></div>
    358 
    359 ### See Also
    360 
    361 <a href='#SkPicture_MakeFromData'>MakeFromData</a> <a href='undocumented#SkData'>SkData</a> <a href='undocumented#SkSerialProcs'>SkSerialProcs</a>
    362 
    363 <a name='SkPicture_serialize_2'></a>
    364 
    365 ---
    366 
    367 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    368 void <a href='#SkPicture_serialize'>serialize</a>(<a href='SkWStream_Reference#SkWStream'>SkWStream</a>* <a href='SkStream_Reference#Stream'>stream</a>, const <a href='undocumented#SkSerialProcs'>SkSerialProcs</a>* procs = nullptr)const
    369 </pre>
    370 
    371 Writes <a href='SkPicture_Reference#Picture'>picture</a> to <a href='#SkPicture_serialize_2_stream'>stream</a>, using optional custom encoders.
    372 
    373 <a href='#SkPicture_serialize_2_procs'>procs</a>-><a href='#SkSerialProcs_fPictureProc'>fPictureProc</a> permits supplying a custom function to encode <a href='SkPicture_Reference#SkPicture'>SkPicture</a>.
    374 If <a href='#SkPicture_serialize_2_procs'>procs</a>-><a href='#SkSerialProcs_fPictureProc'>fPictureProc</a> is nullptr, default encoding is used. <a href='#SkPicture_serialize_2_procs'>procs</a>-><a href='#SkSerialProcs_fPictureCtx'>fPictureCtx</a>
    375 may be used to provide user context to <a href='#SkPicture_serialize_2_procs'>procs</a>-><a href='#SkSerialProcs_fPictureProc'>fPictureProc</a>; <a href='#SkPicture_serialize_2_procs'>procs</a>-><a href='#SkSerialProcs_fPictureProc'>fPictureProc</a>
    376 is called with a pointer to <a href='SkPicture_Reference#SkPicture'>SkPicture</a> and user context.
    377 
    378 ### Parameters
    379 
    380 <table>  <tr>    <td><a name='SkPicture_serialize_2_stream'><code><strong>stream</strong></code></a></td>
    381     <td>writable serial <a href='undocumented#Data'>data</a> <a href='#SkPicture_serialize_2_stream'>stream</a></td>
    382   </tr>
    383   <tr>    <td><a name='SkPicture_serialize_2_procs'><code><strong>procs</strong></code></a></td>
    384     <td>custom serial <a href='undocumented#Data'>data</a> encoders; may be nullptr</td>
    385   </tr>
    386 </table>
    387 
    388 ### Example
    389 
    390 <div><fiddle-embed name="30b9f1b310187db6aff720a5d67591e2"></fiddle-embed></div>
    391 
    392 ### See Also
    393 
    394 <a href='#SkPicture_MakeFromStream'>MakeFromStream</a> <a href='SkWStream_Reference#SkWStream'>SkWStream</a> <a href='undocumented#SkSerialProcs'>SkSerialProcs</a>
    395 
    396 <a name='SkPicture_MakePlaceholder'></a>
    397 
    398 ---
    399 
    400 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    401 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkPicture_Reference#SkPicture'>SkPicture</a>&gt; <a href='#SkPicture_MakePlaceholder'>MakePlaceholder</a>(<a href='SkRect_Reference#SkRect'>SkRect</a> cull)
    402 </pre>
    403 
    404 Returns a placeholder <a href='SkPicture_Reference#SkPicture'>SkPicture</a>. Result does not draw, and contains only
    405 <a href='#SkPicture_MakePlaceholder_cull'>cull</a> <a href='SkRect_Reference#SkRect'>SkRect</a>, a hint of its bounds. Result is immutable; it cannot be changed
    406 later. Result identifier is unique.
    407 
    408 Returned placeholder can be intercepted during playback to insert other
    409 commands into <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> draw <a href='SkStream_Reference#Stream'>stream</a>.
    410 
    411 ### Parameters
    412 
    413 <table>  <tr>    <td><a name='SkPicture_MakePlaceholder_cull'><code><strong>cull</strong></code></a></td>
    414     <td>placeholder dimensions</td>
    415   </tr>
    416 </table>
    417 
    418 ### Return Value
    419 
    420 placeholder with unique identifier
    421 
    422 ### Example
    423 
    424 <div><fiddle-embed name="0d2cbf82f490ffb180e0b4531afa232c"></fiddle-embed></div>
    425 
    426 ### See Also
    427 
    428 <a href='#SkPicture_MakeFromStream'>MakeFromStream</a> <a href='#SkPicture_MakeFromData'>MakeFromData</a> <a href='#SkPicture_uniqueID'>uniqueID</a>
    429 
    430 <a name='SkPicture_approximateOpCount'></a>
    431 
    432 ---
    433 
    434 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    435 virtual int <a href='#SkPicture_approximateOpCount'>approximateOpCount</a>() const = 0
    436 </pre>
    437 
    438 Returns the approximate number of operations in <a href='SkPicture_Reference#SkPicture'>SkPicture</a>. Returned value
    439 may be greater or less than the number of <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> calls
    440 recorded: some calls may be recorded as more than one operation, other
    441 calls may be optimized away.
    442 
    443 ### Return Value
    444 
    445 approximate operation count
    446 
    447 ### Example
    448 
    449 <div><fiddle-embed name="4b3d879118ef770d1f11a23c6493b2c4"></fiddle-embed></div>
    450 
    451 ### See Also
    452 
    453 <a href='#SkPicture_approximateBytesUsed'>approximateBytesUsed</a>
    454 
    455 <a name='SkPicture_approximateBytesUsed'></a>
    456 
    457 ---
    458 
    459 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    460 virtual size_t <a href='#SkPicture_approximateBytesUsed'>approximateBytesUsed</a>() const = 0
    461 </pre>
    462 
    463 Returns the approximate byte <a href='undocumented#Size'>size</a> of <a href='SkPicture_Reference#SkPicture'>SkPicture</a>. Does not include large objects
    464 referenced by <a href='SkPicture_Reference#SkPicture'>SkPicture</a>.
    465 
    466 ### Return Value
    467 
    468 approximate <a href='undocumented#Size'>size</a>
    469 
    470 ### Example
    471 
    472 <div><fiddle-embed name="ececbda21218bd732394a305dba393a2"></fiddle-embed></div>
    473 
    474 ### See Also
    475 
    476 <a href='#SkPicture_approximateOpCount'>approximateOpCount</a>
    477 
    478