diff options
author | reed <reed@google.com> | 2014-12-09 14:39:44 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-12-09 14:39:44 -0800 |
commit | 7543aa2b365abfc968bd84ee32247ac51f904608 (patch) | |
tree | 0abead02f9642650200c32fb136f74ce12df962e /include/core/SkSurface.h | |
parent | 9a0c7abfd7ce8694136840fa224e99579b8329f6 (diff) |
add readPixels to SkSurface (later try to remove it from SkCanvas)
BUG=skia:
TBR=bsalomon, robertphilips
Review URL: https://codereview.chromium.org/789993002
Diffstat (limited to 'include/core/SkSurface.h')
-rw-r--r-- | include/core/SkSurface.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/include/core/SkSurface.h b/include/core/SkSurface.h index 0e238f8429..62d2252af1 100644 --- a/include/core/SkSurface.h +++ b/include/core/SkSurface.h @@ -212,6 +212,35 @@ public: */ const void* peekPixels(SkImageInfo* info, size_t* rowBytes); + /** + * Copy the pixels from the surface into the specified buffer (pixels + rowBytes), + * converting them into the requested format (dstInfo). The base-layer pixels are read + * starting at the specified (srcX,srcY) location in the coordinate system of the base-layer. + * + * The specified ImageInfo and (srcX,srcY) offset specifies a source rectangle + * + * srcR.setXYWH(srcX, srcY, dstInfo.width(), dstInfo.height()); + * + * srcR is intersected with the bounds of the base-layer. If this intersection is not empty, + * then we have two sets of pixels (of equal size). Replace the dst pixels with the + * corresponding src pixels, performing any colortype/alphatype transformations needed + * (in the case where the src and dst have different colortypes or alphatypes). + * + * This call can fail, returning false, for several reasons: + * - If srcR does not intersect the surface bounds. + * - If the requested colortype/alphatype cannot be converted from the base-layer's types. + */ + bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, + int srcX, int srcY); + + /** + * Helper for allocating pixels and then calling readPixels(info, ...). The bitmap is resized + * to the intersection of srcRect and the surface bounds (if srcRect is non-null). + * On success, pixels will be allocated in bitmap and true returned. On failure, + * false is returned and bitmap will be set to empty. + */ + bool readPixels(SkBitmap* dst, const SkIRect* srcRect = NULL); + const SkSurfaceProps& props() const { return fProps; } protected: |