Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Side by Side Diff: include/core/SkSurface.h

Issue 789993002: add readPixels to SkSurface (later try to remove it from SkCanvas) (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/image/SkSurface.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef SkSurface_DEFINED 8 #ifndef SkSurface_DEFINED
9 #define SkSurface_DEFINED 9 #define SkSurface_DEFINED
10 10
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 * RAM) return the const-address of those pixels, and if not null, return 205 * RAM) return the const-address of those pixels, and if not null, return
206 * the ImageInfo and rowBytes. The returned address is only valid while 206 * the ImageInfo and rowBytes. The returned address is only valid while
207 * the surface object is in scope, and no API call is made on the surface 207 * the surface object is in scope, and no API call is made on the surface
208 * or its canvas. 208 * or its canvas.
209 * 209 *
210 * On failure, returns NULL and the info and rowBytes parameters are 210 * On failure, returns NULL and the info and rowBytes parameters are
211 * ignored. 211 * ignored.
212 */ 212 */
213 const void* peekPixels(SkImageInfo* info, size_t* rowBytes); 213 const void* peekPixels(SkImageInfo* info, size_t* rowBytes);
214 214
215 /**
216 * Copy the pixels from the surface into the specified buffer (pixels + row Bytes),
217 * converting them into the requested format (dstInfo). The base-layer pixe ls are read
218 * starting at the specified (srcX,srcY) location in the coordinate system of the base-layer.
219 *
220 * The specified ImageInfo and (srcX,srcY) offset specifies a source rectan gle
221 *
222 * srcR.setXYWH(srcX, srcY, dstInfo.width(), dstInfo.height());
223 *
224 * srcR is intersected with the bounds of the base-layer. If this intersect ion is not empty,
225 * then we have two sets of pixels (of equal size). Replace the dst pixels with the
226 * corresponding src pixels, performing any colortype/alphatype transformat ions needed
227 * (in the case where the src and dst have different colortypes or alphatyp es).
228 *
229 * This call can fail, returning false, for several reasons:
230 * - If srcR does not intersect the surface bounds.
231 * - If the requested colortype/alphatype cannot be converted from the base -layer's types.
232 */
233 bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBy tes,
234 int srcX, int srcY);
235
236 /**
237 * Helper for allocating pixels and then calling readPixels(info, ...). The bitmap is resized
238 * to the intersection of srcRect and the surface bounds (if srcRect is non -null).
239 * On success, pixels will be allocated in bitmap and true returned. On fai lure,
240 * false is returned and bitmap will be set to empty.
241 */
242 bool readPixels(SkBitmap* dst, const SkIRect* srcRect = NULL);
243
215 const SkSurfaceProps& props() const { return fProps; } 244 const SkSurfaceProps& props() const { return fProps; }
216 245
217 protected: 246 protected:
218 SkSurface(int width, int height, const SkSurfaceProps*); 247 SkSurface(int width, int height, const SkSurfaceProps*);
219 SkSurface(const SkImageInfo&, const SkSurfaceProps*); 248 SkSurface(const SkImageInfo&, const SkSurfaceProps*);
220 249
221 // called by subclass if their contents have changed 250 // called by subclass if their contents have changed
222 void dirtyGenerationID() { 251 void dirtyGenerationID() {
223 fGenerationID = 0; 252 fGenerationID = 0;
224 } 253 }
225 254
226 private: 255 private:
227 const SkSurfaceProps fProps; 256 const SkSurfaceProps fProps;
228 const int fWidth; 257 const int fWidth;
229 const int fHeight; 258 const int fHeight;
230 uint32_t fGenerationID; 259 uint32_t fGenerationID;
231 260
232 typedef SkRefCnt INHERITED; 261 typedef SkRefCnt INHERITED;
233 }; 262 };
234 263
235 #endif 264 #endif
OLDNEW
« no previous file with comments | « no previous file | src/image/SkSurface.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698