From 7543aa2b365abfc968bd84ee32247ac51f904608 Mon Sep 17 00:00:00 2001 From: reed Date: Tue, 9 Dec 2014 14:39:44 -0800 Subject: add readPixels to SkSurface (later try to remove it from SkCanvas) BUG=skia: TBR=bsalomon, robertphilips Review URL: https://codereview.chromium.org/789993002 --- include/core/SkSurface.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'include/core/SkSurface.h') 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: -- cgit v1.2.3