1SkImage Reference
2===
3
4# <a name="Image"></a> Image
5
6## <a name="Overview"></a> Overview
7
8## <a name="Subtopics"></a> Subtopics
9
10| name | description |
11| --- | --- |
12| <a href="#Classes_and_Structs">Classes and Structs</a> | embedded struct and class members |
13| Constants | enum and enum class, const values |
14| <a href="#Constructors">Constructors</a> | functions that construct <a href="SkImage_Reference#SkImage">SkImage</a> |
15| <a href="#Member_Functions">Member Functions</a> | static functions and member methods |
16| <a href="#Related_Functions">Related Functions</a> | similar methods grouped together |
17
18# <a name="SkImage"></a> Class SkImage
19<a href="#Image">Image</a> describes a two dimensional array of pixels to draw. The pixels may be
20unencoded in a <a href="undocumented#Raster_Bitmap">Raster Bitmap</a>, encoded in a <a href="undocumented#Picture">Picture</a> or compressed data stream,
21or located in GPU memory as a <a href="undocumented#GPU_Texture">GPU Texture</a>.
22
23<a href="#Image">Image</a> cannot be modified after it is created. <a href="#Image">Image</a> may allocate additional
24storage as needed; for instance, an encoded <a href="#Image">Image</a> may decode when drawn.
25
26<a href="#Image">Image</a> width and height are greater than zero. Creating an <a href="#Image">Image</a> with zero width
27or height returns <a href="#Image">Image</a> equal to nullptr.
28
29<a href="#Image">Image</a> may be created from <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, <a href="SkPixmap_Reference#Pixmap">Pixmap</a>, <a href="SkSurface_Reference#Surface">Surface</a>, <a href="undocumented#Picture">Picture</a>, encoded streams,
30<a href="undocumented#GPU_Texture">GPU Texture</a>, <a href="undocumented#YUV_ColorSpace">YUV ColorSpace</a> data, or hardware buffer. Encoded streams supported
31include BMP, GIF, HEIF, ICO, JPEG, PNG, WBMP, WebP. Supported encodings details
32vary with platform.
33
34## <a name="Raster_Image"></a> Raster Image
35
36<a href="SkImage_Reference#Raster_Image">Raster Image</a> pixels are unencoded in a <a href="undocumented#Raster_Bitmap">Raster Bitmap</a>. These pixels may be read
37directly and in most cases written to, although edited pixels may not be drawn
38if <a href="#Image">Image</a> has been copied internally.
39
40## <a name="Texture_Image"></a> Texture Image
41
42<a href="#Texture_Image">Texture Image</a> are located on GPU and pixels are not accessible. <a href="#Texture_Image">Texture Image</a>
43are allocated optimally for best performance. <a href="SkImage_Reference#Raster_Image">Raster Image</a> may
44be drawn to <a href="undocumented#GPU_Surface">GPU Surface</a>, but pixels are uploaded from CPU to GPU downgrading
45performance.
46
47## <a name="Lazy_Image"></a> Lazy Image
48
49<a href="#Lazy_Image">Lazy Image</a> defer allocating buffer for <a href="#Image">Image</a> pixels and decoding stream until
50<a href="#Image">Image</a> is drawn. <a href="#Lazy_Image">Lazy Image</a> caches result if possible to speed up repeated
51drawing.
52
53## <a name="Related_Functions"></a> Related Functions
54
55| name | description |
56| --- | --- |
57| <a href="#Lazy_Image">Lazy Image</a> | deferred pixel buffer |
58| <a href="SkImage_Reference#Raster_Image">Raster Image</a> | pixels unencoded in <a href="undocumented#Raster_Bitmap">Raster Bitmap</a> |
59| <a href="#Texture_Image">Texture Image</a> | pixels located on GPU |
60
61## <a name="Classes_and_Structs"></a> Classes and Structs
62
63| name | description |
64| --- | --- |
65| <a href="#SkImage_DeferredTextureImageUsageParams">DeferredTextureImageUsageParams</a> | to be deprecated |
66
67## <a name="Constructors"></a> Constructors
68
69| name | description |
70| --- | --- |
71| <a href="#SkImage_MakeBackendTextureFromSkImage">MakeBackendTextureFromSkImage</a> | Creates <a href="undocumented#GPU_Texture">GPU Texture</a> from <a href="#Image">Image</a>. |
72| <a href="#SkImage_MakeCrossContextFromEncoded">MakeCrossContextFromEncoded</a> | Creates <a href="#Image">Image</a> from encoded data, and uploads to GPU. |
73| <a href="#SkImage_MakeCrossContextFromPixmap">MakeCrossContextFromPixmap</a> | Creates <a href="#Image">Image</a> from <a href="SkPixmap_Reference#Pixmap">Pixmap</a>, and uploads to GPU. |
74| <a href="#SkImage_MakeFromAHardwareBuffer">MakeFromAHardwareBuffer</a> | Creates <a href="#Image">Image</a> from Android hardware buffer. |
75| <a href="#SkImage_MakeFromAdoptedTexture">MakeFromAdoptedTexture</a> | Creates <a href="#Image">Image</a> from <a href="undocumented#GPU_Texture">GPU Texture</a>, managed internally. |
76| <a href="#SkImage_MakeFromBitmap">MakeFromBitmap</a> | Creates <a href="#Image">Image</a> from <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, sharing or copying pixels. |
77| <a href="#SkImage_MakeFromDeferredTextureImageData">MakeFromDeferredTextureImageData</a> | To be deprecated. |
78| <a href="#SkImage_MakeFromEncoded">MakeFromEncoded</a> | Creates <a href="#Image">Image</a> from encoded data. |
79| <a href="#SkImage_MakeFromGenerator">MakeFromGenerator</a> | Creates <a href="#Image">Image</a> from a stream of data. |
80| <a href="#SkImage_MakeFromNV12TexturesCopy">MakeFromNV12TexturesCopy</a> | Creates <a href="#Image">Image</a> from <a href="undocumented#YUV_ColorSpace">YUV ColorSpace</a> data in two planes. |
81| <a href="#SkImage_MakeFromPicture">MakeFromPicture</a> | Creates <a href="#Image">Image</a> from <a href="undocumented#Picture">Picture</a>. |
82| <a href="#SkImage_MakeFromRaster">MakeFromRaster</a> | Creates <a href="#Image">Image</a> from <a href="SkPixmap_Reference#Pixmap">Pixmap</a>, with release. |
83| <a href="#SkImage_MakeFromTexture">MakeFromTexture</a> | Creates <a href="#Image">Image</a> from <a href="undocumented#GPU_Texture">GPU Texture</a>, managed externally. |
84| <a href="#SkImage_MakeFromYUVTexturesCopy">MakeFromYUVTexturesCopy</a> | Creates <a href="#Image">Image</a> from <a href="undocumented#YUV_ColorSpace">YUV ColorSpace</a> data in three planes. |
85| <a href="#SkImage_MakeRasterCopy">MakeRasterCopy</a> | Creates <a href="#Image">Image</a> from <a href="SkPixmap_Reference#Pixmap">Pixmap</a> and copied pixels. |
86| <a href="#SkImage_MakeRasterData">MakeRasterData</a> | Creates <a href="#Image">Image</a> from <a href="#Info">Image Info</a> and shared pixels. |
87| <a href="#SkImage_makeColorSpace">makeColorSpace</a> | Creates <a href="#Image">Image</a> matching <a href="undocumented#Color_Space">Color Space</a> if possible. |
88| <a href="#SkImage_makeNonTextureImage">makeNonTextureImage</a> | Creates <a href="#Image">Image</a> without dependency on <a href="undocumented#GPU_Texture">GPU Texture</a>. |
89| <a href="#SkImage_makeRasterImage">makeRasterImage</a> | Creates <a href="#Image">Image</a> compatible with <a href="undocumented#Raster_Surface">Raster Surface</a> if possible. |
90| <a href="#SkImage_makeShader">makeShader</a> | Creates <a href="undocumented#Shader">Shader</a>, <a href="SkPaint_Reference#Paint">Paint</a> element that can tile <a href="#Image">Image</a>. |
91| <a href="#SkImage_makeSubset">makeSubset</a> | Creates <a href="#Image">Image</a> containing part of original. |
92| <a href="#SkImage_makeTextureImage">makeTextureImage</a> | Creates <a href="#Image">Image</a> matching <a href="undocumented#Color_Space">Color Space</a> if possible. |
93| <a href="#SkImage_makeWithFilter">makeWithFilter</a> | Creates filtered, clipped <a href="#Image">Image</a>. |
94
95## <a name="Member_Functions"></a> Member Functions
96
97| name | description |
98| --- | --- |
99| <a href="#SkImage_MakeBackendTextureFromSkImage">MakeBackendTextureFromSkImage</a> | Creates <a href="undocumented#GPU_Texture">GPU Texture</a> from <a href="#Image">Image</a>. |
100| <a href="#SkImage_MakeCrossContextFromEncoded">MakeCrossContextFromEncoded</a> | Creates <a href="#Image">Image</a> from encoded data, and uploads to GPU. |
101| <a href="#SkImage_MakeCrossContextFromPixmap">MakeCrossContextFromPixmap</a> | Creates <a href="#Image">Image</a> from <a href="SkPixmap_Reference#Pixmap">Pixmap</a>, and uploads to GPU. |
102| <a href="#SkImage_MakeFromAHardwareBuffer">MakeFromAHardwareBuffer</a> | Creates <a href="#Image">Image</a> from Android hardware buffer. |
103| <a href="#SkImage_MakeFromAdoptedTexture">MakeFromAdoptedTexture</a> | Creates <a href="#Image">Image</a> from <a href="undocumented#GPU_Texture">GPU Texture</a>, managed internally. |
104| <a href="#SkImage_MakeFromBitmap">MakeFromBitmap</a> | Creates <a href="#Image">Image</a> from <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, sharing or copying pixels. |
105| <a href="#SkImage_MakeFromDeferredTextureImageData">MakeFromDeferredTextureImageData</a> | To be deprecated. |
106| <a href="#SkImage_MakeFromEncoded">MakeFromEncoded</a> | Creates <a href="#Image">Image</a> from encoded data. |
107| <a href="#SkImage_MakeFromGenerator">MakeFromGenerator</a> | Creates <a href="#Image">Image</a> from a stream of data. |
108| <a href="#SkImage_MakeFromNV12TexturesCopy">MakeFromNV12TexturesCopy</a> | Creates <a href="#Image">Image</a> from <a href="undocumented#YUV_ColorSpace">YUV ColorSpace</a> data in two planes. |
109| <a href="#SkImage_MakeFromPicture">MakeFromPicture</a> | Creates <a href="#Image">Image</a> from <a href="undocumented#Picture">Picture</a>. |
110| <a href="#SkImage_MakeFromRaster">MakeFromRaster</a> | Creates <a href="#Image">Image</a> from <a href="SkPixmap_Reference#Pixmap">Pixmap</a>, with release. |
111| <a href="#SkImage_MakeFromTexture">MakeFromTexture</a> | Creates <a href="#Image">Image</a> from <a href="undocumented#GPU_Texture">GPU Texture</a>, managed externally. |
112| <a href="#SkImage_MakeFromYUVTexturesCopy">MakeFromYUVTexturesCopy</a> | Creates <a href="#Image">Image</a> from <a href="undocumented#YUV_ColorSpace">YUV ColorSpace</a> data in three planes. |
113| <a href="#SkImage_MakeRasterCopy">MakeRasterCopy</a> | Creates <a href="#Image">Image</a> from <a href="SkPixmap_Reference#Pixmap">Pixmap</a> and copied pixels. |
114| <a href="#SkImage_MakeRasterData">MakeRasterData</a> | Creates <a href="#Image">Image</a> from <a href="#Info">Image Info</a> and shared pixels. |
115| <a href="#SkImage_alphaType">alphaType</a> | Returns <a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a>. |
116| <a href="#SkImage_asLegacyBitmap">asLegacyBitmap</a> | Returns as <a href="undocumented#Raster_Bitmap">Raster Bitmap</a>. |
117| <a href="#SkImage_bounds">bounds</a> | Returns <a href="#SkImage_width">width</a> and <a href="#SkImage_height">height</a> as Rectangle. |
118| <a href="#SkImage_colorSpace">colorSpace</a> | Returns <a href="undocumented#Color_Space">Color Space</a>. |
119| <a href="#SkImage_dimensions">dimensions</a> | Returns <a href="#SkImage_width">width</a> and <a href="#SkImage_height">height</a>. |
120| <a href="#SkImage_encodeToData">encodeToData</a> | Returns encoded <a href="#Image">Image</a> as <a href="undocumented#SkData">SkData</a>. |
121| <a href="#SkImage_getDeferredTextureImageData">getDeferredTextureImageData</a> | To be deprecated. |
122| <a href="#SkImage_getTexture">getTexture</a> | Deprecated. |
123| <a href="#SkImage_getTextureHandle">getTextureHandle</a> | Returns GPU reference to <a href="#Image">Image</a> as texture. |
124| <a href="#SkImage_height">height</a> | Returns pixel row count. |
125| <a href="#SkImage_isAlphaOnly">isAlphaOnly</a> | Returns if pixels represent a transparency mask. |
126| <a href="#SkImage_isLazyGenerated">isLazyGenerated</a> | Returns if <a href="#Image">Image</a> is created as needed. |
127| <a href="#SkImage_isOpaque">isOpaque</a> | Returns if <a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a> is <a href="SkImageInfo_Reference#SkAlphaType">kOpaque SkAlphaType</a>. |
128| <a href="#SkImage_isTextureBacked">isTextureBacked</a> | Returns if <a href="#Image">Image</a> was created from <a href="undocumented#GPU_Texture">GPU Texture</a>. |
129| <a href="#SkImage_isValid">isValid</a> | Returns if <a href="#Image">Image</a> can draw to <a href="undocumented#Raster_Surface">Raster Surface</a> or <a href="undocumented#GPU_Context">GPU Context</a>. |
130| <a href="#SkImage_makeColorSpace">makeColorSpace</a> | Creates <a href="#Image">Image</a> matching <a href="undocumented#Color_Space">Color Space</a> if possible. |
131| <a href="#SkImage_makeNonTextureImage">makeNonTextureImage</a> | Creates <a href="#Image">Image</a> without dependency on <a href="undocumented#GPU_Texture">GPU Texture</a>. |
132| <a href="#SkImage_makeRasterImage">makeRasterImage</a> | Creates <a href="#Image">Image</a> compatible with <a href="undocumented#Raster_Surface">Raster Surface</a> if possible. |
133| <a href="#SkImage_makeShader">makeShader</a> | Creates <a href="undocumented#Shader">Shader</a>, <a href="SkPaint_Reference#Paint">Paint</a> element that can tile <a href="#Image">Image</a>. |
134| <a href="#SkImage_makeSubset">makeSubset</a> | Creates <a href="#Image">Image</a> containing part of original. |
135| <a href="#SkImage_makeTextureImage">makeTextureImage</a> | Creates <a href="#Image">Image</a> matching <a href="undocumented#Color_Space">Color Space</a> if possible. |
136| <a href="#SkImage_makeWithFilter">makeWithFilter</a> | Creates filtered, clipped <a href="#Image">Image</a>. |
137| <a href="#SkImage_peekPixels">peekPixels</a> | Returns <a href="SkPixmap_Reference#Pixmap">Pixmap</a> if possible. |
138| <a href="#SkImage_readPixels">readPixels</a> | Copies and converts pixels. |
139| <a href="#SkImage_refColorSpace">refColorSpace</a> | Returns <a href="#Info">Image Info</a> <a href="undocumented#Color_Space">Color Space</a>. |
140| <a href="#SkImage_refEncodedData">refEncodedData</a> | Returns <a href="#Image">Image</a> encoded in <a href="undocumented#SkData">SkData</a> if present. |
141| <a href="#SkImage_scalePixels">scalePixels</a> | Scales and converts one <a href="#Image">Image</a> to another. |
142| <a href="#SkImage_toString">toString</a> | Converts <a href="#Image">Image</a> to machine readable form. |
143| <a href="#SkImage_uniqueID">uniqueID</a> | Identifier for <a href="#Image">Image</a>. |
144| <a href="#SkImage_width">width</a> | Returns pixel column count. |
145
146<a name="SkImage_MakeRasterCopy"></a>
147## MakeRasterCopy
148
149<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
150static sk_sp&lt;SkImage&gt; MakeRasterCopy(const SkPixmap& pixmap)
151</pre>
152
153Creates <a href="#Image">Image</a> from <a href="SkPixmap_Reference#Pixmap">Pixmap</a> and copy of pixels. Since pixels are copied, <a href="SkPixmap_Reference#Pixmap">Pixmap</a>
154pixels may be modified or deleted without affecting <a href="#Image">Image</a>.
155
156<a href="#Image">Image</a> is returned if <a href="SkPixmap_Reference#Pixmap">Pixmap</a> is valid. Valid <a href="SkPixmap_Reference#Pixmap">Pixmap</a> parameters include:
157dimensions are greater than zero;
158each dimension fits in 29 bits;
159<a href="SkImageInfo_Reference#Color_Type">Color Type</a> and <a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a> are valid, and <a href="SkImageInfo_Reference#Color_Type">Color Type</a> is not <a href="SkImageInfo_Reference#SkColorType">kUnknown SkColorType</a>;
160row bytes are large enough to hold one row of pixels;
161pixel address is not nullptr.
162
163### Parameters
164
165<table>  <tr>    <td><a name="SkImage_MakeRasterCopy_pixmap"> <code><strong>pixmap </strong></code> </a></td> <td>
166<a href="#Info">Image Info</a>, pixel address, and row bytes</td>
167  </tr>
168</table>
169
170### Return Value
171
172copy of <a href="SkPixmap_Reference#Pixmap">Pixmap</a> pixels, or nullptr
173
174### Example
175
176<div><fiddle-embed name="513afec5795a9504ebf6af5373d16b6b"><div>Draw a five by five bitmap, and draw a copy in an <a href="#Image">Image</a>. Editing the <a href="#SkImage_MakeRasterCopy_pixmap">pixmap</a>
177alters the bitmap draw, but does not alter the <a href="#Image">Image</a> draw since the <a href="#Image">Image</a>
178contains a copy of the pixels.</div></fiddle-embed></div>
179
180### See Also
181
182<a href="#SkImage_MakeRasterData">MakeRasterData</a> <a href="#SkImage_MakeFromGenerator">MakeFromGenerator</a>
183
184---
185
186<a name="SkImage_MakeRasterData"></a>
187## MakeRasterData
188
189<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
190static sk_sp&lt;SkImage&gt; MakeRasterData(const Info& info, sk_sp&lt;SkData&gt; pixels, size_t rowBytes)
191</pre>
192
193Creates <a href="#Image">Image</a> from <a href="#Info">Image Info</a>, sharing <a href="#SkImage_MakeRasterData_pixels">pixels</a>.
194
195<a href="#Image">Image</a> is returned if <a href="#Info">Image Info</a> is valid. Valid <a href="#Info">Image Info</a> parameters include:
196dimensions are greater than zero;
197each dimension fits in 29 bits;
198<a href="SkImageInfo_Reference#Color_Type">Color Type</a> and <a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a> are valid, and <a href="SkImageInfo_Reference#Color_Type">Color Type</a> is not <a href="SkImageInfo_Reference#SkColorType">kUnknown SkColorType</a>;
199<a href="#SkImage_MakeRasterData_rowBytes">rowBytes</a> are large enough to hold one row of <a href="#SkImage_MakeRasterData_pixels">pixels</a>;
200<a href="#SkImage_MakeRasterData_pixels">pixels</a> is not nullptr, and contains enough data for <a href="#Image">Image</a>.
201
202### Parameters
203
204<table>  <tr>    <td><a name="SkImage_MakeRasterData_info"> <code><strong>info </strong></code> </a></td> <td>
205contains width, height, <a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a>, <a href="SkImageInfo_Reference#Color_Type">Color Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
206  </tr>  <tr>    <td><a name="SkImage_MakeRasterData_pixels"> <code><strong>pixels </strong></code> </a></td> <td>
207address or pixel storage</td>
208  </tr>  <tr>    <td><a name="SkImage_MakeRasterData_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
209size of pixel row or larger</td>
210  </tr>
211</table>
212
213### Return Value
214
215<a href="#Image">Image</a> sharing <a href="#SkImage_MakeRasterData_pixels">pixels</a>, or nullptr
216
217### Example
218
219<div><fiddle-embed name="367bdf6ee6ef2482eea95d4a9887c9b0"></fiddle-embed></div>
220
221### See Also
222
223<a href="#SkImage_MakeRasterCopy">MakeRasterCopy</a> <a href="#SkImage_MakeFromGenerator">MakeFromGenerator</a>
224
225---
226
227Caller data passed to <a href="#SkImage_RasterReleaseProc">RasterReleaseProc</a>; may be nullptr.
228
229### See Also
230
231<a href="#SkImage_MakeFromRaster">MakeFromRaster</a> <a href="#SkImage_RasterReleaseProc">RasterReleaseProc</a>
232
233Function called when <a href="#Image">Image</a> no longer shares pixels. <a href="#SkImage_ReleaseContext">ReleaseContext</a> is
234provided by caller when <a href="#Image">Image</a> is created, and may be nullptr.
235
236### See Also
237
238<a href="#SkImage_ReleaseContext">ReleaseContext</a> <a href="#SkImage_MakeFromRaster">MakeFromRaster</a>
239
240<a name="SkImage_MakeFromRaster"></a>
241## MakeFromRaster
242
243<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
244static sk_sp&lt;SkImage&gt; MakeFromRaster(const SkPixmap& pixmap, RasterReleaseProc rasterReleaseProc,
245                                     ReleaseContext releaseContext)
246</pre>
247
248Creates <a href="#Image">Image</a> from <a href="#SkImage_MakeFromRaster_pixmap">pixmap</a>, sharing <a href="SkPixmap_Reference#Pixmap">Pixmap</a> pixels. Pixels must remain valid and
249unchanged until <a href="#SkImage_MakeFromRaster_rasterReleaseProc">rasterReleaseProc</a> is called. <a href="#SkImage_MakeFromRaster_rasterReleaseProc">rasterReleaseProc</a> is passed
250<a href="#SkImage_MakeFromRaster_releaseContext">releaseContext</a> when <a href="#Image">Image</a> is deleted or no longer refers to <a href="#SkImage_MakeFromRaster_pixmap">pixmap</a> pixels.
251
252Pass nullptr for <a href="#SkImage_MakeFromRaster_rasterReleaseProc">rasterReleaseProc</a> to share <a href="SkPixmap_Reference#Pixmap">Pixmap</a> without requiring a callback
253when <a href="#Image">Image</a> is released. Pass nullptr for <a href="#SkImage_MakeFromRaster_releaseContext">releaseContext</a> if <a href="#SkImage_MakeFromRaster_rasterReleaseProc">rasterReleaseProc</a>
254does not require state.
255
256<a href="#Image">Image</a> is returned if <a href="#SkImage_MakeFromRaster_pixmap">pixmap</a> is valid. Valid <a href="SkPixmap_Reference#Pixmap">Pixmap</a> parameters include:
257dimensions are greater than zero;
258each dimension fits in 29 bits;
259<a href="SkImageInfo_Reference#Color_Type">Color Type</a> and <a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a> are valid, and <a href="SkImageInfo_Reference#Color_Type">Color Type</a> is not <a href="SkImageInfo_Reference#SkColorType">kUnknown SkColorType</a>;
260row bytes are large enough to hold one row of pixels;
261pixel address is not nullptr.
262
263### Parameters
264
265<table>  <tr>    <td><a name="SkImage_MakeFromRaster_pixmap"> <code><strong>pixmap </strong></code> </a></td> <td>
266<a href="#Info">Image Info</a>, pixel address, and row bytes</td>
267  </tr>  <tr>    <td><a name="SkImage_MakeFromRaster_rasterReleaseProc"> <code><strong>rasterReleaseProc </strong></code> </a></td> <td>
268function called when pixels can be released; or nullptr</td>
269  </tr>  <tr>    <td><a name="SkImage_MakeFromRaster_releaseContext"> <code><strong>releaseContext </strong></code> </a></td> <td>
270state passed to <a href="#SkImage_MakeFromRaster_rasterReleaseProc">rasterReleaseProc</a>; or nullptr</td>
271  </tr>
272</table>
273
274### Return Value
275
276<a href="#Image">Image</a> sharing <a href="#SkImage_MakeFromRaster_pixmap">pixmap</a>
277
278### Example
279
280<div><fiddle-embed name="275356b65d18c8868f4434137350cddc">
281
282#### Example Output
283
284~~~~
285before reset: 0
286after reset: 1
287~~~~
288
289</fiddle-embed></div>
290
291### See Also
292
293<a href="#SkImage_MakeRasterCopy">MakeRasterCopy</a> <a href="#SkImage_MakeRasterData">MakeRasterData</a> <a href="#SkImage_MakeFromGenerator">MakeFromGenerator</a> <a href="#SkImage_RasterReleaseProc">RasterReleaseProc</a> <a href="#SkImage_ReleaseContext">ReleaseContext</a>
294
295---
296
297<a name="SkImage_MakeFromBitmap"></a>
298## MakeFromBitmap
299
300<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
301static sk_sp&lt;SkImage&gt; MakeFromBitmap(const SkBitmap& bitmap)
302</pre>
303
304Creates <a href="#Image">Image</a> from <a href="#SkImage_MakeFromBitmap_bitmap">bitmap</a>, sharing or copying <a href="#SkImage_MakeFromBitmap_bitmap">bitmap</a> pixels. If the <a href="#SkImage_MakeFromBitmap_bitmap">bitmap</a>
305is marked immutable, and its pixel memory is shareable, it may be shared
306instead of copied.
307
308<a href="#Image">Image</a> is returned if <a href="#SkImage_MakeFromBitmap_bitmap">bitmap</a> is valid. Valid <a href="SkBitmap_Reference#Bitmap">Bitmap</a> parameters include:
309dimensions are greater than zero;
310each dimension fits in 29 bits;
311<a href="SkImageInfo_Reference#Color_Type">Color Type</a> and <a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a> are valid, and <a href="SkImageInfo_Reference#Color_Type">Color Type</a> is not <a href="SkImageInfo_Reference#SkColorType">kUnknown SkColorType</a>;
312row bytes are large enough to hold one row of pixels;
313pixel address is not nullptr.
314
315### Parameters
316
317<table>  <tr>    <td><a name="SkImage_MakeFromBitmap_bitmap"> <code><strong>bitmap </strong></code> </a></td> <td>
318<a href="#Info">Image Info</a>, row bytes, and pixels</td>
319  </tr>
320</table>
321
322### Return Value
323
324created <a href="#Image">Image</a>, or nullptr
325
326### Example
327
328<div><fiddle-embed name="cf2cf53321e4e6a77c2841bfbc0ef707"><div>The first <a href="SkBitmap_Reference#Bitmap">Bitmap</a> is shared; writing to the pixel memory changes the first
329<a href="#Image">Image</a>.
330The second <a href="SkBitmap_Reference#Bitmap">Bitmap</a> is marked immutable, and is copied; writing to the pixel
331memory does not alter the second <a href="#Image">Image</a>.</div></fiddle-embed></div>
332
333### See Also
334
335<a href="#SkImage_MakeFromRaster">MakeFromRaster</a> <a href="#SkImage_MakeRasterCopy">MakeRasterCopy</a> <a href="#SkImage_MakeFromGenerator">MakeFromGenerator</a> <a href="#SkImage_MakeRasterData">MakeRasterData</a>
336
337---
338
339<a name="SkImage_MakeFromGenerator"></a>
340## MakeFromGenerator
341
342<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
343static sk_sp&lt;SkImage&gt; MakeFromGenerator(std::unique_ptr&lt;SkImageGenerator&gt; imageGenerator,
344                                 const SkIRect* subset = nullptr)
345</pre>
346
347Creates <a href="#Image">Image</a> from data returned by <a href="#SkImage_MakeFromGenerator_imageGenerator">imageGenerator</a>. Generated data is owned by <a href="#Image">Image</a> and may not
348be shared or accessed.
349
350<a href="#SkImage_MakeFromGenerator_subset">subset</a> allows selecting a portion of the full image. Pass nullptr to select the entire image;
351otherwise, <a href="#SkImage_MakeFromGenerator_subset">subset</a> must be contained by image bounds.
352
353<a href="#Image">Image</a> is returned if generator data is valid. Valid data parameters vary by type of data
354and platform.
355
356<a href="#SkImage_MakeFromGenerator_imageGenerator">imageGenerator</a> may wrap <a href="undocumented#Picture">Picture</a> data, codec data, or custom data.
357
358### Parameters
359
360<table>  <tr>    <td><a name="SkImage_MakeFromGenerator_imageGenerator"> <code><strong>imageGenerator </strong></code> </a></td> <td>
361stock or custom routines to retrieve <a href="#Image">Image</a></td>
362  </tr>  <tr>    <td><a name="SkImage_MakeFromGenerator_subset"> <code><strong>subset </strong></code> </a></td> <td>
363bounds of returned <a href="#Image">Image</a>; may be nullptr</td>
364  </tr>
365</table>
366
367### Return Value
368
369created <a href="#Image">Image</a>, or nullptr
370
371### Example
372
373<div><fiddle-embed name="c2fec0746f88ca34d7dce59dd9bdef9e"><div>The generator returning <a href="undocumented#Picture">Picture</a> cannot be shared; std::move transfers ownership to generated <a href="#Image">Image</a>.</div></fiddle-embed></div>
374
375### See Also
376
377<a href="#SkImage_MakeFromEncoded">MakeFromEncoded</a>
378
379---
380
381<a name="SkImage_MakeFromEncoded"></a>
382## MakeFromEncoded
383
384<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
385static sk_sp&lt;SkImage&gt; MakeFromEncoded(sk_sp&lt;SkData&gt; encoded, const SkIRect* subset = nullptr)
386</pre>
387
388Creates <a href="#Image">Image</a> from <a href="#SkImage_MakeFromEncoded_encoded">encoded</a> data.
389<a href="#SkImage_MakeFromEncoded_subset">subset</a> allows selecting a portion of the full image. Pass nullptr to select the entire image;
390otherwise, <a href="#SkImage_MakeFromEncoded_subset">subset</a> must be contained by image bounds.
391
392<a href="#Image">Image</a> is returned if format of the <a href="#SkImage_MakeFromEncoded_encoded">encoded</a> data is recognized and supported.
393Recognized formats vary by platfrom.
394
395### Parameters
396
397<table>  <tr>    <td><a name="SkImage_MakeFromEncoded_encoded"> <code><strong>encoded </strong></code> </a></td> <td>
398data of <a href="#Image">Image</a> to decode</td>
399  </tr>  <tr>    <td><a name="SkImage_MakeFromEncoded_subset"> <code><strong>subset </strong></code> </a></td> <td>
400bounds of returned <a href="#Image">Image</a>; may be nullptr</td>
401  </tr>
402</table>
403
404### Return Value
405
406created <a href="#Image">Image</a>, or nullptr
407
408### Example
409
410<div><fiddle-embed name="894f732ed6409b1f392bc5481421d0e9"></fiddle-embed></div>
411
412### See Also
413
414<a href="#SkImage_MakeFromGenerator">MakeFromGenerator</a>
415
416---
417
418<a name="SkImage_MakeFromTexture"></a>
419## MakeFromTexture
420
421<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
422static sk_sp&lt;SkImage&gt; MakeFromTexture(GrContext* context, const GrBackendTexture& backendTexture,
423                                      GrSurfaceOrigin origin, SkAlphaType alphaType,
424                                      sk_sp&lt;SkColorSpace&gt; colorSpace)
425</pre>
426
427Deprecated.
428
429### Parameters
430
431<table>  <tr>    <td><a name="SkImage_MakeFromTexture_context"> <code><strong>context </strong></code> </a></td> <td>
432<a href="undocumented#GPU_Context">GPU Context</a></td>
433  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_backendTexture"> <code><strong>backendTexture </strong></code> </a></td> <td>
434texture residing on GPU</td>
435  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_origin"> <code><strong>origin </strong></code> </a></td> <td>
436one of: <a href="undocumented#GrSurfaceOrigin">kBottomLeft GrSurfaceOrigin</a>, <a href="undocumented#GrSurfaceOrigin">kTopLeft GrSurfaceOrigin</a></td>
437  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_alphaType"> <code><strong>alphaType </strong></code> </a></td> <td>
438one of: <a href="SkImageInfo_Reference#SkAlphaType">kUnknown SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kOpaque SkAlphaType</a>,
439<a href="SkImageInfo_Reference#SkAlphaType">kPremul SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kUnpremul SkAlphaType</a></td>
440  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
441range of colors; may be nullptr</td>
442  </tr>
443</table>
444
445### Return Value
446
447created <a href="#Image">Image</a>, or nullptr
448
449---
450
451<a name="SkImage_MakeFromTexture_2"></a>
452
453<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
454static sk_sp&lt;SkImage&gt; MakeFromTexture(GrContext* context, const GrBackendTexture& backendTexture,
455                                      GrSurfaceOrigin origin, SkAlphaType alphaType,
456                                      sk_sp&lt;SkColorSpace&gt; colorSpace,
457                                      TextureReleaseProc textureReleaseProc,
458                                      ReleaseContext releaseContext)
459</pre>
460
461Deprecated.
462
463### Parameters
464
465<table>  <tr>    <td><a name="SkImage_MakeFromTexture_2_context"> <code><strong>context </strong></code> </a></td> <td>
466<a href="undocumented#GPU_Context">GPU Context</a></td>
467  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_2_backendTexture"> <code><strong>backendTexture </strong></code> </a></td> <td>
468texture residing on GPU</td>
469  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_2_origin"> <code><strong>origin </strong></code> </a></td> <td>
470one of: <a href="undocumented#GrSurfaceOrigin">kBottomLeft GrSurfaceOrigin</a>, <a href="undocumented#GrSurfaceOrigin">kTopLeft GrSurfaceOrigin</a></td>
471  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_2_alphaType"> <code><strong>alphaType </strong></code> </a></td> <td>
472one of: <a href="SkImageInfo_Reference#SkAlphaType">kUnknown SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kOpaque SkAlphaType</a>,
473<a href="SkImageInfo_Reference#SkAlphaType">kPremul SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kUnpremul SkAlphaType</a></td>
474  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_2_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
475range of colors; may be nullptr</td>
476  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_2_textureReleaseProc"> <code><strong>textureReleaseProc </strong></code> </a></td> <td>
477function called when texture can be released</td>
478  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_2_releaseContext"> <code><strong>releaseContext </strong></code> </a></td> <td>
479state passed to <a href="#SkImage_MakeFromTexture_2_textureReleaseProc">textureReleaseProc</a></td>
480  </tr>
481</table>
482
483### Return Value
484
485created <a href="#Image">Image</a>, or nullptr
486
487---
488
489<a name="SkImage_MakeFromTexture_3"></a>
490
491<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
492static sk_sp&lt;SkImage&gt; MakeFromTexture(GrContext* context, const GrBackendTexture& backendTexture,
493                                      GrSurfaceOrigin origin, SkColorType colorType,
494                                      SkAlphaType alphaType, sk_sp&lt;SkColorSpace&gt; colorSpace)
495</pre>
496
497Creates <a href="#Image">Image</a> from <a href="undocumented#GPU_Texture">GPU Texture</a> associated with <a href="#SkImage_MakeFromTexture_3_context">context</a>. Caller is responsible for
498managing the lifetime of <a href="undocumented#GPU_Texture">GPU Texture</a>.
499
500<a href="#Image">Image</a> is returned if format of <a href="#SkImage_MakeFromTexture_3_backendTexture">backendTexture</a> is recognized and supported.
501Recognized formats vary by GPU back-end.
502
503### Parameters
504
505<table>  <tr>    <td><a name="SkImage_MakeFromTexture_3_context"> <code><strong>context </strong></code> </a></td> <td>
506<a href="undocumented#GPU_Context">GPU Context</a></td>
507  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_3_backendTexture"> <code><strong>backendTexture </strong></code> </a></td> <td>
508texture residing on GPU</td>
509  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_3_origin"> <code><strong>origin </strong></code> </a></td> <td>
510one of: <a href="undocumented#GrSurfaceOrigin">kBottomLeft GrSurfaceOrigin</a>, <a href="undocumented#GrSurfaceOrigin">kTopLeft GrSurfaceOrigin</a></td>
511  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_3_colorType"> <code><strong>colorType </strong></code> </a></td> <td>
512one of: <a href="SkImageInfo_Reference#SkColorType">kUnknown SkColorType</a>, <a href="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>,
513<a href="SkImageInfo_Reference#SkColorType">kRGB 565 SkColorType</a>, <a href="SkImageInfo_Reference#SkColorType">kARGB 4444 SkColorType</a>,
514<a href="SkImageInfo_Reference#SkColorType">kRGBA 8888 SkColorType</a>, <a href="SkImageInfo_Reference#SkColorType">kBGRA 8888 SkColorType</a>,
515<a href="SkImageInfo_Reference#SkColorType">kGray 8 SkColorType</a>, <a href="SkImageInfo_Reference#SkColorType">kRGBA F16 SkColorType</a></td>
516  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_3_alphaType"> <code><strong>alphaType </strong></code> </a></td> <td>
517one of: <a href="SkImageInfo_Reference#SkAlphaType">kUnknown SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kOpaque SkAlphaType</a>,
518<a href="SkImageInfo_Reference#SkAlphaType">kPremul SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kUnpremul SkAlphaType</a></td>
519  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_3_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
520range of colors; may be nullptr</td>
521  </tr>
522</table>
523
524### Return Value
525
526created <a href="#Image">Image</a>, or nullptr
527
528### Example
529
530<div><fiddle-embed name="d5e43961a54548f445eece91d517381c" gpu="true"><div>A back-end texture has been created and uploaded to the GPU outside of this example.</div></fiddle-embed></div>
531
532### See Also
533
534<a href="#SkImage_MakeFromAdoptedTexture">MakeFromAdoptedTexture</a><sup><a href="#SkImage_MakeFromAdoptedTexture_2">[2]</a></sup> <a href="#SkSurface_MakeFromBackendTexture">SkSurface::MakeFromBackendTexture</a><sup><a href="#SkSurface_MakeFromBackendTexture_2">[2]</a></sup>
535
536---
537
538<a name="SkImage_MakeFromTexture_4"></a>
539
540<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
541static sk_sp&lt;SkImage&gt; MakeFromTexture(GrContext* context, const GrBackendTexture& backendTexture,
542                                      GrSurfaceOrigin origin, SkColorType colorType,
543                                      SkAlphaType alphaType, sk_sp&lt;SkColorSpace&gt; colorSpace,
544                                      TextureReleaseProc textureReleaseProc,
545                                      ReleaseContext releaseContext)
546</pre>
547
548Creates <a href="#Image">Image</a> from <a href="undocumented#GPU_Texture">GPU Texture</a> associated with <a href="#SkImage_MakeFromTexture_4_context">context</a>. <a href="undocumented#GPU_Texture">GPU Texture</a> must stay
549valid and unchanged until <a href="#SkImage_MakeFromTexture_4_textureReleaseProc">textureReleaseProc</a> is called. <a href="#SkImage_MakeFromTexture_4_textureReleaseProc">textureReleaseProc</a> is
550passed <a href="#SkImage_MakeFromTexture_4_releaseContext">releaseContext</a> when <a href="#Image">Image</a> is deleted or no longer refers to texture.
551
552<a href="#Image">Image</a> is returned if format of <a href="#SkImage_MakeFromTexture_4_backendTexture">backendTexture</a> is recognized and supported.
553Recognized formats vary by GPU back-end.
554
555### Parameters
556
557<table>  <tr>    <td><a name="SkImage_MakeFromTexture_4_context"> <code><strong>context </strong></code> </a></td> <td>
558<a href="undocumented#GPU_Context">GPU Context</a></td>
559  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_4_backendTexture"> <code><strong>backendTexture </strong></code> </a></td> <td>
560texture residing on GPU</td>
561  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_4_origin"> <code><strong>origin </strong></code> </a></td> <td>
562one of: <a href="undocumented#GrSurfaceOrigin">kBottomLeft GrSurfaceOrigin</a>, <a href="undocumented#GrSurfaceOrigin">kTopLeft GrSurfaceOrigin</a></td>
563  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_4_colorType"> <code><strong>colorType </strong></code> </a></td> <td>
564one of: <a href="SkImageInfo_Reference#SkColorType">kUnknown SkColorType</a>, <a href="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>,
565<a href="SkImageInfo_Reference#SkColorType">kRGB 565 SkColorType</a>, <a href="SkImageInfo_Reference#SkColorType">kARGB 4444 SkColorType</a>,
566<a href="SkImageInfo_Reference#SkColorType">kRGBA 8888 SkColorType</a>, <a href="SkImageInfo_Reference#SkColorType">kBGRA 8888 SkColorType</a>,
567<a href="SkImageInfo_Reference#SkColorType">kGray 8 SkColorType</a>, <a href="SkImageInfo_Reference#SkColorType">kRGBA F16 SkColorType</a></td>
568  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_4_alphaType"> <code><strong>alphaType </strong></code> </a></td> <td>
569one of: <a href="SkImageInfo_Reference#SkAlphaType">kUnknown SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kOpaque SkAlphaType</a>,
570<a href="SkImageInfo_Reference#SkAlphaType">kPremul SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kUnpremul SkAlphaType</a></td>
571  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_4_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
572range of colors; may be nullptr</td>
573  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_4_textureReleaseProc"> <code><strong>textureReleaseProc </strong></code> </a></td> <td>
574function called when texture can be released</td>
575  </tr>  <tr>    <td><a name="SkImage_MakeFromTexture_4_releaseContext"> <code><strong>releaseContext </strong></code> </a></td> <td>
576state passed to <a href="#SkImage_MakeFromTexture_4_textureReleaseProc">textureReleaseProc</a></td>
577  </tr>
578</table>
579
580### Return Value
581
582created <a href="#Image">Image</a>, or nullptr
583
584### Example
585
586<div><fiddle-embed name="c7be9423f7c2ef819523ba4d607d17b8" gpu="true"></fiddle-embed></div>
587
588### See Also
589
590<a href="#SkImage_MakeFromAdoptedTexture">MakeFromAdoptedTexture</a><sup><a href="#SkImage_MakeFromAdoptedTexture_2">[2]</a></sup> <a href="#SkSurface_MakeFromBackendTexture">SkSurface::MakeFromBackendTexture</a><sup><a href="#SkSurface_MakeFromBackendTexture_2">[2]</a></sup>
591
592---
593
594<a name="SkImage_MakeCrossContextFromEncoded"></a>
595## MakeCrossContextFromEncoded
596
597<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
598static sk_sp&lt;SkImage&gt; MakeCrossContextFromEncoded(GrContext* context, sk_sp&lt;SkData&gt; data,
599                                                  bool buildMips, SkColorSpace* dstColorSpace)
600</pre>
601
602Creates <a href="#Image">Image</a> from encoded <a href="#SkImage_MakeCrossContextFromEncoded_data">data</a>. <a href="#Image">Image</a> is uploaded to GPU back-end using <a href="#SkImage_MakeCrossContextFromEncoded_context">context</a>.
603
604Created <a href="#Image">Image</a> is available to other GPU contexts, and is available across thread
605boundaries. All contexts must be in the same GPU_Share_Group, or otherwise
606share resources.
607
608When <a href="#Image">Image</a> is no longer referenced, <a href="#SkImage_MakeCrossContextFromEncoded_context">context</a> releases texture memory
609asynchronously.
610
611<a href="undocumented#Texture">Texture</a> decoded from <a href="#SkImage_MakeCrossContextFromEncoded_data">data</a> is uploaded to match <a href="SkSurface_Reference#Surface">Surface</a> created with
612<a href="#SkImage_MakeCrossContextFromEncoded_dstColorSpace">dstColorSpace</a>. <a href="undocumented#Color_Space">Color Space</a> of <a href="#Image">Image</a> is determined by encoded <a href="#SkImage_MakeCrossContextFromEncoded_data">data</a>.
613
614<a href="#Image">Image</a> is returned if format of <a href="#SkImage_MakeCrossContextFromEncoded_data">data</a> is recognized and supported, and if <a href="#SkImage_MakeCrossContextFromEncoded_context">context</a>
615supports moving resources. Recognized formats vary by platform and GPU back-end.
616
617<a href="#Image">Image</a> is returned using <a href="#SkImage_MakeFromEncoded">MakeFromEncoded</a> if <a href="#SkImage_MakeCrossContextFromEncoded_context">context</a> is nullptr or does not support
618moving resources between contexts.
619
620### Parameters
621
622<table>  <tr>    <td><a name="SkImage_MakeCrossContextFromEncoded_context"> <code><strong>context </strong></code> </a></td> <td>
623<a href="undocumented#GPU_Context">GPU Context</a></td>
624  </tr>  <tr>    <td><a name="SkImage_MakeCrossContextFromEncoded_data"> <code><strong>data </strong></code> </a></td> <td>
625<a href="#Image">Image</a> to decode</td>
626  </tr>  <tr>    <td><a name="SkImage_MakeCrossContextFromEncoded_buildMips"> <code><strong>buildMips </strong></code> </a></td> <td>
627create <a href="#Image">Image</a> as <a href="undocumented#Mip_Map">Mip Map</a> if true</td>
628  </tr>  <tr>    <td><a name="SkImage_MakeCrossContextFromEncoded_dstColorSpace"> <code><strong>dstColorSpace </strong></code> </a></td> <td>
629range of colors of matching <a href="SkSurface_Reference#Surface">Surface</a> on GPU</td>
630  </tr>
631</table>
632
633### Return Value
634
635created <a href="#Image">Image</a>, or nullptr
636
637### Example
638
639<div><fiddle-embed name="069c7b116479e3ca46f953f07dcbdd36"></fiddle-embed></div>
640
641### See Also
642
643<a href="#SkImage_MakeCrossContextFromPixmap">MakeCrossContextFromPixmap</a>
644
645---
646
647<a name="SkImage_MakeCrossContextFromPixmap"></a>
648## MakeCrossContextFromPixmap
649
650<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
651static sk_sp&lt;SkImage&gt; MakeCrossContextFromPixmap(GrContext* context, const SkPixmap& pixmap,
652                                                 bool buildMips, SkColorSpace* dstColorSpace)
653</pre>
654
655Creates <a href="#Image">Image</a> from <a href="#SkImage_MakeCrossContextFromPixmap_pixmap">pixmap</a>. <a href="#Image">Image</a> is uploaded to GPU back-end using <a href="#SkImage_MakeCrossContextFromPixmap_context">context</a>.
656
657Created <a href="#Image">Image</a> is available to other GPU contexts, and is available across thread
658boundaries. All contexts must be in the same GPU_Share_Group, or otherwise
659share resources.
660
661When <a href="#Image">Image</a> is no longer referenced, <a href="#SkImage_MakeCrossContextFromPixmap_context">context</a> releases texture memory
662asynchronously.
663
664<a href="undocumented#Texture">Texture</a> created from <a href="#SkImage_MakeCrossContextFromPixmap_pixmap">pixmap</a> is uploaded to match <a href="SkSurface_Reference#Surface">Surface</a> created with
665<a href="#SkImage_MakeCrossContextFromPixmap_dstColorSpace">dstColorSpace</a>. <a href="undocumented#Color_Space">Color Space</a> of <a href="#Image">Image</a> is determined by <a href="#SkImage_MakeCrossContextFromPixmap_pixmap">pixmap</a>.<a href="#SkImage_colorSpace">colorSpace</a>.
666
667<a href="#Image">Image</a> is returned referring to GPU back-end if <a href="#SkImage_MakeCrossContextFromPixmap_context">context</a> is not nullptr,
668format of data is recognized and supported, and if <a href="#SkImage_MakeCrossContextFromPixmap_context">context</a> supports moving
669resources between contexts. Otherwise, <a href="#SkImage_MakeCrossContextFromPixmap_pixmap">pixmap</a> pixel data is copied and <a href="#Image">Image</a>
670as returned in raster format if possible; nullptr may be returned.
671Recognized GPU formats vary by platform and GPU back-end.
672
673### Parameters
674
675<table>  <tr>    <td><a name="SkImage_MakeCrossContextFromPixmap_context"> <code><strong>context </strong></code> </a></td> <td>
676<a href="undocumented#GPU_Context">GPU Context</a></td>
677  </tr>  <tr>    <td><a name="SkImage_MakeCrossContextFromPixmap_pixmap"> <code><strong>pixmap </strong></code> </a></td> <td>
678<a href="#Info">Image Info</a>, pixel address, and row bytes</td>
679  </tr>  <tr>    <td><a name="SkImage_MakeCrossContextFromPixmap_buildMips"> <code><strong>buildMips </strong></code> </a></td> <td>
680create <a href="#Image">Image</a> as <a href="undocumented#Mip_Map">Mip Map</a> if true</td>
681  </tr>  <tr>    <td><a name="SkImage_MakeCrossContextFromPixmap_dstColorSpace"> <code><strong>dstColorSpace </strong></code> </a></td> <td>
682range of colors of matching <a href="SkSurface_Reference#Surface">Surface</a> on GPU</td>
683  </tr>
684</table>
685
686### Return Value
687
688created <a href="#Image">Image</a>, or nullptr
689
690### Example
691
692<div><fiddle-embed name="45bca8747b8f49b5be34b520897ef048"></fiddle-embed></div>
693
694### See Also
695
696<a href="#SkImage_MakeCrossContextFromEncoded">MakeCrossContextFromEncoded</a>
697
698---
699
700<a name="SkImage_MakeFromAdoptedTexture"></a>
701## MakeFromAdoptedTexture
702
703<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
704static sk_sp&lt;SkImage&gt; MakeFromAdoptedTexture(GrContext* context,
705                                             const GrBackendTexture& backendTexture,
706                                             GrSurfaceOrigin surfaceOrigin,
707                                             SkAlphaType alphaType = kPremul_SkAlphaType,
708                                             sk_sp&lt;SkColorSpace&gt; colorSpace = nullptr)
709</pre>
710
711Deprecated.
712
713### Parameters
714
715<table>  <tr>    <td><a name="SkImage_MakeFromAdoptedTexture_context"> <code><strong>context </strong></code> </a></td> <td>
716<a href="undocumented#GPU_Context">GPU Context</a></td>
717  </tr>  <tr>    <td><a name="SkImage_MakeFromAdoptedTexture_backendTexture"> <code><strong>backendTexture </strong></code> </a></td> <td>
718texture residing on GPU</td>
719  </tr>  <tr>    <td><a name="SkImage_MakeFromAdoptedTexture_surfaceOrigin"> <code><strong>surfaceOrigin </strong></code> </a></td> <td>
720one of: <a href="undocumented#GrSurfaceOrigin">kBottomLeft GrSurfaceOrigin</a>, <a href="undocumented#GrSurfaceOrigin">kTopLeft GrSurfaceOrigin</a></td>
721  </tr>  <tr>    <td><a name="SkImage_MakeFromAdoptedTexture_alphaType"> <code><strong>alphaType </strong></code> </a></td> <td>
722one of: <a href="SkImageInfo_Reference#SkAlphaType">kUnknown SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kOpaque SkAlphaType</a>,
723<a href="SkImageInfo_Reference#SkAlphaType">kPremul SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kUnpremul SkAlphaType</a></td>
724  </tr>  <tr>    <td><a name="SkImage_MakeFromAdoptedTexture_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
725range of colors; may be nullptr</td>
726  </tr>
727</table>
728
729### Return Value
730
731created <a href="#Image">Image</a>, or nullptr
732
733### See Also
734
735<a href="#SkImage_MakeFromTexture">MakeFromTexture</a><sup><a href="#SkImage_MakeFromTexture_2">[2]</a></sup><sup><a href="#SkImage_MakeFromTexture_3">[3]</a></sup><sup><a href="#SkImage_MakeFromTexture_4">[4]</a></sup> <a href="#SkImage_MakeFromYUVTexturesCopy">MakeFromYUVTexturesCopy</a><sup><a href="#SkImage_MakeFromYUVTexturesCopy_2">[2]</a></sup>
736
737---
738
739<a name="SkImage_MakeFromAdoptedTexture_2"></a>
740
741<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
742static sk_sp&lt;SkImage&gt; MakeFromAdoptedTexture(GrContext* context,
743                                             const GrBackendTexture& backendTexture,
744                                             GrSurfaceOrigin surfaceOrigin, SkColorType colorType,
745                                             SkAlphaType alphaType = kPremul_SkAlphaType,
746                                             sk_sp&lt;SkColorSpace&gt; colorSpace = nullptr)
747</pre>
748
749Creates <a href="#Image">Image</a> from <a href="#SkImage_MakeFromAdoptedTexture_2_backendTexture">backendTexture</a> associated with <a href="#SkImage_MakeFromAdoptedTexture_2_context">context</a>. <a href="#SkImage_MakeFromAdoptedTexture_2_backendTexture">backendTexture</a> and
750returned <a href="#Image">Image</a> are managed internally, and are released when no longer needed.
751
752<a href="#Image">Image</a> is returned if format of <a href="#SkImage_MakeFromAdoptedTexture_2_backendTexture">backendTexture</a> is recognized and supported.
753Recognized formats vary by GPU back-end.
754
755### Parameters
756
757<table>  <tr>    <td><a name="SkImage_MakeFromAdoptedTexture_2_context"> <code><strong>context </strong></code> </a></td> <td>
758<a href="undocumented#GPU_Context">GPU Context</a></td>
759  </tr>  <tr>    <td><a name="SkImage_MakeFromAdoptedTexture_2_backendTexture"> <code><strong>backendTexture </strong></code> </a></td> <td>
760texture residing on GPU</td>
761  </tr>  <tr>    <td><a name="SkImage_MakeFromAdoptedTexture_2_surfaceOrigin"> <code><strong>surfaceOrigin </strong></code> </a></td> <td>
762one of: <a href="undocumented#GrSurfaceOrigin">kBottomLeft GrSurfaceOrigin</a>, <a href="undocumented#GrSurfaceOrigin">kTopLeft GrSurfaceOrigin</a></td>
763  </tr>  <tr>    <td><a name="SkImage_MakeFromAdoptedTexture_2_colorType"> <code><strong>colorType </strong></code> </a></td> <td>
764one of: <a href="SkImageInfo_Reference#SkColorType">kUnknown SkColorType</a>, <a href="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>,
765<a href="SkImageInfo_Reference#SkColorType">kRGB 565 SkColorType</a>, <a href="SkImageInfo_Reference#SkColorType">kARGB 4444 SkColorType</a>,
766<a href="SkImageInfo_Reference#SkColorType">kRGBA 8888 SkColorType</a>, <a href="SkImageInfo_Reference#SkColorType">kBGRA 8888 SkColorType</a>,
767<a href="SkImageInfo_Reference#SkColorType">kGray 8 SkColorType</a>, <a href="SkImageInfo_Reference#SkColorType">kRGBA F16 SkColorType</a></td>
768  </tr>  <tr>    <td><a name="SkImage_MakeFromAdoptedTexture_2_alphaType"> <code><strong>alphaType </strong></code> </a></td> <td>
769one of: <a href="SkImageInfo_Reference#SkAlphaType">kUnknown SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kOpaque SkAlphaType</a>,
770<a href="SkImageInfo_Reference#SkAlphaType">kPremul SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kUnpremul SkAlphaType</a></td>
771  </tr>  <tr>    <td><a name="SkImage_MakeFromAdoptedTexture_2_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
772range of colors; may be nullptr</td>
773  </tr>
774</table>
775
776### Return Value
777
778created <a href="#Image">Image</a>, or nullptr
779
780### Example
781
782<div><fiddle-embed name="b07964ec9c5c8a6febba805f1cf4d071" gpu="true"></fiddle-embed></div>
783
784### See Also
785
786<a href="#SkImage_MakeFromTexture">MakeFromTexture</a><sup><a href="#SkImage_MakeFromTexture_2">[2]</a></sup><sup><a href="#SkImage_MakeFromTexture_3">[3]</a></sup><sup><a href="#SkImage_MakeFromTexture_4">[4]</a></sup> <a href="#SkImage_MakeFromYUVTexturesCopy">MakeFromYUVTexturesCopy</a><sup><a href="#SkImage_MakeFromYUVTexturesCopy_2">[2]</a></sup>
787
788---
789
790<a name="SkImage_MakeFromYUVTexturesCopy"></a>
791## MakeFromYUVTexturesCopy
792
793<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
794static sk_sp&lt;SkImage&gt; MakeFromYUVTexturesCopy(GrContext* context, SkYUVColorSpace yuvColorSpace,
795                                              const GrBackendObject yuvTextureHandles[3],
796                                              const SkISize yuvSizes[3],
797                                              GrSurfaceOrigin surfaceOrigin,
798                                              sk_sp&lt;SkColorSpace&gt; colorSpace = nullptr)
799</pre>
800
801Creates <a href="#Image">Image</a> from copy of <a href="#SkImage_MakeFromYUVTexturesCopy_yuvTextureHandles">yuvTextureHandles</a>, an array of textures on GPU.
802<a href="#SkImage_MakeFromYUVTexturesCopy_yuvTextureHandles">yuvTextureHandles</a> contain pixels for YUV planes of <a href="#Image">Image</a>.
803<a href="#SkImage_MakeFromYUVTexturesCopy_yuvSizes">yuvSizes</a> conain dimensions for each pixel plane. Dimensions must be greater than
804zero but may differ from plane to plane. Returned <a href="#Image">Image</a> has the dimensions
805<a href="#SkImage_MakeFromYUVTexturesCopy_yuvSizes">yuvSizes</a>[0]. <a href="#SkImage_MakeFromYUVTexturesCopy_yuvColorSpace">yuvColorSpace</a> describes how YUV colors convert to RGB colors.
806
807### Parameters
808
809<table>  <tr>    <td><a name="SkImage_MakeFromYUVTexturesCopy_context"> <code><strong>context </strong></code> </a></td> <td>
810<a href="undocumented#GPU_Context">GPU Context</a></td>
811  </tr>  <tr>    <td><a name="SkImage_MakeFromYUVTexturesCopy_yuvColorSpace"> <code><strong>yuvColorSpace </strong></code> </a></td> <td>
812one of: <a href="SkImageInfo_Reference#SkYUVColorSpace">kJPEG SkYUVColorSpace</a>, <a href="SkImageInfo_Reference#SkYUVColorSpace">kRec601 SkYUVColorSpace</a>,
813<a href="SkImageInfo_Reference#SkYUVColorSpace">kRec709 SkYUVColorSpace</a></td>
814  </tr>  <tr>    <td><a name="SkImage_MakeFromYUVTexturesCopy_yuvTextureHandles"> <code><strong>yuvTextureHandles </strong></code> </a></td> <td>
815array of YUV textures on GPU</td>
816  </tr>  <tr>    <td><a name="SkImage_MakeFromYUVTexturesCopy_yuvSizes"> <code><strong>yuvSizes </strong></code> </a></td> <td>
817dimensions of YUV textures</td>
818  </tr>  <tr>    <td><a name="SkImage_MakeFromYUVTexturesCopy_surfaceOrigin"> <code><strong>surfaceOrigin </strong></code> </a></td> <td>
819one of: <a href="undocumented#GrSurfaceOrigin">kBottomLeft GrSurfaceOrigin</a>, <a href="undocumented#GrSurfaceOrigin">kTopLeft GrSurfaceOrigin</a></td>
820  </tr>  <tr>    <td><a name="SkImage_MakeFromYUVTexturesCopy_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
821range of colors; may be nullptr</td>
822  </tr>
823</table>
824
825### Return Value
826
827created <a href="#Image">Image</a>, or nullptr
828
829### See Also
830
831<a href="#SkImage_MakeFromNV12TexturesCopy">MakeFromNV12TexturesCopy</a><sup><a href="#SkImage_MakeFromNV12TexturesCopy_2">[2]</a></sup>
832
833---
834
835<a name="SkImage_MakeFromYUVTexturesCopy_2"></a>
836
837<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
838static sk_sp&lt;SkImage&gt; MakeFromYUVTexturesCopy(GrContext* context, SkYUVColorSpace yuvColorSpace,
839                                              const GrBackendTexture yuvTextureHandles[3],
840                                              const SkISize yuvSizes[3],
841                                              GrSurfaceOrigin surfaceOrigin,
842                                              sk_sp&lt;SkColorSpace&gt; colorSpace = nullptr)
843</pre>
844
845Creates <a href="#Image">Image</a> from copy of <a href="#SkImage_MakeFromYUVTexturesCopy_2_yuvTextureHandles">yuvTextureHandles</a>, an array of textures on GPU.
846<a href="#SkImage_MakeFromYUVTexturesCopy_2_yuvTextureHandles">yuvTextureHandles</a> contain pixels for YUV planes of <a href="#Image">Image</a>.
847<a href="#SkImage_MakeFromYUVTexturesCopy_2_yuvSizes">yuvSizes</a> conain dimensions for each pixel plane. Dimensions must be greater than
848zero but may differ from plane to plane. Returned <a href="#Image">Image</a> has the dimensions
849<a href="#SkImage_MakeFromYUVTexturesCopy_2_yuvSizes">yuvSizes</a>[0]. <a href="#SkImage_MakeFromYUVTexturesCopy_2_yuvColorSpace">yuvColorSpace</a> describes how YUV colors convert to RGB colors.
850
851### Parameters
852
853<table>  <tr>    <td><a name="SkImage_MakeFromYUVTexturesCopy_2_context"> <code><strong>context </strong></code> </a></td> <td>
854<a href="undocumented#GPU_Context">GPU Context</a></td>
855  </tr>  <tr>    <td><a name="SkImage_MakeFromYUVTexturesCopy_2_yuvColorSpace"> <code><strong>yuvColorSpace </strong></code> </a></td> <td>
856one of: <a href="SkImageInfo_Reference#SkYUVColorSpace">kJPEG SkYUVColorSpace</a>, <a href="SkImageInfo_Reference#SkYUVColorSpace">kRec601 SkYUVColorSpace</a>,
857<a href="SkImageInfo_Reference#SkYUVColorSpace">kRec709 SkYUVColorSpace</a></td>
858  </tr>  <tr>    <td><a name="SkImage_MakeFromYUVTexturesCopy_2_yuvTextureHandles"> <code><strong>yuvTextureHandles </strong></code> </a></td> <td>
859array of YUV textures on GPU</td>
860  </tr>  <tr>    <td><a name="SkImage_MakeFromYUVTexturesCopy_2_yuvSizes"> <code><strong>yuvSizes </strong></code> </a></td> <td>
861dimensions of YUV textures</td>
862  </tr>  <tr>    <td><a name="SkImage_MakeFromYUVTexturesCopy_2_surfaceOrigin"> <code><strong>surfaceOrigin </strong></code> </a></td> <td>
863one of: <a href="undocumented#GrSurfaceOrigin">kBottomLeft GrSurfaceOrigin</a>, <a href="undocumented#GrSurfaceOrigin">kTopLeft GrSurfaceOrigin</a></td>
864  </tr>  <tr>    <td><a name="SkImage_MakeFromYUVTexturesCopy_2_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
865range of colors; may be nullptr</td>
866  </tr>
867</table>
868
869### Return Value
870
871created <a href="#Image">Image</a>, or nullptr
872
873### See Also
874
875<a href="#SkImage_MakeFromNV12TexturesCopy">MakeFromNV12TexturesCopy</a><sup><a href="#SkImage_MakeFromNV12TexturesCopy_2">[2]</a></sup>
876
877---
878
879<a name="SkImage_MakeFromNV12TexturesCopy"></a>
880## MakeFromNV12TexturesCopy
881
882<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
883static sk_sp&lt;SkImage&gt; MakeFromNV12TexturesCopy(GrContext* context, SkYUVColorSpace yuvColorSpace,
884                                               const GrBackendObject nv12TextureHandles[2],
885                                               const SkISize nv12Sizes[2],
886                                               GrSurfaceOrigin surfaceOrigin,
887                                               sk_sp&lt;SkColorSpace&gt; colorSpace = nullptr)
888</pre>
889
890Creates <a href="#Image">Image</a> from copy of <a href="#SkImage_MakeFromNV12TexturesCopy_nv12TextureHandles">nv12TextureHandles</a>, an array of textures on GPU.
891<a href="#SkImage_MakeFromNV12TexturesCopy_nv12TextureHandles">nv12TextureHandles</a>[0] contains pixels for YUV_Component_Y plane.
892<a href="#SkImage_MakeFromNV12TexturesCopy_nv12TextureHandles">nv12TextureHandles</a>[1] contains pixels for YUV_Component_U plane,
893followed by pixels for YUV_Component_V plane.
894<a href="#SkImage_MakeFromNV12TexturesCopy_nv12Sizes">nv12Sizes</a> conain dimensions for each pixel plane. Dimensions must be greater than
895zero but may differ from plane to plane. Returned <a href="#Image">Image</a> has the dimensions
896<a href="#SkImage_MakeFromNV12TexturesCopy_nv12Sizes">nv12Sizes</a>[0]. <a href="#SkImage_MakeFromNV12TexturesCopy_yuvColorSpace">yuvColorSpace</a> describes how YUV colors convert to RGB colors.
897
898### Parameters
899
900<table>  <tr>    <td><a name="SkImage_MakeFromNV12TexturesCopy_context"> <code><strong>context </strong></code> </a></td> <td>
901<a href="undocumented#GPU_Context">GPU Context</a></td>
902  </tr>  <tr>    <td><a name="SkImage_MakeFromNV12TexturesCopy_yuvColorSpace"> <code><strong>yuvColorSpace </strong></code> </a></td> <td>
903one of: <a href="SkImageInfo_Reference#SkYUVColorSpace">kJPEG SkYUVColorSpace</a>, <a href="SkImageInfo_Reference#SkYUVColorSpace">kRec601 SkYUVColorSpace</a>,
904<a href="SkImageInfo_Reference#SkYUVColorSpace">kRec709 SkYUVColorSpace</a></td>
905  </tr>  <tr>    <td><a name="SkImage_MakeFromNV12TexturesCopy_nv12TextureHandles"> <code><strong>nv12TextureHandles </strong></code> </a></td> <td>
906array of YUV textures on GPU</td>
907  </tr>  <tr>    <td><a name="SkImage_MakeFromNV12TexturesCopy_nv12Sizes"> <code><strong>nv12Sizes </strong></code> </a></td> <td>
908dimensions of YUV textures</td>
909  </tr>  <tr>    <td><a name="SkImage_MakeFromNV12TexturesCopy_surfaceOrigin"> <code><strong>surfaceOrigin </strong></code> </a></td> <td>
910one of: <a href="undocumented#GrSurfaceOrigin">kBottomLeft GrSurfaceOrigin</a>, <a href="undocumented#GrSurfaceOrigin">kTopLeft GrSurfaceOrigin</a></td>
911  </tr>  <tr>    <td><a name="SkImage_MakeFromNV12TexturesCopy_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
912range of colors; may be nullptr</td>
913  </tr>
914</table>
915
916### Return Value
917
918created <a href="#Image">Image</a>, or nullptr
919
920### See Also
921
922<a href="#SkImage_MakeFromYUVTexturesCopy">MakeFromYUVTexturesCopy</a><sup><a href="#SkImage_MakeFromYUVTexturesCopy_2">[2]</a></sup>
923
924---
925
926<a name="SkImage_MakeFromNV12TexturesCopy_2"></a>
927
928<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
929static sk_sp&lt;SkImage&gt; MakeFromNV12TexturesCopy(GrContext* context, SkYUVColorSpace yuvColorSpace,
930                                               const GrBackendTexture nv12TextureHandles[2],
931                                               const SkISize nv12Sizes[2],
932                                               GrSurfaceOrigin surfaceOrigin,
933                                               sk_sp&lt;SkColorSpace&gt; colorSpace = nullptr)
934</pre>
935
936Creates <a href="#Image">Image</a> from copy of <a href="#SkImage_MakeFromNV12TexturesCopy_2_nv12TextureHandles">nv12TextureHandles</a>, an array of textures on GPU.
937<a href="#SkImage_MakeFromNV12TexturesCopy_2_nv12TextureHandles">nv12TextureHandles</a>[0] contains pixels for YUV_Component_Y plane.
938<a href="#SkImage_MakeFromNV12TexturesCopy_2_nv12TextureHandles">nv12TextureHandles</a>[1] contains pixels for YUV_Component_U plane,
939followed by pixels for YUV_Component_V plane.
940<a href="#SkImage_MakeFromNV12TexturesCopy_2_nv12Sizes">nv12Sizes</a> conain dimensions for each pixel plane. Dimensions must be greater than
941zero but may differ from plane to plane. Returned <a href="#Image">Image</a> has the dimensions
942<a href="#SkImage_MakeFromNV12TexturesCopy_2_nv12Sizes">nv12Sizes</a>[0]. <a href="#SkImage_MakeFromNV12TexturesCopy_2_yuvColorSpace">yuvColorSpace</a> describes how YUV colors convert to RGB colors.
943
944### Parameters
945
946<table>  <tr>    <td><a name="SkImage_MakeFromNV12TexturesCopy_2_context"> <code><strong>context </strong></code> </a></td> <td>
947<a href="undocumented#GPU_Context">GPU Context</a></td>
948  </tr>  <tr>    <td><a name="SkImage_MakeFromNV12TexturesCopy_2_yuvColorSpace"> <code><strong>yuvColorSpace </strong></code> </a></td> <td>
949one of: <a href="SkImageInfo_Reference#SkYUVColorSpace">kJPEG SkYUVColorSpace</a>, <a href="SkImageInfo_Reference#SkYUVColorSpace">kRec601 SkYUVColorSpace</a>,
950<a href="SkImageInfo_Reference#SkYUVColorSpace">kRec709 SkYUVColorSpace</a></td>
951  </tr>  <tr>    <td><a name="SkImage_MakeFromNV12TexturesCopy_2_nv12TextureHandles"> <code><strong>nv12TextureHandles </strong></code> </a></td> <td>
952array of YUV textures on GPU</td>
953  </tr>  <tr>    <td><a name="SkImage_MakeFromNV12TexturesCopy_2_nv12Sizes"> <code><strong>nv12Sizes </strong></code> </a></td> <td>
954dimensions of YUV textures</td>
955  </tr>  <tr>    <td><a name="SkImage_MakeFromNV12TexturesCopy_2_surfaceOrigin"> <code><strong>surfaceOrigin </strong></code> </a></td> <td>
956one of: <a href="undocumented#GrSurfaceOrigin">kBottomLeft GrSurfaceOrigin</a>, <a href="undocumented#GrSurfaceOrigin">kTopLeft GrSurfaceOrigin</a></td>
957  </tr>  <tr>    <td><a name="SkImage_MakeFromNV12TexturesCopy_2_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
958range of colors; may be nullptr</td>
959  </tr>
960</table>
961
962### Return Value
963
964created <a href="#Image">Image</a>, or nullptr
965
966### See Also
967
968<a href="#SkImage_MakeFromYUVTexturesCopy">MakeFromYUVTexturesCopy</a><sup><a href="#SkImage_MakeFromYUVTexturesCopy_2">[2]</a></sup>
969
970---
971
972## <a name="SkImage_BitDepth"></a> Enum SkImage::BitDepth
973
974<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
975enum class <a href="#SkImage_BitDepth">BitDepth</a> {
976<a href="#SkImage_kU8">kU8</a>,
977<a href="#SkImage_kF16">kF16</a>,
978};</pre>
979
980### Constants
981
982<table>
983  <tr>
984    <td><a name="SkImage_kU8"> <code><strong>SkImage::kU8 </strong></code> </a></td><td>0</td><td>Use 8 bits per <a href="#ARGB">Color ARGB</a> component using unsigned integer format.</td>
985  </tr>
986  <tr>
987    <td><a name="SkImage_kF16"> <code><strong>SkImage::kF16 </strong></code> </a></td><td>1</td><td>Use 16 bits per <a href="#ARGB">Color ARGB</a> component using half-precision floating point format.</td>
988  </tr>
989</table>
990
991### See Also
992
993<a href="#SkImage_MakeFromPicture">MakeFromPicture</a>
994
995
996
997<a name="SkImage_MakeFromPicture"></a>
998## MakeFromPicture
999
1000<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1001static sk_sp&lt;SkImage&gt; MakeFromPicture(sk_sp&lt;SkPicture&gt; picture, const SkISize& dimensions,
1002                                      const SkMatrix* matrix, const SkPaint* paint,
1003                                      BitDepth bitDepth, sk_sp&lt;SkColorSpace&gt; colorSpace)
1004</pre>
1005
1006Creates <a href="#Image">Image</a> from <a href="#SkImage_MakeFromPicture_picture">picture</a>. Returned <a href="#Image">Image</a> width and height are set by dimensions.
1007<a href="#Image">Image</a> draws <a href="#SkImage_MakeFromPicture_picture">picture</a> with <a href="#SkImage_MakeFromPicture_matrix">matrix</a> and <a href="#SkImage_MakeFromPicture_paint">paint</a>, set to <a href="#SkImage_MakeFromPicture_bitDepth">bitDepth</a> and <a href="#SkImage_colorSpace">colorSpace</a>.
1008
1009If <a href="#SkImage_MakeFromPicture_matrix">matrix</a> is nullptr, draws with identity <a href="SkMatrix_Reference#Matrix">Matrix</a>. If <a href="#SkImage_MakeFromPicture_paint">paint</a> is nullptr, draws
1010with default <a href="SkPaint_Reference#Paint">Paint</a>. <a href="#SkImage_colorSpace">colorSpace</a> may be nullptr.
1011
1012### Parameters
1013
1014<table>  <tr>    <td><a name="SkImage_MakeFromPicture_picture"> <code><strong>picture </strong></code> </a></td> <td>
1015stream of drawing commands</td>
1016  </tr>  <tr>    <td><a name="SkImage_MakeFromPicture_dimensions"> <code><strong>dimensions </strong></code> </a></td> <td>
1017width and height</td>
1018  </tr>  <tr>    <td><a name="SkImage_MakeFromPicture_matrix"> <code><strong>matrix </strong></code> </a></td> <td>
1019<a href="SkMatrix_Reference#Matrix">Matrix</a> to rotate, scale, translate, and so on; may be nullptr</td>
1020  </tr>  <tr>    <td><a name="SkImage_MakeFromPicture_paint"> <code><strong>paint </strong></code> </a></td> <td>
1021<a href="SkPaint_Reference#Paint">Paint</a> to apply transparency, filtering, and so on; may be nullptr</td>
1022  </tr>  <tr>    <td><a name="SkImage_MakeFromPicture_bitDepth"> <code><strong>bitDepth </strong></code> </a></td> <td>
10238 bit integer or 16 bit float: per component</td>
1024  </tr>  <tr>    <td><a name="SkImage_MakeFromPicture_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
1025range of colors; may be nullptr</td>
1026  </tr>
1027</table>
1028
1029### Return Value
1030
1031created <a href="#Image">Image</a>, or nullptr
1032
1033### Example
1034
1035<div><fiddle-embed name="4aa2879b9e44dfd6648995326d2c4dcf"></fiddle-embed></div>
1036
1037### See Also
1038
1039<a href="#SkCanvas_drawPicture">SkCanvas::drawPicture</a><sup><a href="#SkCanvas_drawPicture_2">[2]</a></sup><sup><a href="#SkCanvas_drawPicture_3">[3]</a></sup><sup><a href="#SkCanvas_drawPicture_4">[4]</a></sup>
1040
1041---
1042
1043<a name="SkImage_MakeFromAHardwareBuffer"></a>
1044## MakeFromAHardwareBuffer
1045
1046<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1047static sk_sp&lt;SkImage&gt; MakeFromAHardwareBuffer(AHardwareBuffer* hardwareBuffer,
1048                                            SkAlphaType alphaType = kPremul_SkAlphaType,
1049                                            sk_sp&lt;SkColorSpace&gt; colorSpace = nullptr)
1050</pre>
1051
1052Creates <a href="#Image">Image</a> from Android hardware buffer.
1053Returned <a href="#Image">Image</a> takes a reference on the buffer.
1054
1055Only available on Android, when __ANDROID_API__ is defined to be 26 or greater.
1056
1057### Parameters
1058
1059<table>  <tr>    <td><a name="SkImage_MakeFromAHardwareBuffer_hardwareBuffer"> <code><strong>hardwareBuffer </strong></code> </a></td> <td>
1060AHardwareBuffer Android hardware buffer</td>
1061  </tr>  <tr>    <td><a name="SkImage_MakeFromAHardwareBuffer_alphaType"> <code><strong>alphaType </strong></code> </a></td> <td>
1062one of: <a href="SkImageInfo_Reference#SkAlphaType">kUnknown SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kOpaque SkAlphaType</a>,
1063<a href="SkImageInfo_Reference#SkAlphaType">kPremul SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kUnpremul SkAlphaType</a></td>
1064  </tr>  <tr>    <td><a name="SkImage_MakeFromAHardwareBuffer_colorSpace"> <code><strong>colorSpace </strong></code> </a></td> <td>
1065range of colors; may be nullptr</td>
1066  </tr>
1067</table>
1068
1069### Return Value
1070
1071created <a href="#Image">Image</a>, or nullptr
1072
1073### See Also
1074
1075<a href="#SkImage_MakeFromRaster">MakeFromRaster</a>
1076
1077---
1078
1079<a name="SkImage_width"></a>
1080## width
1081
1082<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1083int width() const
1084</pre>
1085
1086Returns pixel count in each row.
1087
1088### Return Value
1089
1090pixel width in <a href="#Image">Image</a>
1091
1092### Example
1093
1094<div><fiddle-embed name="39a6d0bbeac6d957c2338e0bff865cf8"></fiddle-embed></div>
1095
1096### See Also
1097
1098<a href="#SkImage_dimensions">dimensions</a> <a href="#SkImage_height">height</a>
1099
1100---
1101
1102<a name="SkImage_height"></a>
1103## height
1104
1105<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1106int height() const
1107</pre>
1108
1109Returns pixel row count.
1110
1111### Return Value
1112
1113pixel height in <a href="#Image">Image</a>
1114
1115### Example
1116
1117<div><fiddle-embed name="6e563cb8351d34bd8af555a51bcd7a96"></fiddle-embed></div>
1118
1119### See Also
1120
1121<a href="#SkImage_dimensions">dimensions</a> <a href="#SkImage_width">width</a>
1122
1123---
1124
1125<a name="SkImage_dimensions"></a>
1126## dimensions
1127
1128<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1129SkISize dimensions() const
1130</pre>
1131
1132Returns <a href="undocumented#ISize">ISize</a> { <a href="#SkImage_width">width</a>, <a href="#SkImage_height">height</a> }.
1133
1134### Return Value
1135
1136integral size of <a href="#SkImage_width">width</a> and <a href="#SkImage_height">height</a>
1137
1138### Example
1139
1140<div><fiddle-embed name="96b4bc43b3667df9ba9e2dafb770d33c"></fiddle-embed></div>
1141
1142### See Also
1143
1144<a href="#SkImage_height">height</a> <a href="#SkImage_width">width</a> <a href="#SkImage_bounds">bounds</a>
1145
1146---
1147
1148<a name="SkImage_bounds"></a>
1149## bounds
1150
1151<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1152SkIRect bounds() const
1153</pre>
1154
1155Returns <a href="SkIRect_Reference#IRect">IRect</a> { 0, 0, <a href="#SkImage_width">width</a>, <a href="#SkImage_height">height</a> }.
1156
1157### Return Value
1158
1159integral rectangle from origin to <a href="#SkImage_width">width</a> and <a href="#SkImage_height">height</a>
1160
1161### Example
1162
1163<div><fiddle-embed name="c204b38b3fc08914b0a634aa4eaec894"></fiddle-embed></div>
1164
1165### See Also
1166
1167<a href="#SkImage_dimensions">dimensions</a>
1168
1169---
1170
1171<a name="SkImage_uniqueID"></a>
1172## uniqueID
1173
1174<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1175uint32_t uniqueID() const
1176</pre>
1177
1178Returns value unique to image. <a href="#Image">Image</a> contents cannot change after <a href="#Image">Image</a> is
1179created. Any operation to create a new <a href="#Image">Image</a> will receive generate a new
1180unique number.
1181
1182### Return Value
1183
1184unique identifier
1185
1186### Example
1187
1188<div><fiddle-embed name="d70194c9c51e700335f95de91846d023"></fiddle-embed></div>
1189
1190### See Also
1191
1192<a href="#SkImage_isLazyGenerated">isLazyGenerated</a>
1193
1194---
1195
1196<a name="SkImage_alphaType"></a>
1197## alphaType
1198
1199<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1200SkAlphaType alphaType() const
1201</pre>
1202
1203Returns <a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a>, one of: <a href="SkImageInfo_Reference#SkAlphaType">kUnknown SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kOpaque SkAlphaType</a>,
1204<a href="SkImageInfo_Reference#SkAlphaType">kPremul SkAlphaType</a>, <a href="SkImageInfo_Reference#SkAlphaType">kUnpremul SkAlphaType</a>.
1205
1206<a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a> returned was a parameter to an <a href="#Image">Image</a> constructor,
1207or was parsed from encoded data.
1208
1209### Return Value
1210
1211<a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a> in <a href="#Image">Image</a>
1212
1213### Example
1214
1215<div><fiddle-embed name="dac1403132a42459d6881585efbfe74b"></fiddle-embed></div>
1216
1217### See Also
1218
1219<a href="#SkImageInfo_alphaType">SkImageInfo::alphaType</a>
1220
1221---
1222
1223<a name="SkImage_colorSpace"></a>
1224## colorSpace
1225
1226<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1227SkColorSpace* colorSpace() const
1228</pre>
1229
1230Returns <a href="undocumented#Color_Space">Color Space</a>, the range of colors, associated with <a href="#Image">Image</a>.  The
1231reference count of <a href="undocumented#Color_Space">Color Space</a> is unchanged. The returned <a href="undocumented#Color_Space">Color Space</a> is
1232immutable.
1233
1234<a href="undocumented#Color_Space">Color Space</a> returned was passed to an <a href="#Image">Image</a> constructor,
1235or was parsed from encoded data. <a href="undocumented#Color_Space">Color Space</a> returned may be ignored when <a href="#Image">Image</a>
1236is drawn, depending on the capabilities of the <a href="SkSurface_Reference#Surface">Surface</a> receiving the drawing.
1237
1238### Return Value
1239
1240<a href="undocumented#Color_Space">Color Space</a> in <a href="#Image">Image</a>, or nullptr
1241
1242### Example
1243
1244<div><fiddle-embed name="4468d573f42af6f5e234be10a5453bb2"></fiddle-embed></div>
1245
1246### See Also
1247
1248<a href="#SkImage_refColorSpace">refColorSpace</a> <a href="#SkImage_makeColorSpace">makeColorSpace</a>
1249
1250---
1251
1252<a name="SkImage_refColorSpace"></a>
1253## refColorSpace
1254
1255<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1256sk_sp&lt;SkColorSpace&gt; refColorSpace() const
1257</pre>
1258
1259Returns a smart pointer to <a href="undocumented#Color_Space">Color Space</a>, the range of colors, associated with
1260<a href="#Image">Image</a>.  The smart pointer tracks the number of objects sharing this
1261<a href="undocumented#SkColorSpace">SkColorSpace</a> reference so the memory is released when the owners destruct.
1262
1263The returned <a href="undocumented#SkColorSpace">SkColorSpace</a> is immutable.
1264
1265<a href="undocumented#Color_Space">Color Space</a> returned was passed to an <a href="#Image">Image</a> constructor,
1266or was parsed from encoded data. <a href="undocumented#Color_Space">Color Space</a> returned may be ignored when <a href="#Image">Image</a>
1267is drawn, depending on the capabilities of the <a href="SkSurface_Reference#Surface">Surface</a> receiving the drawing.
1268
1269### Return Value
1270
1271<a href="undocumented#Color_Space">Color Space</a> in <a href="#Image">Image</a>, or nullptr, wrapped in a smart pointer
1272
1273### Example
1274
1275<div><fiddle-embed name="59b2078ebfbda8736a57c0486ae33332"></fiddle-embed></div>
1276
1277### See Also
1278
1279<a href="#SkImage_colorSpace">colorSpace</a> <a href="#SkImage_makeColorSpace">makeColorSpace</a>
1280
1281---
1282
1283<a name="SkImage_isAlphaOnly"></a>
1284## isAlphaOnly
1285
1286<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1287bool isAlphaOnly() const
1288</pre>
1289
1290Returns true if <a href="#Image">Image</a> pixels represent transparency only. If true, each pixel
1291is packed in 8 bits as defined by <a href="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>.
1292
1293### Return Value
1294
1295true if pixels represent a transparency mask
1296
1297### Example
1298
1299<div><fiddle-embed name="50762c73b8ea91959c5a7b68fbf1062d">
1300
1301#### Example Output
1302
1303~~~~
1304alphaOnly = true
1305~~~~
1306
1307</fiddle-embed></div>
1308
1309### See Also
1310
1311<a href="#SkImage_alphaType">alphaType</a> <a href="#SkImage_isOpaque">isOpaque</a>
1312
1313---
1314
1315<a name="SkImage_isOpaque"></a>
1316## isOpaque
1317
1318<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1319bool isOpaque() const
1320</pre>
1321
1322Returns true if pixels ignore their <a href="#Alpha">Alpha</a> value and are treated as fully opaque.
1323
1324### Return Value
1325
1326true if <a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a> is <a href="SkImageInfo_Reference#SkAlphaType">kOpaque SkAlphaType</a>
1327
1328### Example
1329
1330<div><fiddle-embed name="e3340460003b74ee286d625e68589d65">
1331
1332#### Example Output
1333
1334~~~~
1335isOpaque = false
1336isOpaque = true
1337~~~~
1338
1339</fiddle-embed></div>
1340
1341### See Also
1342
1343<a href="#SkImage_alphaType">alphaType</a> <a href="#SkImage_isAlphaOnly">isAlphaOnly</a>
1344
1345---
1346
1347<a name="SkImage_makeShader"></a>
1348## makeShader
1349
1350<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1351sk_sp&lt;SkShader&gt; makeShader(SkShader::TileMode tileMode1, SkShader::TileMode tileMode2,
1352                           const SkMatrix* localMatrix = nullptr) const
1353</pre>
1354
1355Creates <a href="undocumented#Shader">Shader</a> from <a href="#Image">Image</a>. <a href="undocumented#Shader">Shader</a> dimensions are taken from <a href="#Image">Image</a>. <a href="undocumented#Shader">Shader</a> uses
1356<a href="#SkShader_TileMode">SkShader::TileMode</a> rules to fill drawn area outside <a href="#Image">Image</a>. <a href="#SkImage_makeShader_localMatrix">localMatrix</a> permits
1357transforming <a href="#Image">Image</a> before <a href="#Matrix">Canvas Matrix</a> is applied.
1358
1359### Parameters
1360
1361<table>  <tr>    <td><a name="SkImage_makeShader_tileMode1"> <code><strong>tileMode1 </strong></code> </a></td> <td>
1362tiling in x, one of: <a href="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a>, <a href="#SkShader_kRepeat_TileMode">SkShader::kRepeat TileMode</a>,
1363<a href="#SkShader_kMirror_TileMode">SkShader::kMirror TileMode</a></td>
1364  </tr>  <tr>    <td><a name="SkImage_makeShader_tileMode2"> <code><strong>tileMode2 </strong></code> </a></td> <td>
1365tiling in y, one of: <a href="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a>, <a href="#SkShader_kRepeat_TileMode">SkShader::kRepeat TileMode</a>,
1366<a href="#SkShader_kMirror_TileMode">SkShader::kMirror TileMode</a></td>
1367  </tr>  <tr>    <td><a name="SkImage_makeShader_localMatrix"> <code><strong>localMatrix </strong></code> </a></td> <td>
1368<a href="#Image">Image</a> transformation, or nullptr</td>
1369  </tr>
1370</table>
1371
1372### Return Value
1373
1374<a href="undocumented#Shader">Shader</a> containing <a href="#Image">Image</a>
1375
1376### Example
1377
1378<div><fiddle-embed name="1c6de6fe72b00b5be970f5f718363449"></fiddle-embed></div>
1379
1380### See Also
1381
1382<a href="#SkImage_scalePixels">scalePixels</a>
1383
1384---
1385
1386<a name="SkImage_makeShader_2"></a>
1387
1388<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1389sk_sp&lt;SkShader&gt; makeShader(const SkMatrix* localMatrix = nullptr) const
1390</pre>
1391
1392Creates <a href="undocumented#Shader">Shader</a> from <a href="#Image">Image</a>. <a href="undocumented#Shader">Shader</a> dimensions are taken from <a href="#Image">Image</a>. <a href="undocumented#Shader">Shader</a> uses
1393<a href="#SkShader_kClamp_TileMode">SkShader::kClamp TileMode</a> to fill drawn area outside <a href="#Image">Image</a>. <a href="#SkImage_makeShader_2_localMatrix">localMatrix</a> permits
1394transforming <a href="#Image">Image</a> before <a href="#Matrix">Canvas Matrix</a> is applied.
1395
1396### Parameters
1397
1398<table>  <tr>    <td><a name="SkImage_makeShader_2_localMatrix"> <code><strong>localMatrix </strong></code> </a></td> <td>
1399<a href="#Image">Image</a> transformation, or nullptr</td>
1400  </tr>
1401</table>
1402
1403### Return Value
1404
1405<a href="undocumented#Shader">Shader</a> containing <a href="#Image">Image</a>
1406
1407### Example
1408
1409<div><fiddle-embed name="10172fca71b9dbdcade772513ffeb27e"></fiddle-embed></div>
1410
1411### See Also
1412
1413<a href="#SkImage_scalePixels">scalePixels</a>
1414
1415---
1416
1417<a name="SkImage_peekPixels"></a>
1418## peekPixels
1419
1420<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1421bool peekPixels(SkPixmap* pixmap) const
1422</pre>
1423
1424Copies <a href="#Image">Image</a> pixel address, row bytes, and <a href="#Info">Image Info</a> to <a href="#SkImage_peekPixels_pixmap">pixmap</a>, if address
1425is available, and returns true. If pixel address is not available, return
1426false and leave <a href="#SkImage_peekPixels_pixmap">pixmap</a> unchanged.
1427
1428### Parameters
1429
1430<table>  <tr>    <td><a name="SkImage_peekPixels_pixmap"> <code><strong>pixmap </strong></code> </a></td> <td>
1431storage for pixel state if pixels are readable; otherwise, ignored</td>
1432  </tr>
1433</table>
1434
1435### Return Value
1436
1437true if <a href="#Image">Image</a> has direct access to pixels
1438
1439### Example
1440
1441<div><fiddle-embed name="900c0eab8dfdecd8301ed5be95887f8e">
1442
1443#### Example Output
1444
1445~~~~
1446------------
1447--xx----x---
1448-x--x--x----
1449-x--x--x----
1450-x--x-x-----
1451--xx-xx-xx--
1452-----x-x--x-
1453----x--x--x-
1454----x--x--x-
1455---x----xx--
1456------------
1457~~~~
1458
1459</fiddle-embed></div>
1460
1461### See Also
1462
1463<a href="#SkImage_readPixels">readPixels</a><sup><a href="#SkImage_readPixels_2">[2]</a></sup>
1464
1465---
1466
1467<a name="SkImage_getTexture"></a>
1468## getTexture
1469
1470<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1471GrTexture* getTexture() const
1472</pre>
1473
1474Deprecated.
1475
1476---
1477
1478<a name="SkImage_isTextureBacked"></a>
1479## isTextureBacked
1480
1481<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1482bool isTextureBacked() const
1483</pre>
1484
1485Returns true the contents of <a href="#Image">Image</a> was created on or uploaded to GPU memory,
1486and is available as a <a href="undocumented#GPU_Texture">GPU Texture</a>.
1487
1488### Return Value
1489
1490true if <a href="#Image">Image</a> is a <a href="undocumented#GPU_Texture">GPU Texture</a>
1491
1492### Example
1493
1494<div><fiddle-embed name="96fd92d399778486a51c5d828ef99322" gpu="true"></fiddle-embed></div>
1495
1496### See Also
1497
1498<a href="#SkImage_MakeFromTexture">MakeFromTexture</a><sup><a href="#SkImage_MakeFromTexture_2">[2]</a></sup><sup><a href="#SkImage_MakeFromTexture_3">[3]</a></sup><sup><a href="#SkImage_MakeFromTexture_4">[4]</a></sup> <a href="#SkImage_isValid">isValid</a>
1499
1500---
1501
1502<a name="SkImage_isValid"></a>
1503## isValid
1504
1505<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1506bool isValid(GrContext* context) const
1507</pre>
1508
1509Returns true if <a href="#Image">Image</a> can be drawn on either <a href="undocumented#Raster_Surface">Raster Surface</a> or <a href="undocumented#GPU_Surface">GPU Surface</a>.
1510If <a href="#SkImage_isValid_context">context</a> is nullptr, tests if <a href="#Image">Image</a> draws on <a href="undocumented#Raster_Surface">Raster Surface</a>;
1511otherwise, tests if <a href="#Image">Image</a> draws on <a href="undocumented#GPU_Surface">GPU Surface</a> associated with <a href="#SkImage_isValid_context">context</a>.
1512
1513<a href="#Image">Image</a> backed by <a href="undocumented#GPU_Texture">GPU Texture</a> may become invalid if associated <a href="undocumented#GrContext">GrContext</a> is
1514invalid. <a href="#Lazy_Image">Lazy Image</a> may be invalid and may not draw to <a href="undocumented#Raster_Surface">Raster Surface</a> or
1515<a href="undocumented#GPU_Surface">GPU Surface</a> or both.
1516
1517### Parameters
1518
1519<table>  <tr>    <td><a name="SkImage_isValid_context"> <code><strong>context </strong></code> </a></td> <td>
1520<a href="undocumented#GPU_Context">GPU Context</a></td>
1521  </tr>
1522</table>
1523
1524### Return Value
1525
1526true if <a href="#Image">Image</a> can be drawn
1527
1528### Example
1529
1530<div><fiddle-embed name="daf1507ab3a5f7cb0f90058cbc028402" gpu="true"></fiddle-embed></div>
1531
1532### See Also
1533
1534<a href="#SkImage_isTextureBacked">isTextureBacked</a> <a href="#SkImage_isLazyGenerated">isLazyGenerated</a>
1535
1536---
1537
1538<a name="SkImage_getTextureHandle"></a>
1539## getTextureHandle
1540
1541<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1542GrBackendObject getTextureHandle(bool flushPendingGrContextIO, GrSurfaceOrigin* origin = nullptr) const
1543</pre>
1544
1545Retrieves the back-end API handle of texture. If <a href="#SkImage_getTextureHandle_flushPendingGrContextIO">flushPendingGrContextIO</a> is true,
1546complete deferred I/O operations.
1547
1548If <a href="#SkImage_getTextureHandle_origin">origin</a> in not nullptr, copies location of content drawn into <a href="#Image">Image</a>.
1549
1550### Parameters
1551
1552<table>  <tr>    <td><a name="SkImage_getTextureHandle_flushPendingGrContextIO"> <code><strong>flushPendingGrContextIO </strong></code> </a></td> <td>
1553flag to flush outstanding requests</td>
1554  </tr>  <tr>    <td><a name="SkImage_getTextureHandle_origin"> <code><strong>origin </strong></code> </a></td> <td>
1555storage for one of: <a href="undocumented#GrSurfaceOrigin">kTopLeft GrSurfaceOrigin</a>,
1556<a href="undocumented#GrSurfaceOrigin">kBottomLeft GrSurfaceOrigin</a>; or nullptr</td>
1557  </tr>
1558</table>
1559
1560### Return Value
1561
1562back-end API texture handle, or nullptr
1563
1564### Example
1565
1566<div><fiddle-embed name="f8943191063bfcc69f29f2b149df5c6d" gpu="true"></fiddle-embed></div>
1567
1568### Example
1569
1570<div><fiddle-embed name="a86c580638fcf83f782047b95c60f43f" gpu="true"></fiddle-embed></div>
1571
1572### See Also
1573
1574<a href="#SkImage_MakeFromTexture">MakeFromTexture</a><sup><a href="#SkImage_MakeFromTexture_2">[2]</a></sup><sup><a href="#SkImage_MakeFromTexture_3">[3]</a></sup><sup><a href="#SkImage_MakeFromTexture_4">[4]</a></sup> <a href="#SkImage_isTextureBacked">isTextureBacked</a>
1575
1576---
1577
1578## <a name="SkImage_CachingHint"></a> Enum SkImage::CachingHint
1579
1580<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1581enum <a href="#SkImage_CachingHint">CachingHint</a> {
1582<a href="#SkImage_kAllow_CachingHint">kAllow CachingHint</a>,
1583<a href="#SkImage_kDisallow_CachingHint">kDisallow CachingHint</a>,
1584};</pre>
1585
1586<a href="#SkImage_CachingHint">CachingHint</a> selects whether Skia may internally cache <a href="#Bitmap">Bitmaps</a> generated by
1587decoding <a href="#Image">Image</a>, or by copying <a href="#Image">Image</a> from GPU to CPU. The default behavior
1588allows caching <a href="#Bitmap">Bitmaps</a>.
1589
1590Choose <a href="#SkImage_kDisallow_CachingHint">kDisallow CachingHint</a> if <a href="#Image">Image</a> pixels are to be used only once, or
1591if <a href="#Image">Image</a> pixels reside in a cache outside of Skia, or to reduce memory pressure.
1592
1593Choosing <a href="#SkImage_kAllow_CachingHint">kAllow CachingHint</a> does not ensure that pixels will be cached.
1594<a href="#Image">Image</a> pixels may not be cached if memory requirements are too large or
1595pixels are not accessible.
1596
1597### Constants
1598
1599<table>
1600  <tr>
1601    <td><a name="SkImage_kAllow_CachingHint"> <code><strong>SkImage::kAllow_CachingHint </strong></code> </a></td><td>0</td><td>Allows Skia to internally cache decoded and copied pixels.</td>
1602  </tr>
1603  <tr>
1604    <td><a name="SkImage_kDisallow_CachingHint"> <code><strong>SkImage::kDisallow_CachingHint </strong></code> </a></td><td>1</td><td>Disallows Skia from internally caching decoded and copied pixels.</td>
1605  </tr>
1606</table>
1607
1608### See Also
1609
1610<a href="#SkImage_readPixels">readPixels</a><sup><a href="#SkImage_readPixels_2">[2]</a></sup> <a href="#SkImage_scalePixels">scalePixels</a>
1611
1612
1613
1614<a name="SkImage_readPixels"></a>
1615## readPixels
1616
1617<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1618bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY,
1619                CachingHint cachingHint = kAllow_CachingHint) const
1620</pre>
1621
1622Copies <a href="SkRect_Reference#Rect">Rect</a> of pixels from <a href="#Image">Image</a> to <a href="#SkImage_readPixels_dstPixels">dstPixels</a>. Copy starts at offset (<a href="#SkImage_readPixels_srcX">srcX</a>, <a href="#SkImage_readPixels_srcY">srcY</a>),
1623and does not exceed <a href="#Image">Image</a> (<a href="#SkImage_width">width</a>, <a href="#SkImage_height">height</a>).
1624
1625<a href="#SkImage_readPixels_dstInfo">dstInfo</a> specifies width, height, <a href="SkImageInfo_Reference#Color_Type">Color Type</a>, <a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a>, and <a href="undocumented#Color_Space">Color Space</a> of
1626destination. <a href="#SkImage_readPixels_dstRowBytes">dstRowBytes</a> specifics the gap from one destination row to the next.
1627Returns true if pixels are copied. Returns false if:
1628
1629<table>  <tr>
1630    <td><a href="#SkImage_readPixels_dstInfo">dstInfo</a>.addr() equals nullptr</td>  </tr>  <tr>
1631    <td><a href="#SkImage_readPixels_dstRowBytes">dstRowBytes</a> is less than <a href="#SkImage_readPixels_dstInfo">dstInfo</a>.<a href="SkImageInfo_Reference#SkImageInfo">minRowBytes</a></td>  </tr>  <tr>
1632    <td><a href="undocumented#Pixel_Ref">Pixel Ref</a> is nullptr</td>  </tr>
1633</table>
1634
1635Pixels are copied only if pixel conversion is possible. If <a href="#Image">Image</a> <a href="SkImageInfo_Reference#Color_Type">Color Type</a> is
1636<a href="SkImageInfo_Reference#SkColorType">kGray 8 SkColorType</a>, or <a href="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkImage_readPixels_dstInfo">dstInfo</a>.<a href="SkImageInfo_Reference#SkImageInfo">colorType</a> must match.
1637If <a href="#Image">Image</a> <a href="SkImageInfo_Reference#Color_Type">Color Type</a> is <a href="SkImageInfo_Reference#SkColorType">kGray 8 SkColorType</a>, <a href="#SkImage_readPixels_dstInfo">dstInfo</a>.<a href="#SkImage_colorSpace">colorSpace</a> must match.
1638If <a href="#Image">Image</a> <a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a> is <a href="SkImageInfo_Reference#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkImage_readPixels_dstInfo">dstInfo</a>.<a href="#SkImage_alphaType">alphaType</a> must
1639match. If <a href="#Image">Image</a> <a href="undocumented#Color_Space">Color Space</a> is nullptr, <a href="#SkImage_readPixels_dstInfo">dstInfo</a>.<a href="#SkImage_colorSpace">colorSpace</a> must match. Returns
1640false if pixel conversion is not possible.
1641
1642<a href="#SkImage_readPixels_srcX">srcX</a> and <a href="#SkImage_readPixels_srcY">srcY</a> may be negative to copy only top or left of source. Returns
1643false if <a href="#SkImage_width">width</a> or <a href="#SkImage_height">height</a> is zero or negative.
1644Returns false ifabs(srcX) >= <a href="#Image">Image</a> <a href="#SkImage_width">width</a>,
1645or ifabs(srcY) >= <a href="#Image">Image</a> <a href="#SkImage_height">height</a>.
1646
1647If <a href="#SkImage_readPixels_cachingHint">cachingHint</a> is <a href="#SkImage_kAllow_CachingHint">kAllow CachingHint</a>, pixels may be retained locally.
1648If <a href="#SkImage_readPixels_cachingHint">cachingHint</a> is <a href="#SkImage_kDisallow_CachingHint">kDisallow CachingHint</a>, pixels are not added to the local cache.
1649
1650### Parameters
1651
1652<table>  <tr>    <td><a name="SkImage_readPixels_dstInfo"> <code><strong>dstInfo </strong></code> </a></td> <td>
1653destination width, height, <a href="SkImageInfo_Reference#Color_Type">Color Type</a>, <a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a></td>
1654  </tr>  <tr>    <td><a name="SkImage_readPixels_dstPixels"> <code><strong>dstPixels </strong></code> </a></td> <td>
1655destination pixel storage</td>
1656  </tr>  <tr>    <td><a name="SkImage_readPixels_dstRowBytes"> <code><strong>dstRowBytes </strong></code> </a></td> <td>
1657destination row length</td>
1658  </tr>  <tr>    <td><a name="SkImage_readPixels_srcX"> <code><strong>srcX </strong></code> </a></td> <td>
1659column index whose absolute value is less than <a href="#SkImage_width">width</a></td>
1660  </tr>  <tr>    <td><a name="SkImage_readPixels_srcY"> <code><strong>srcY </strong></code> </a></td> <td>
1661row index whose absolute value is less than <a href="#SkImage_height">height</a></td>
1662  </tr>  <tr>    <td><a name="SkImage_readPixels_cachingHint"> <code><strong>cachingHint </strong></code> </a></td> <td>
1663one of: <a href="#SkImage_kAllow_CachingHint">kAllow CachingHint</a>, <a href="#SkImage_kDisallow_CachingHint">kDisallow CachingHint</a></td>
1664  </tr>
1665</table>
1666
1667### Return Value
1668
1669true if pixels are copied to <a href="#SkImage_readPixels_dstPixels">dstPixels</a>
1670
1671### Example
1672
1673<div><fiddle-embed name="8aa8ca63dff4641dfc6ea8a3c555d59c"></fiddle-embed></div>
1674
1675### See Also
1676
1677<a href="#SkImage_scalePixels">scalePixels</a> <a href="#SkBitmap_readPixels">SkBitmap::readPixels</a><sup><a href="#SkBitmap_readPixels_2">[2]</a></sup><sup><a href="#SkBitmap_readPixels_3">[3]</a></sup><sup><a href="#SkBitmap_readPixels_4">[4]</a></sup> <a href="#SkPixmap_readPixels">SkPixmap::readPixels</a><sup><a href="#SkPixmap_readPixels_2">[2]</a></sup><sup><a href="#SkPixmap_readPixels_3">[3]</a></sup><sup><a href="#SkPixmap_readPixels_4">[4]</a></sup><sup><a href="#SkPixmap_readPixels_5">[5]</a></sup> <a href="#SkCanvas_readPixels">SkCanvas::readPixels</a><sup><a href="#SkCanvas_readPixels_2">[2]</a></sup><sup><a href="#SkCanvas_readPixels_3">[3]</a></sup> <a href="#SkSurface_readPixels">SkSurface::readPixels</a><sup><a href="#SkSurface_readPixels_2">[2]</a></sup><sup><a href="#SkSurface_readPixels_3">[3]</a></sup>
1678
1679---
1680
1681<a name="SkImage_readPixels_2"></a>
1682
1683<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1684bool readPixels(const SkPixmap& dst, int srcX, int srcY, CachingHint cachingHint = kAllow_CachingHint) const
1685</pre>
1686
1687Copies a <a href="SkRect_Reference#Rect">Rect</a> of pixels from <a href="#Image">Image</a> to <a href="#SkImage_readPixels_2_dst">dst</a>. Copy starts at (<a href="#SkImage_readPixels_2_srcX">srcX</a>, <a href="#SkImage_readPixels_2_srcY">srcY</a>), and
1688does not exceed <a href="#Image">Image</a> (<a href="#SkImage_width">width</a>, <a href="#SkImage_height">height</a>).
1689
1690<a href="#SkImage_readPixels_2_dst">dst</a> specifies width, height, <a href="SkImageInfo_Reference#Color_Type">Color Type</a>, <a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a>, <a href="undocumented#Color_Space">Color Space</a>, pixel storage,
1691and row bytes of destination. <a href="#SkImage_readPixels_2_dst">dst</a>.<a href="SkPixmap_Reference#SkPixmap">rowBytes</a> specifics the gap from one destination
1692row to the next. Returns true if pixels are copied. Returns false if:
1693
1694<table>  <tr>
1695    <td><a href="#SkImage_readPixels_2_dst">dst</a> pixel storage equals nullptr</td>  </tr>  <tr>
1696    <td><a href="#SkImage_readPixels_2_dst">dst</a>.<a href="SkPixmap_Reference#SkPixmap">rowBytes</a> is less than <a href="#SkImageInfo_minRowBytes">SkImageInfo::minRowBytes</a></td>  </tr>  <tr>
1697    <td><a href="undocumented#Pixel_Ref">Pixel Ref</a> is nullptr</td>  </tr>
1698</table>
1699
1700Pixels are copied only if pixel conversion is possible. If <a href="#Image">Image</a> <a href="SkImageInfo_Reference#Color_Type">Color Type</a> is
1701<a href="SkImageInfo_Reference#SkColorType">kGray 8 SkColorType</a>, or <a href="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkImage_readPixels_2_dst">dst</a>.<a href="SkPixmap_Reference#SkPixmap">colorType</a> must match.
1702If <a href="#Image">Image</a> <a href="SkImageInfo_Reference#Color_Type">Color Type</a> is <a href="SkImageInfo_Reference#SkColorType">kGray 8 SkColorType</a>, <a href="#SkImage_readPixels_2_dst">dst</a>.<a href="#SkImage_colorSpace">colorSpace</a> must match.
1703If <a href="#Image">Image</a> <a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a> is <a href="SkImageInfo_Reference#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkImage_readPixels_2_dst">dst</a>.<a href="#SkImage_alphaType">alphaType</a> must
1704match. If <a href="#Image">Image</a> <a href="undocumented#Color_Space">Color Space</a> is nullptr, <a href="#SkImage_readPixels_2_dst">dst</a>.<a href="#SkImage_colorSpace">colorSpace</a> must match. Returns
1705false if pixel conversion is not possible.
1706<a href="#SkImage_readPixels_2_srcX">srcX</a> and <a href="#SkImage_readPixels_2_srcY">srcY</a> may be negative to copy only top or left of source. Returns
1707false if <a href="#SkImage_width">width</a> or <a href="#SkImage_height">height</a> is zero or negative.
1708Returns false ifabs(srcX) >= <a href="#Image">Image</a> <a href="#SkImage_width">width</a>,
1709or ifabs(srcY) >= <a href="#Image">Image</a> <a href="#SkImage_height">height</a>.
1710
1711If <a href="#SkImage_readPixels_2_cachingHint">cachingHint</a> is <a href="#SkImage_kAllow_CachingHint">kAllow CachingHint</a>, pixels may be retained locally.
1712If <a href="#SkImage_readPixels_2_cachingHint">cachingHint</a> is <a href="#SkImage_kDisallow_CachingHint">kDisallow CachingHint</a>, pixels are not added to the local cache.
1713
1714### Parameters
1715
1716<table>  <tr>    <td><a name="SkImage_readPixels_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
1717destination <a href="SkPixmap_Reference#Pixmap">Pixmap</a>: <a href="#Info">Image Info</a>, pixels, row bytes</td>
1718  </tr>  <tr>    <td><a name="SkImage_readPixels_2_srcX"> <code><strong>srcX </strong></code> </a></td> <td>
1719column index whose absolute value is less than <a href="#SkImage_width">width</a></td>
1720  </tr>  <tr>    <td><a name="SkImage_readPixels_2_srcY"> <code><strong>srcY </strong></code> </a></td> <td>
1721row index whose absolute value is less than <a href="#SkImage_height">height</a></td>
1722  </tr>  <tr>    <td><a name="SkImage_readPixels_2_cachingHint"> <code><strong>cachingHint </strong></code> </a></td> <td>
1723one of: <a href="#SkImage_kAllow_CachingHint">kAllow CachingHint</a>, <a href="#SkImage_kDisallow_CachingHint">kDisallow CachingHint</a></td>
1724  </tr>
1725</table>
1726
1727### Return Value
1728
1729true if pixels are copied to <a href="#SkImage_readPixels_2_dst">dst</a>
1730
1731### Example
1732
1733<div><fiddle-embed name="b77a73c4baa63a4a8e2a4fdd96144d0b"></fiddle-embed></div>
1734
1735### See Also
1736
1737<a href="#SkImage_scalePixels">scalePixels</a> <a href="#SkBitmap_readPixels">SkBitmap::readPixels</a><sup><a href="#SkBitmap_readPixels_2">[2]</a></sup><sup><a href="#SkBitmap_readPixels_3">[3]</a></sup><sup><a href="#SkBitmap_readPixels_4">[4]</a></sup> <a href="#SkPixmap_readPixels">SkPixmap::readPixels</a><sup><a href="#SkPixmap_readPixels_2">[2]</a></sup><sup><a href="#SkPixmap_readPixels_3">[3]</a></sup><sup><a href="#SkPixmap_readPixels_4">[4]</a></sup><sup><a href="#SkPixmap_readPixels_5">[5]</a></sup> <a href="#SkCanvas_readPixels">SkCanvas::readPixels</a><sup><a href="#SkCanvas_readPixels_2">[2]</a></sup><sup><a href="#SkCanvas_readPixels_3">[3]</a></sup> <a href="#SkSurface_readPixels">SkSurface::readPixels</a><sup><a href="#SkSurface_readPixels_2">[2]</a></sup><sup><a href="#SkSurface_readPixels_3">[3]</a></sup>
1738
1739---
1740
1741<a name="SkImage_scalePixels"></a>
1742## scalePixels
1743
1744<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1745bool scalePixels(const SkPixmap& dst, SkFilterQuality filterQuality,
1746                 CachingHint cachingHint = kAllow_CachingHint) const
1747</pre>
1748
1749Copies <a href="#Image">Image</a> to <a href="#SkImage_scalePixels_dst">dst</a>, scaling pixels to fit <a href="#SkImage_scalePixels_dst">dst</a>.<a href="#SkImage_width">width</a> and <a href="#SkImage_scalePixels_dst">dst</a>.<a href="#SkImage_height">height</a>, and
1750converting pixels to match <a href="#SkImage_scalePixels_dst">dst</a>.<a href="SkPixmap_Reference#SkPixmap">colorType</a> and <a href="#SkImage_scalePixels_dst">dst</a>.<a href="#SkImage_alphaType">alphaType</a>. Returns true if
1751pixels are copied. Returns false if <a href="#SkImage_scalePixels_dst">dst</a>.addr() is nullptr, or <a href="#SkImage_scalePixels_dst">dst</a>.<a href="SkPixmap_Reference#SkPixmap">rowBytes</a> is
1752less than <a href="#SkImage_scalePixels_dst">dst</a> <a href="#SkImageInfo_minRowBytes">SkImageInfo::minRowBytes</a>.
1753
1754Pixels are copied only if pixel conversion is possible. If <a href="#Image">Image</a> <a href="SkImageInfo_Reference#Color_Type">Color Type</a> is
1755<a href="SkImageInfo_Reference#SkColorType">kGray 8 SkColorType</a>, or <a href="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a>; <a href="#SkImage_scalePixels_dst">dst</a>.<a href="SkPixmap_Reference#SkPixmap">colorType</a> must match.
1756If <a href="#Image">Image</a> <a href="SkImageInfo_Reference#Color_Type">Color Type</a> is <a href="SkImageInfo_Reference#SkColorType">kGray 8 SkColorType</a>, <a href="#SkImage_scalePixels_dst">dst</a>.<a href="#SkImage_colorSpace">colorSpace</a> must match.
1757If <a href="#Image">Image</a> <a href="SkImageInfo_Reference#Alpha_Type">Alpha Type</a> is <a href="SkImageInfo_Reference#SkAlphaType">kOpaque SkAlphaType</a>, <a href="#SkImage_scalePixels_dst">dst</a>.<a href="#SkImage_alphaType">alphaType</a> must
1758match. If <a href="#Image">Image</a> <a href="undocumented#Color_Space">Color Space</a> is nullptr, <a href="#SkImage_scalePixels_dst">dst</a>.<a href="#SkImage_colorSpace">colorSpace</a> must match. Returns
1759false if pixel conversion is not possible.
1760
1761Scales the image, with <a href="#SkImage_scalePixels_filterQuality">filterQuality</a>, to match <a href="#SkImage_scalePixels_dst">dst</a>.<a href="#SkImage_width">width</a> and <a href="#SkImage_scalePixels_dst">dst</a>.<a href="#SkImage_height">height</a>.
1762<a href="#SkImage_scalePixels_filterQuality">filterQuality</a> <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a> is fastest, typically implemented with
1763<a href="undocumented#Filter_Quality_Nearest_Neighbor">Filter Quality Nearest Neighbor</a>. <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a> is typically implemented with
1764<a href="undocumented#Filter_Quality_Bilerp">Filter Quality Bilerp</a>. <a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a> is typically implemented with
1765<a href="undocumented#Filter_Quality_Bilerp">Filter Quality Bilerp</a>, and <a href="undocumented#Filter_Quality_MipMap">Filter Quality MipMap</a> when size is reduced.
1766<a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a> is slowest, typically implemented with <a href="undocumented#Filter_Quality_BiCubic">Filter Quality BiCubic</a>.
1767
1768If <a href="#SkImage_scalePixels_cachingHint">cachingHint</a> is <a href="#SkImage_kAllow_CachingHint">kAllow CachingHint</a>, pixels may be retained locally.
1769If <a href="#SkImage_scalePixels_cachingHint">cachingHint</a> is <a href="#SkImage_kDisallow_CachingHint">kDisallow CachingHint</a>, pixels are not added to the local cache.
1770
1771### Parameters
1772
1773<table>  <tr>    <td><a name="SkImage_scalePixels_dst"> <code><strong>dst </strong></code> </a></td> <td>
1774destination <a href="SkPixmap_Reference#Pixmap">Pixmap</a>: <a href="#Info">Image Info</a>, pixels, row bytes</td>
1775  </tr>  <tr>    <td><a name="SkImage_scalePixels_filterQuality"> <code><strong>filterQuality </strong></code> </a></td> <td>
1776one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
1777<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a></td>
1778  </tr>  <tr>    <td><a name="SkImage_scalePixels_cachingHint"> <code><strong>cachingHint </strong></code> </a></td> <td>
1779one of: <a href="#SkImage_kAllow_CachingHint">kAllow CachingHint</a>, <a href="#SkImage_kDisallow_CachingHint">kDisallow CachingHint</a></td>
1780  </tr>
1781</table>
1782
1783### Return Value
1784
1785true if pixels are scaled to fit <a href="#SkImage_scalePixels_dst">dst</a>
1786
1787### Example
1788
1789<div><fiddle-embed name="5949c9a63610cae30019e5b1899ee38f"></fiddle-embed></div>
1790
1791### See Also
1792
1793<a href="#SkCanvas_drawImage">SkCanvas::drawImage</a><sup><a href="#SkCanvas_drawImage_2">[2]</a></sup> <a href="#SkImage_readPixels">readPixels</a><sup><a href="#SkImage_readPixels_2">[2]</a></sup> <a href="#SkPixmap_scalePixels">SkPixmap::scalePixels</a>
1794
1795---
1796
1797<a name="SkImage_encodeToData"></a>
1798## encodeToData
1799
1800<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1801sk_sp&lt;SkData&gt; encodeToData(SkEncodedImageFormat encodedImageFormat, int quality) const
1802</pre>
1803
1804Encodes <a href="#Image">Image</a> pixels, returning result as <a href="undocumented#SkData">SkData</a>.
1805
1806Returns nullptr if encoding fails, or if <a href="#SkImage_encodeToData_encodedImageFormat">encodedImageFormat</a> is not supported.
1807
1808<a href="#Image">Image</a> encoding in a format requires both building with one or more of:
1809SK_HAS_JPEG_LIBRARY, SK_HAS_PNG_LIBRARY, SK_HAS_WEBP_LIBRARY; and platform support
1810for the encoded format.
1811
1812If SK_BUILD_FOR_MAC or SK_BUILD_FOR_IOS is defined, <a href="#SkImage_encodeToData_encodedImageFormat">encodedImageFormat</a> can
1813additionally be one of: <a href="#SkEncodedImageFormat_kICO">SkEncodedImageFormat::kICO</a>, <a href="#SkEncodedImageFormat_kBMP">SkEncodedImageFormat::kBMP</a>,
1814<a href="#SkEncodedImageFormat_kGIF">SkEncodedImageFormat::kGIF</a>.
1815
1816<a href="#SkImage_encodeToData_quality">quality</a> is a platform and format specific metric trading off size and encoding
1817error. When used, <a href="#SkImage_encodeToData_quality">quality</a> equaling 100 encodes with the least error. <a href="#SkImage_encodeToData_quality">quality</a> may
1818be ignored by the encoder.
1819
1820### Parameters
1821
1822<table>  <tr>    <td><a name="SkImage_encodeToData_encodedImageFormat"> <code><strong>encodedImageFormat </strong></code> </a></td> <td>
1823one of: <a href="#SkEncodedImageFormat_kJPEG">SkEncodedImageFormat::kJPEG</a>, <a href="#SkEncodedImageFormat_kPNG">SkEncodedImageFormat::kPNG</a>,
1824<a href="#SkEncodedImageFormat_kWEBP">SkEncodedImageFormat::kWEBP</a></td>
1825  </tr>  <tr>    <td><a name="SkImage_encodeToData_quality"> <code><strong>quality </strong></code> </a></td> <td>
1826encoder specific metric with 100 equaling best</td>
1827  </tr>
1828</table>
1829
1830### Return Value
1831
1832encoded <a href="#Image">Image</a>, or nullptr
1833
1834### Example
1835
1836<div><fiddle-embed name="7a3bf8851bb7160e4e49c48f8c09639d"></fiddle-embed></div>
1837
1838### See Also
1839
1840<a href="#SkImage_refEncodedData">refEncodedData</a> <a href="#SkImage_MakeFromEncoded">MakeFromEncoded</a>
1841
1842---
1843
1844<a name="SkImage_encodeToData_2"></a>
1845
1846<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1847sk_sp&lt;SkData&gt; encodeToData() const
1848</pre>
1849
1850Encodes <a href="#Image">Image</a> pixels, returning result as <a href="undocumented#SkData">SkData</a>. Returns existing encoded data
1851if present; otherwise, <a href="#Image">Image</a> is encoded with <a href="#SkEncodedImageFormat_kPNG">SkEncodedImageFormat::kPNG</a>. Skia
1852must be built with SK_HAS_PNG_LIBRARY to encode <a href="#Image">Image</a>.
1853
1854Returns nullptr if existing encoded data is missing or invalid, and
1855encoding fails.
1856
1857### Return Value
1858
1859encoded <a href="#Image">Image</a>, or nullptr
1860
1861### Example
1862
1863<div><fiddle-embed name="30cee813f6aa476b0a9c8a24283e53a3"></fiddle-embed></div>
1864
1865### See Also
1866
1867<a href="#SkImage_refEncodedData">refEncodedData</a> <a href="#SkImage_MakeFromEncoded">MakeFromEncoded</a>
1868
1869---
1870
1871<a name="SkImage_refEncodedData"></a>
1872## refEncodedData
1873
1874<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1875sk_sp&lt;SkData&gt; refEncodedData() const
1876</pre>
1877
1878Returns encoded <a href="#Image">Image</a> pixels as <a href="undocumented#SkData">SkData</a>, if <a href="#Image">Image</a> was created from supported
1879encoded stream format. Platform support for formats vary and may require building
1880with one or more of: SK_HAS_JPEG_LIBRARY, SK_HAS_PNG_LIBRARY, SK_HAS_WEBP_LIBRARY.
1881
1882Returns nullptr if <a href="#Image">Image</a> contents are not encoded.
1883
1884### Return Value
1885
1886encoded <a href="#Image">Image</a>, or nullptr
1887
1888### Example
1889
1890<div><fiddle-embed name="91866923b37edd673c18232fdf3eabd8" gpu="true"></fiddle-embed></div>
1891
1892### See Also
1893
1894<a href="#SkImage_encodeToData">encodeToData</a><sup><a href="#SkImage_encodeToData_2">[2]</a></sup> <a href="#SkImage_MakeFromEncoded">MakeFromEncoded</a>
1895
1896---
1897
1898<a name="SkImage_toString"></a>
1899## toString
1900
1901<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1902const char* toString(SkString* string) const
1903</pre>
1904
1905Appends <a href="#Image">Image</a> description to <a href="#SkImage_toString_string">string</a>, including unique ID, width, height, and
1906whether the image is opaque.
1907
1908### Parameters
1909
1910<table>  <tr>    <td><a name="SkImage_toString_string"> <code><strong>string </strong></code> </a></td> <td>
1911storage for description; existing content is preserved</td>
1912  </tr>
1913</table>
1914
1915### Return Value
1916
1917<a href="#SkImage_toString_string">string</a> appended with <a href="#Image">Image</a> description
1918
1919### Example
1920
1921<div><fiddle-embed name="e5eae6d362434154730e3bacff165ebd"></fiddle-embed></div>
1922
1923### See Also
1924
1925<a href="#SkPaint_toString">SkPaint::toString</a>
1926
1927---
1928
1929<a name="SkImage_makeSubset"></a>
1930## makeSubset
1931
1932<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1933sk_sp&lt;SkImage&gt; makeSubset(const SkIRect& subset) const
1934</pre>
1935
1936Returns <a href="#SkImage_makeSubset_subset">subset</a> of <a href="#Image">Image</a>. <a href="#SkImage_makeSubset_subset">subset</a> must be fully contained by <a href="#Image">Image</a> <a href="#SkImage_dimensions">dimensions</a>.
1937The implementation may share pixels, or may copy them.
1938
1939Returns nullptr if <a href="#SkImage_makeSubset_subset">subset</a> is empty, or <a href="#SkImage_makeSubset_subset">subset</a> is not contained by bounds, or
1940pixels in <a href="#Image">Image</a> could not be read or copied.
1941
1942### Parameters
1943
1944<table>  <tr>    <td><a name="SkImage_makeSubset_subset"> <code><strong>subset </strong></code> </a></td> <td>
1945bounds of returned <a href="#Image">Image</a></td>
1946  </tr>
1947</table>
1948
1949### Return Value
1950
1951partial or full <a href="#Image">Image</a>, or nullptr
1952
1953### Example
1954
1955<div><fiddle-embed name="93669037c9eb9d142e7776b9f936fa96"></fiddle-embed></div>
1956
1957### See Also
1958
1959<a href="#SkImage_MakeFromEncoded">MakeFromEncoded</a>
1960
1961---
1962
1963<a name="SkImage_makeTextureImage"></a>
1964## makeTextureImage
1965
1966<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
1967sk_sp&lt;SkImage&gt; makeTextureImage(GrContext* context, SkColorSpace* dstColorSpace) const
1968</pre>
1969
1970Returns <a href="#Image">Image</a> backed by <a href="undocumented#GPU_Texture">GPU Texture</a> associated with <a href="#SkImage_makeTextureImage_context">context</a>. Returned <a href="#Image">Image</a> is
1971compatible with <a href="SkSurface_Reference#Surface">Surface</a> created with <a href="#SkImage_makeTextureImage_dstColorSpace">dstColorSpace</a>. Returns original
1972<a href="#Image">Image</a> if <a href="#SkImage_makeTextureImage_context">context</a> and <a href="#SkImage_makeTextureImage_dstColorSpace">dstColorSpace</a> match.
1973
1974Returns nullptr if <a href="#SkImage_makeTextureImage_context">context</a> is nullptr, or if <a href="#Image">Image</a> was created with another
1975<a href="undocumented#GrContext">GrContext</a>.
1976
1977### Parameters
1978
1979<table>  <tr>    <td><a name="SkImage_makeTextureImage_context"> <code><strong>context </strong></code> </a></td> <td>
1980<a href="undocumented#GPU_Context">GPU Context</a></td>
1981  </tr>  <tr>    <td><a name="SkImage_makeTextureImage_dstColorSpace"> <code><strong>dstColorSpace </strong></code> </a></td> <td>
1982range of colors of matching <a href="SkSurface_Reference#Surface">Surface</a> on GPU</td>
1983  </tr>
1984</table>
1985
1986### Return Value
1987
1988created <a href="#Image">Image</a>, or nullptr
1989
1990### Example
1991
1992<div><fiddle-embed name="7d060e137662b233960200b7b2597ba6" gpu="true"></fiddle-embed></div>
1993
1994### See Also
1995
1996<a href="#SkImage_MakeFromTexture">MakeFromTexture</a><sup><a href="#SkImage_MakeFromTexture_2">[2]</a></sup><sup><a href="#SkImage_MakeFromTexture_3">[3]</a></sup><sup><a href="#SkImage_MakeFromTexture_4">[4]</a></sup>
1997
1998---
1999
2000<a name="SkImage_makeNonTextureImage"></a>
2001## makeNonTextureImage
2002
2003<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2004sk_sp&lt;SkImage&gt; makeNonTextureImage() const
2005</pre>
2006
2007Returns <a href="SkImage_Reference#Raster_Image">Raster Image</a> or <a href="#Lazy_Image">Lazy Image</a>. Copies <a href="#Image">Image</a> backed by <a href="undocumented#GPU_Texture">GPU Texture</a> into
2008CPU memory if needed. Returns original <a href="#Image">Image</a> if unencoded in <a href="undocumented#Raster_Bitmap">Raster Bitmap</a>,
2009or if encoded in a stream.
2010
2011Returns nullptr if backed by <a href="undocumented#GPU_Texture">GPU Texture</a> and copy fails.
2012
2013### Return Value
2014
2015<a href="SkImage_Reference#Raster_Image">Raster Image</a>, <a href="#Lazy_Image">Lazy Image</a>, or nullptr
2016
2017### Example
2018
2019<div><fiddle-embed name="220d369551a553f8ba4cd1c21b97a793" gpu="true"></fiddle-embed></div>
2020
2021### See Also
2022
2023incomplete
2024
2025---
2026
2027<a name="SkImage_makeRasterImage"></a>
2028## makeRasterImage
2029
2030<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2031sk_sp&lt;SkImage&gt; makeRasterImage() const
2032</pre>
2033
2034Returns <a href="SkImage_Reference#Raster_Image">Raster Image</a>. Copies <a href="#Image">Image</a> backed by <a href="undocumented#GPU_Texture">GPU Texture</a> into CPU memory,
2035or decodes <a href="#Image">Image</a> from <a href="#Lazy_Image">Lazy Image</a>. Returns original <a href="#Image">Image</a> if unencoded in
2036<a href="undocumented#Raster_Bitmap">Raster Bitmap</a>.
2037
2038Returns nullptr if copy, decode, or pixel read fails.
2039
2040### Return Value
2041
2042<a href="SkImage_Reference#Raster_Image">Raster Image</a>, or nullptr
2043
2044### Example
2045
2046<div><fiddle-embed name="d821b8e345df9ff0c8cbb6d91c588c02" gpu="true"></fiddle-embed></div>
2047
2048### See Also
2049
2050<a href="#SkImage_isTextureBacked">isTextureBacked</a> <a href="#SkImage_isLazyGenerated">isLazyGenerated</a> <a href="#SkImage_MakeFromRaster">MakeFromRaster</a>
2051
2052---
2053
2054<a name="SkImage_makeWithFilter"></a>
2055## makeWithFilter
2056
2057<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2058sk_sp&lt;SkImage&gt; makeWithFilter(const SkImageFilter* filter, const SkIRect& subset,
2059                              const SkIRect& clipBounds, SkIRect* outSubset, SkIPoint* offset) const
2060</pre>
2061
2062Creates filtered <a href="#Image">Image</a>. <a href="#SkImage_makeWithFilter_filter">filter</a> processes original <a href="#Image">Image</a>, potentially changing
2063color, position, and size. <a href="#SkImage_makeWithFilter_subset">subset</a> is the bounds of original <a href="#Image">Image</a> processed
2064by <a href="#SkImage_makeWithFilter_filter">filter</a>. <a href="#SkImage_makeWithFilter_clipBounds">clipBounds</a> is the expected bounds of the filtered <a href="#Image">Image</a>. <a href="#SkImage_makeWithFilter_outSubset">outSubset</a>
2065is required storage for the actual bounds of the filtered <a href="#Image">Image</a>. <a href="#SkImage_makeWithFilter_offset">offset</a> is
2066required storage for translation of returned <a href="#Image">Image</a>.
2067
2068Returns nullptr if <a href="#Image">Image</a> could not be created. If nullptr is returned, <a href="#SkImage_makeWithFilter_outSubset">outSubset</a>
2069and <a href="#SkImage_makeWithFilter_offset">offset</a> are undefined.
2070
2071<a href="#SkImage_makeWithFilter">makeWithFilter</a> is optimized to support <a href="#Image">Image</a> backed by <a href="undocumented#GPU_Texture">GPU Texture</a> drawn in an
2072animation with <a href="undocumented#SkImageFilter">SkImageFilter</a> that vary in size from one frame to the next. The
2073created <a href="#Image">Image</a> is drawn at an increased size so that <a href="undocumented#GPU_Texture">GPU Texture</a> can be reused
2074with different sized effects. <a href="#SkImage_makeWithFilter_outSubset">outSubset</a> describes the valid bounds of <a href="undocumented#GPU_Texture">GPU Texture</a>
2075returned. The returned <a href="#Image">Image</a> may be much larger than required for the <a href="#SkImage_makeWithFilter_filter">filter</a>.
2076<a href="#SkImage_makeWithFilter_offset">offset</a> translates the returned <a href="#Image">Image</a> to keep subsequent animation frames
2077aligned with respect to each other.
2078
2079### Parameters
2080
2081<table>  <tr>    <td><a name="SkImage_makeWithFilter_filter"> <code><strong>filter </strong></code> </a></td> <td>
2082how <a href="#Image">Image</a> is sampled when transformed</td>
2083  </tr>  <tr>    <td><a name="SkImage_makeWithFilter_subset"> <code><strong>subset </strong></code> </a></td> <td>
2084incomplete</td>
2085  </tr>  <tr>    <td><a name="SkImage_makeWithFilter_clipBounds"> <code><strong>clipBounds </strong></code> </a></td> <td>
2086incomplete</td>
2087  </tr>  <tr>    <td><a name="SkImage_makeWithFilter_outSubset"> <code><strong>outSubset </strong></code> </a></td> <td>
2088incomplete</td>
2089  </tr>  <tr>    <td><a name="SkImage_makeWithFilter_offset"> <code><strong>offset </strong></code> </a></td> <td>
2090incomplete</td>
2091  </tr>
2092</table>
2093
2094### Return Value
2095
2096filtered <a href="#Image">Image</a>, or nullptr
2097
2098### Example
2099
2100<div><fiddle-embed name="eabb12543886ace5e1212af220a19c6d" gpu="true"><div>In each frame of the animation, filtered <a href="#Image">Image</a> is drawn in a different location.
2101By translating canvas by returned <a href="#SkImage_makeWithFilter_offset">offset</a>, <a href="#Image">Image</a> appears stationary.</div></fiddle-embed></div>
2102
2103### See Also
2104
2105<a href="#SkPaint_setImageFilter">SkPaint::setImageFilter</a>
2106
2107---
2108
2109# <a name="SkImage_DeferredTextureImageUsageParams"></a> Struct SkImage::DeferredTextureImageUsageParams
2110Used only by Chrome; to be deprecated.
2111
2112<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2113struct <a href="#SkImage_DeferredTextureImageUsageParams_DeferredTextureImageUsageParams">DeferredTextureImageUsageParams</a> {
2114<a href="#SkImage_DeferredTextureImageUsageParams_DeferredTextureImageUsageParams">DeferredTextureImageUsageParams(const SkMatrix matrix, const SkFilterQuality quality,
2115int preScaleMipLevel)</a>;
2116<a href="SkMatrix_Reference#SkMatrix">SkMatrix</a>        <a href="#SkImage_DeferredTextureImageUsageParams_fMatrix">fMatrix</a>;
2117<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="#SkImage_DeferredTextureImageUsageParams_fQuality">fQuality</a>;
2118int             <a href="#SkImage_DeferredTextureImageUsageParams_fPreScaleMipLevel">fPreScaleMipLevel</a>;
2119};</pre>
2120
2121<a name="SkImage_DeferredTextureImageUsageParams_fMatrix"> <code><strong>SkMatrix fMatrix</strong></code> </a>
2122
2123<a name="SkImage_DeferredTextureImageUsageParams_fQuality"> <code><strong>SkFilterQuality fQuality</strong></code> </a>
2124
2125<a name="SkImage_DeferredTextureImageUsageParams_fPreScaleMipLevel"> <code><strong>int fPreScaleMipLevel</strong></code> </a>
2126
2127<a name="SkImage_DeferredTextureImageUsageParams_DeferredTextureImageUsageParams"></a>
2128## DeferredTextureImageUsageParams
2129
2130<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2131DeferredTextureImageUsageParams(const SkMatrix matrix, const SkFilterQuality quality,
2132                                int preScaleMipLevel)
2133</pre>
2134
2135### Parameters
2136
2137<table>  <tr>    <td><a name="SkImage_DeferredTextureImageUsageParams_DeferredTextureImageUsageParams_matrix"> <code><strong>matrix </strong></code> </a></td> <td>
2138incomplete</td>
2139  </tr>  <tr>    <td><a name="SkImage_DeferredTextureImageUsageParams_DeferredTextureImageUsageParams_quality"> <code><strong>quality </strong></code> </a></td> <td>
2140incomplete</td>
2141  </tr>  <tr>    <td><a name="SkImage_DeferredTextureImageUsageParams_DeferredTextureImageUsageParams_preScaleMipLevel"> <code><strong>preScaleMipLevel </strong></code> </a></td> <td>
2142incomplete</td>
2143  </tr>
2144</table>
2145
2146### Return Value
2147
2148incomplete
2149
2150### Example
2151
2152<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
2153
2154### See Also
2155
2156incomplete
2157
2158---
2159
2160### Example
2161
2162<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
2163
2164### See Also
2165
2166incomplete
2167
2168<a name="SkImage_getDeferredTextureImageData"></a>
2169## getDeferredTextureImageData
2170
2171<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2172size_t getDeferredTextureImageData(const GrContextThreadSafeProxy& contextThreadSafeProxy,
2173                 const DeferredTextureImageUsageParams deferredTextureImageUsageParams[],
2174                 int paramCnt, void* buffer, SkColorSpace* dstColorSpace = nullptr,
2175                 SkColorType dstColorType = kN32_SkColorType) const
2176</pre>
2177
2178Used only by Chrome; to be deprecated.
2179
2180This method allows clients to capture the data necessary to turn a <a href="#SkImage">SkImage</a> into a texture-
2181backed image. If the original image is codec-backed this will decode into a format optimized
2182for the context represented by the proxy. This method is thread safe with respect to the
2183<a href="undocumented#GrContext">GrContext</a> whence the proxy came. Clients allocate and manage the storage of the deferred
2184texture data and control its lifetime. No cleanup is required, thus it is safe to simply free
2185the memory out from under the data.
2186
2187The same method is used both for getting the size necessary for pre-uploaded texture data
2188and for retrieving the data. The params array represents the set of draws over which to
2189optimize the pre-upload data.
2190
2191When called with a null <a href="#SkImage_getDeferredTextureImageData_buffer">buffer</a> this returns the size that the client must allocate in order
2192to create deferred texture data for this image (or zero if this is an inappropriate
2193candidate). The <a href="#SkImage_getDeferredTextureImageData_buffer">buffer</a> allocated by the client should be 8 byte aligned.
2194
2195When <a href="#SkImage_getDeferredTextureImageData_buffer">buffer</a> is not null this fills in the deferred texture data for this image in the
2196provided <a href="#SkImage_getDeferredTextureImageData_buffer">buffer</a> (assuming this is an appropriate candidate image and the <a href="#SkImage_getDeferredTextureImageData_buffer">buffer</a> is
2197appropriately aligned). Upon success the size written is returned, otherwise 0.
2198
2199<a href="#SkImage_getDeferredTextureImageData_dstColorSpace">dstColorSpace</a> is the <a href="undocumented#Color_Space">Color Space</a> of the surface where this texture will ultimately be used.
2200If the method determines that mip-maps are needed, this helps determine the correct strategy
2201for building them (gamma-correct or not).
2202
2203<a href="#SkImage_getDeferredTextureImageData_dstColorType">dstColorType</a> is the color type of the surface where this texture will ultimately be used.
2204This determines the format with which the image will be uploaded to the GPU. If <a href="#SkImage_getDeferredTextureImageData_dstColorType">dstColorType</a>
2205does not support <a href="undocumented#Color_Space">Color Space</a> (low bit depth types such as <a href="SkImageInfo_Reference#SkColorType">kARGB 4444 SkColorType</a>),
2206then <a href="#SkImage_getDeferredTextureImageData_dstColorSpace">dstColorSpace</a> must be null.
2207
2208### Parameters
2209
2210<table>  <tr>    <td><a name="SkImage_getDeferredTextureImageData_contextThreadSafeProxy"> <code><strong>contextThreadSafeProxy </strong></code> </a></td> <td>
2211thread safe GPU context</td>
2212  </tr>  <tr>    <td><a name="SkImage_getDeferredTextureImageData_deferredTextureImageUsageParams"> <code><strong>deferredTextureImageUsageParams </strong></code> </a></td> <td>
2213array of <a href="#Image">Image</a> transformations</td>
2214  </tr>  <tr>    <td><a name="SkImage_getDeferredTextureImageData_paramCnt"> <code><strong>paramCnt </strong></code> </a></td> <td>
2215entries in <a href="#SkImage_getDeferredTextureImageData_deferredTextureImageUsageParams">deferredTextureImageUsageParams</a> array</td>
2216  </tr>  <tr>    <td><a name="SkImage_getDeferredTextureImageData_buffer"> <code><strong>buffer </strong></code> </a></td> <td>
2217storage for <a href="undocumented#GPU_Texture">GPU Texture</a> data, or nullptr</td>
2218  </tr>  <tr>    <td><a name="SkImage_getDeferredTextureImageData_dstColorSpace"> <code><strong>dstColorSpace </strong></code> </a></td> <td>
2219<a href="SkSurface_Reference#Surface">Surface</a> <a href="undocumented#Color_Space">Color Space</a>, or nullptr</td>
2220  </tr>  <tr>    <td><a name="SkImage_getDeferredTextureImageData_dstColorType"> <code><strong>dstColorType </strong></code> </a></td> <td>
2221<a href="SkSurface_Reference#Surface">Surface</a> <a href="SkImageInfo_Reference#Color_Type">Color Type</a></td>
2222  </tr>
2223</table>
2224
2225### Return Value
2226
2227size of storage for <a href="undocumented#GPU_Texture">GPU Texture</a> data
2228
2229### Example
2230
2231<div><fiddle-embed name="31d224ac4d22ba60221c565f9a12ad50" gpu="true"></fiddle-embed></div>
2232
2233### See Also
2234
2235<a href="#SkImage_MakeFromDeferredTextureImageData">MakeFromDeferredTextureImageData</a>
2236
2237---
2238
2239<a name="SkImage_MakeFromDeferredTextureImageData"></a>
2240## MakeFromDeferredTextureImageData
2241
2242<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2243static sk_sp&lt;SkImage&gt; MakeFromDeferredTextureImageData(GrContext* context, const void* data,
2244                                                SkBudgeted budgeted)
2245</pre>
2246
2247Used only by Chrome; to be deprecated.
2248
2249Returns a texture-backed image from <a href="#SkImage_MakeFromDeferredTextureImageData_data">data</a> produced in <a href="#SkImage_getDeferredTextureImageData">SkImage::getDeferredTextureImageData</a>.
2250The <a href="#SkImage_MakeFromDeferredTextureImageData_context">context</a> must be the <a href="#SkImage_MakeFromDeferredTextureImageData_context">context</a> that provided the proxy passed to
2251<a href="#SkImage_getDeferredTextureImageData">getDeferredTextureImageData</a>.
2252
2253### Parameters
2254
2255<table>  <tr>    <td><a name="SkImage_MakeFromDeferredTextureImageData_context"> <code><strong>context </strong></code> </a></td> <td>
2256<a href="undocumented#GPU_Context">GPU Context</a></td>
2257  </tr>  <tr>    <td><a name="SkImage_MakeFromDeferredTextureImageData_data"> <code><strong>data </strong></code> </a></td> <td>
2258incomplete</td>
2259  </tr>  <tr>    <td><a name="SkImage_MakeFromDeferredTextureImageData_budgeted"> <code><strong>budgeted </strong></code> </a></td> <td>
2260incomplete</td>
2261  </tr>
2262</table>
2263
2264### Return Value
2265
2266incomplete
2267
2268### Example
2269
2270<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
2271
2272### See Also
2273
2274incomplete
2275
2276---
2277
2278<a href="#SkImage_BackendTextureReleaseProc">BackendTextureReleaseProc</a>
2279
2280<a name="SkImage_MakeBackendTextureFromSkImage"></a>
2281## MakeBackendTextureFromSkImage
2282
2283<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2284static bool MakeBackendTextureFromSkImage(GrContext* context, sk_sp&lt;SkImage&gt; image,
2285                                          GrBackendTexture* backendTexture,
2286                                          BackendTextureReleaseProc* backendTextureReleaseProc)
2287</pre>
2288
2289Creates a <a href="undocumented#GrBackendTexture">GrBackendTexture</a> from the provided <a href="#SkImage">SkImage</a>. Returns true on success. The
2290<a href="undocumented#GrBackendTexture">GrBackendTexture</a> and <a href="#SkImage_BackendTextureReleaseProc">BackendTextureReleaseProc</a> are populated on success. It is the callers
2291responsibility to call the <a href="#SkImage_BackendTextureReleaseProc">BackendTextureReleaseProc</a> once they have deleted the texture.
2292Note that the <a href="#SkImage_BackendTextureReleaseProc">BackendTextureReleaseProc</a> allows Skia to clean up auxiliary data related
2293to the <a href="undocumented#GrBackendTexture">GrBackendTexture</a>, and is not a substitute for the client deleting the <a href="undocumented#GrBackendTexture">GrBackendTexture</a>
2294themselves.
2295
2296If <a href="#SkImage_MakeBackendTextureFromSkImage_image">image</a> is both texture backed and singly referenced; that is, its only
2297reference was transferred using std::move(): <a href="#SkImage_MakeBackendTextureFromSkImage_image">image</a> is returned in <a href="#SkImage_MakeBackendTextureFromSkImage_backendTexture">backendTexture</a>
2298without conversion or making a copy.
2299
2300If the <a href="#SkImage">SkImage</a> is not texture backed, this function will generate a texture with the <a href="#SkImage_MakeBackendTextureFromSkImage_image">image</a>'s
2301contents and return that.
2302
2303### Parameters
2304
2305<table>  <tr>    <td><a name="SkImage_MakeBackendTextureFromSkImage_context"> <code><strong>context </strong></code> </a></td> <td>
2306<a href="undocumented#GPU_Context">GPU Context</a></td>
2307  </tr>  <tr>    <td><a name="SkImage_MakeBackendTextureFromSkImage_image"> <code><strong>image </strong></code> </a></td> <td>
2308incomplete</td>
2309  </tr>  <tr>    <td><a name="SkImage_MakeBackendTextureFromSkImage_backendTexture"> <code><strong>backendTexture </strong></code> </a></td> <td>
2310incomplete</td>
2311  </tr>  <tr>    <td><a name="SkImage_MakeBackendTextureFromSkImage_backendTextureReleaseProc"> <code><strong>backendTextureReleaseProc </strong></code> </a></td> <td>
2312incomplete</td>
2313  </tr>
2314</table>
2315
2316### Return Value
2317
2318incomplete
2319
2320### Example
2321
2322<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
2323
2324### See Also
2325
2326incomplete
2327
2328---
2329
2330## <a name="SkImage_LegacyBitmapMode"></a> Enum SkImage::LegacyBitmapMode
2331
2332<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2333enum <a href="#SkImage_LegacyBitmapMode">LegacyBitmapMode</a> {
2334<a href="#SkImage_kRO_LegacyBitmapMode">kRO LegacyBitmapMode</a>,
2335<a href="#SkImage_kRW_LegacyBitmapMode">kRW LegacyBitmapMode</a>,
2336};</pre>
2337
2338Helper functions to convert to <a href="SkBitmap_Reference#SkBitmap">SkBitmap</a>
2339
2340### Constants
2341
2342<table>
2343  <tr>
2344    <td><a name="SkImage_kRO_LegacyBitmapMode"> <code><strong>SkImage::kRO_LegacyBitmapMode </strong></code> </a></td><td>0</td><td></td>
2345  </tr>
2346  <tr>
2347    <td><a name="SkImage_kRW_LegacyBitmapMode"> <code><strong>SkImage::kRW_LegacyBitmapMode </strong></code> </a></td><td>1</td><td></td>
2348  </tr>
2349</table>
2350
2351### Example
2352
2353<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
2354
2355### See Also
2356
2357incomplete
2358
2359
2360
2361<a name="SkImage_asLegacyBitmap"></a>
2362## asLegacyBitmap
2363
2364<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2365bool asLegacyBitmap(SkBitmap* bitmap, LegacyBitmapMode legacyBitmapMode) const
2366</pre>
2367
2368Creates raster <a href="SkBitmap_Reference#Bitmap">Bitmap</a> with same pixels as <a href="#Image">Image</a>. If <a href="#SkImage_asLegacyBitmap_legacyBitmapMode">legacyBitmapMode</a> is
2369<a href="#SkImage_kRO_LegacyBitmapMode">kRO LegacyBitmapMode</a>, returned <a href="#SkImage_asLegacyBitmap_bitmap">bitmap</a> is read-only and immutable.
2370Returns true if <a href="SkBitmap_Reference#Bitmap">Bitmap</a> is stored in <a href="#SkImage_asLegacyBitmap_bitmap">bitmap</a>. Returns false and resets <a href="#SkImage_asLegacyBitmap_bitmap">bitmap</a> if
2371<a href="SkBitmap_Reference#Bitmap">Bitmap</a> write did not succeed.
2372
2373### Parameters
2374
2375<table>  <tr>    <td><a name="SkImage_asLegacyBitmap_bitmap"> <code><strong>bitmap </strong></code> </a></td> <td>
2376storage for legacy <a href="SkBitmap_Reference#Bitmap">Bitmap</a></td>
2377  </tr>  <tr>    <td><a name="SkImage_asLegacyBitmap_legacyBitmapMode"> <code><strong>legacyBitmapMode </strong></code> </a></td> <td>
2378one of: <a href="#SkImage_kRO_LegacyBitmapMode">kRO LegacyBitmapMode</a>, <a href="#SkImage_kRW_LegacyBitmapMode">kRW LegacyBitmapMode</a></td>
2379  </tr>
2380</table>
2381
2382### Return Value
2383
2384true if <a href="SkBitmap_Reference#Bitmap">Bitmap</a> was created
2385
2386### Example
2387
2388<div><fiddle-embed name="882e8e0103048009a25cfc20400492f7"></fiddle-embed></div>
2389
2390### See Also
2391
2392incomplete
2393
2394---
2395
2396<a name="SkImage_isLazyGenerated"></a>
2397## isLazyGenerated
2398
2399<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2400bool isLazyGenerated() const
2401</pre>
2402
2403Returns true if <a href="#Image">Image</a> is backed by an image-generator or other service that creates
2404and caches its pixels or texture on-demand.
2405
2406### Return Value
2407
2408true if <a href="#Image">Image</a> is created as needed
2409
2410### Example
2411
2412<div><fiddle-embed name="a8b8bd4bfe968e2c63085f867665227f"></fiddle-embed></div>
2413
2414### Example
2415
2416<div><fiddle-embed name="070dd0405890b84c07827d93fa01c331" gpu="true"></fiddle-embed></div>
2417
2418### See Also
2419
2420<a href="#SkImage_isTextureBacked">isTextureBacked</a> MakeNonTextureImage
2421
2422---
2423
2424<a name="SkImage_makeColorSpace"></a>
2425## makeColorSpace
2426
2427<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2428sk_sp&lt;SkImage&gt; makeColorSpace(sk_sp&lt;SkColorSpace&gt; target, SkTransferFunctionBehavior premulBehavior) const
2429</pre>
2430
2431Creates <a href="#Image">Image</a> in <a href="#SkImage_makeColorSpace_target">target</a> <a href="undocumented#Color_Space">Color Space</a>.
2432Returns nullptr if <a href="#Image">Image</a> could not be created.
2433
2434Returns original <a href="#Image">Image</a> if it is in <a href="#SkImage_makeColorSpace_target">target</a> <a href="undocumented#Color_Space">Color Space</a>.
2435Otherwise, converts pixels from <a href="#Image">Image</a> <a href="undocumented#Color_Space">Color Space</a> to <a href="#SkImage_makeColorSpace_target">target</a> <a href="undocumented#Color_Space">Color Space</a>.
2436If <a href="#Image">Image</a> <a href="#SkImage_colorSpace">colorSpace</a> returns nullptr, <a href="#Image">Image</a> <a href="undocumented#Color_Space">Color Space</a> is assumed to be sRGB.
2437
2438<a href="undocumented#SkTransferFunctionBehavior">SkTransferFunctionBehavior</a> is to be deprecated.
2439
2440Set <a href="#SkImage_makeColorSpace_premulBehavior">premulBehavior</a> to <a href="#SkTransferFunctionBehavior_kRespect">SkTransferFunctionBehavior::kRespect</a> to convert <a href="#Image">Image</a>
2441pixels to a linear space, before converting to destination <a href="SkImageInfo_Reference#Color_Type">Color Type</a>
2442and <a href="undocumented#Color_Space">Color Space</a>.
2443
2444Set <a href="#SkImage_makeColorSpace_premulBehavior">premulBehavior</a> to <a href="#SkTransferFunctionBehavior_kIgnore">SkTransferFunctionBehavior::kIgnore</a> to treat <a href="#Image">Image</a>
2445pixels as linear, when converting to destination <a href="SkImageInfo_Reference#Color_Type">Color Type</a>
2446and <a href="undocumented#Color_Space">Color Space</a>, ignoring pixel encoding.
2447
2448### Parameters
2449
2450<table>  <tr>    <td><a name="SkImage_makeColorSpace_target"> <code><strong>target </strong></code> </a></td> <td>
2451<a href="undocumented#Color_Space">Color Space</a> describing color range of returned <a href="#Image">Image</a></td>
2452  </tr>  <tr>    <td><a name="SkImage_makeColorSpace_premulBehavior"> <code><strong>premulBehavior </strong></code> </a></td> <td>
2453one of: <a href="#SkTransferFunctionBehavior_kRespect">SkTransferFunctionBehavior::kRespect</a>,
2454<a href="#SkTransferFunctionBehavior_kIgnore">SkTransferFunctionBehavior::kIgnore</a></td>
2455  </tr>
2456</table>
2457
2458### Return Value
2459
2460created <a href="#Image">Image</a> in <a href="#SkImage_makeColorSpace_target">target</a> <a href="undocumented#Color_Space">Color Space</a>
2461
2462### Example
2463
2464<div><fiddle-embed name="ab8bcb9acecbee444019a724d2b0503c"></fiddle-embed></div>
2465
2466### See Also
2467
2468MakeFromPixture <a href="#SkImage_MakeFromTexture">MakeFromTexture</a><sup><a href="#SkImage_MakeFromTexture_2">[2]</a></sup><sup><a href="#SkImage_MakeFromTexture_3">[3]</a></sup><sup><a href="#SkImage_MakeFromTexture_4">[4]</a></sup>
2469
2470---
2471
2472