123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706 |
- /*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- /* Generated by tools/bookmaker from include/core/SkPixmap.h and docs/SkPixmap_Reference.bmh
- on 2018-06-08 11:48:28. Additional documentation and examples can be found at:
- https://skia.org/user/api/SkPixmap_Reference
- You may edit either file directly. Structural changes to public interfaces require
- editing both files. After editing docs/SkPixmap_Reference.bmh, run:
- bookmaker -b docs -i include/core/SkPixmap.h -p
- to create an updated version of this file.
- */
- #ifndef SkPixmap_DEFINED
- #define SkPixmap_DEFINED
- #include "SkColor.h"
- #include "SkFilterQuality.h"
- #include "SkImageInfo.h"
- class SkData;
- struct SkMask;
- /** \class SkPixmap
- SkPixmap provides a utility to pair SkImageInfo with pixels and row bytes.
- SkPixmap is a low level class which provides convenience functions to access
- raster destinations. SkCanvas can not draw SkPixmap, nor does SkPixmap provide
- a direct drawing destination.
- Use SkBitmap to draw pixels referenced by SkPixmap; use SkSurface to draw into
- pixels referenced by SkPixmap.
- SkPixmap does not try to manage the lifetime of the pixel memory. Use SkPixelRef
- to manage pixel memory; SkPixelRef is safe across threads.
- */
- class SK_API SkPixmap {
- public:
- /** Creates an empty SkPixmap without pixels, with kUnknown_SkColorType, with
- kUnknown_SkAlphaType, and with a width and height of zero. Use
- reset() to associate pixels, SkColorType, SkAlphaType, width, and height
- after SkPixmap has been created.
- @return empty SkPixmap
- */
- SkPixmap()
- : fPixels(nullptr), fRowBytes(0), fInfo(SkImageInfo::MakeUnknown(0, 0))
- {}
- /** Creates SkPixmap from info width, height, SkAlphaType, and SkColorType.
- addr points to pixels, or nullptr. rowBytes should be info.width() times
- info.bytesPerPixel(), or larger.
- No parameter checking is performed; it is up to the caller to ensure that
- addr and rowBytes agree with info.
- The memory lifetime of pixels is managed by the caller. When SkPixmap goes
- out of scope, addr is unaffected.
- SkPixmap may be later modified by reset() to change its size, pixel type, or
- storage.
- @param info width, height, SkAlphaType, SkColorType of SkImageInfo
- @param addr pointer to pixels allocated by caller; may be nullptr
- @param rowBytes size of one row of addr; width times pixel size, or larger
- @return initialized SkPixmap
- */
- SkPixmap(const SkImageInfo& info, const void* addr, size_t rowBytes)
- : fPixels(addr), fRowBytes(rowBytes), fInfo(info)
- {}
- /** Sets width, height, row bytes to zero; pixel address to nullptr; SkColorType to
- kUnknown_SkColorType; and SkAlphaType to kUnknown_SkAlphaType.
- The prior pixels are unaffected; it is up to the caller to release pixels
- memory if desired.
- */
- void reset();
- /** Sets width, height, SkAlphaType, and SkColorType from info.
- Sets pixel address from addr, which may be nullptr.
- Sets row bytes from rowBytes, which should be info.width() times
- info.bytesPerPixel(), or larger.
- Does not check addr. Asserts if built with SK_DEBUG defined and if rowBytes is
- too small to hold one row of pixels.
- The memory lifetime pixels are managed by the caller. When SkPixmap goes
- out of scope, addr is unaffected.
- @param info width, height, SkAlphaType, SkColorType of SkImageInfo
- @param addr pointer to pixels allocated by caller; may be nullptr
- @param rowBytes size of one row of addr; width times pixel size, or larger
- */
- void reset(const SkImageInfo& info, const void* addr, size_t rowBytes);
- /** Changes SkColorSpace in SkImageInfo; preserves width, height, SkAlphaType, and
- SkColorType in SkImage, and leaves pixel address and row bytes unchanged.
- SkColorSpace reference count is incremented.
- @param colorSpace SkColorSpace moved to SkImageInfo
- */
- void setColorSpace(sk_sp<SkColorSpace> colorSpace);
- /** Deprecated.
- */
- bool SK_WARN_UNUSED_RESULT reset(const SkMask& mask);
- /** Sets subset width, height, pixel address to intersection of SkPixmap with area,
- if intersection is not empty; and return true. Otherwise, leave subset unchanged
- and return false.
- Failing to read the return value generates a compile time warning.
- @param subset storage for width, height, pixel address of intersection
- @param area bounds to intersect with SkPixmap
- @return true if intersection of SkPixmap and area is not empty
- */
- bool SK_WARN_UNUSED_RESULT extractSubset(SkPixmap* subset, const SkIRect& area) const;
- /** Returns width, height, SkAlphaType, SkColorType, and SkColorSpace.
- @return reference to SkImageInfo
- */
- const SkImageInfo& info() const { return fInfo; }
- /** Returns row bytes, the interval from one pixel row to the next. Row bytes
- is at least as large as: width() * info().bytesPerPixel().
- Returns zero if colorType() is kUnknown_SkColorType.
- It is up to the SkBitmap creator to ensure that row bytes is a useful value.
- @return byte length of pixel row
- */
- size_t rowBytes() const { return fRowBytes; }
- /** Returns pixel address, the base address corresponding to the pixel origin.
- It is up to the SkPixmap creator to ensure that pixel address is a useful value.
- @return pixel address
- */
- const void* addr() const { return fPixels; }
- /** Returns pixel count in each pixel row. Should be equal or less than:
- rowBytes() / info().bytesPerPixel().
- @return pixel width in SkImageInfo
- */
- int width() const { return fInfo.width(); }
- /** Returns pixel row count.
- @return pixel height in SkImageInfo
- */
- int height() const { return fInfo.height(); }
- /** Returns SkColorType, one of:
- kUnknown_SkColorType, kAlpha_8_SkColorType, kRGB_565_SkColorType,
- kARGB_4444_SkColorType, kRGBA_8888_SkColorType, kRGB_888x_SkColorType,
- kBGRA_8888_SkColorType, kRGBA_1010102_SkColorType, kRGB_101010x_SkColorType,
- kGray_8_SkColorType, kRGBA_F16_SkColorType.
- @return SkColorType in SkImageInfo
- */
- SkColorType colorType() const { return fInfo.colorType(); }
- /** Returns SkAlphaType, one of:
- kUnknown_SkAlphaType, kOpaque_SkAlphaType, kPremul_SkAlphaType,
- kUnpremul_SkAlphaType.
- @return SkAlphaType in SkImageInfo
- */
- SkAlphaType alphaType() const { return fInfo.alphaType(); }
- /** Returns SkColorSpace, the range of colors, associated with SkImageInfo. The
- reference count of SkColorSpace is unchanged. The returned SkColorSpace is
- immutable.
- @return SkColorSpace in SkImageInfo, or nullptr
- */
- SkColorSpace* colorSpace() const { return fInfo.colorSpace(); }
- /** Returns true if SkAlphaType is kOpaque_SkAlphaType.
- Does not check if SkColorType allows alpha, or if any pixel value has
- transparency.
- @return true if SkImageInfo has opaque SkAlphaType
- */
- bool isOpaque() const { return fInfo.isOpaque(); }
- /** Returns SkIRect { 0, 0, width(), height() }.
- @return integral rectangle from origin to width() and height()
- */
- SkIRect bounds() const { return SkIRect::MakeWH(this->width(), this->height()); }
- /** Returns number of pixels that fit on row. Should be greater than or equal to
- width().
- @return maximum pixels per row
- */
- int rowBytesAsPixels() const { return int(fRowBytes >> this->shiftPerPixel()); }
- /** Returns bit shift converting row bytes to row pixels.
- Returns zero for kUnknown_SkColorType.
- @return one of: 0, 1, 2, 3; left shift to convert pixels to bytes
- */
- int shiftPerPixel() const { return fInfo.shiftPerPixel(); }
- /** Returns minimum memory required for pixel storage.
- Does not include unused memory on last row when rowBytesAsPixels() exceeds width().
- Returns zero if result does not fit in size_t.
- Returns zero if height() or width() is 0.
- Returns height() times rowBytes() if colorType() is kUnknown_SkColorType.
- @return size in bytes of image buffer
- */
- size_t computeByteSize() const { return fInfo.computeByteSize(fRowBytes); }
- /** Returns true if all pixels are opaque. SkColorType determines how pixels
- are encoded, and whether pixel describes alpha. Returns true for SkColorType
- without alpha in each pixel; for other SkColorType, returns true if all
- pixels have alpha values equivalent to 1.0 or greater.
- For SkColorType kRGB_565_SkColorType or kGray_8_SkColorType: always
- returns true. For SkColorType kAlpha_8_SkColorType, kBGRA_8888_SkColorType,
- kRGBA_8888_SkColorType: returns true if all pixel alpha values are 255.
- For SkColorType kARGB_4444_SkColorType: returns true if all pixel alpha values are 15.
- For kRGBA_F16_SkColorType: returns true if all pixel alpha values are 1.0 or
- greater.
- Returns false for kUnknown_SkColorType.
- @return true if all pixels have opaque values or SkColorType is opaque
- */
- bool computeIsOpaque() const;
- /** Returns pixel at (x, y) as unpremultiplied color.
- Returns black with alpha if SkColorType is kAlpha_8_SkColorType.
- Input is not validated: out of bounds values of x or y trigger an assert() if
- built with SK_DEBUG defined; and returns undefined values or may crash if
- SK_RELEASE is defined. Fails if SkColorType is kUnknown_SkColorType or
- pixel address is nullptr.
- SkColorSpace in SkImageInfo is ignored. Some color precision may be lost in the
- conversion to unpremultiplied color; original pixel data may have additional
- precision.
- @param x column index, zero or greater, and less than width()
- @param y row index, zero or greater, and less than height()
- @return pixel converted to unpremultiplied color
- */
- SkColor getColor(int x, int y) const;
- /** Look up the pixel at (x,y) and return its alpha component, normalized to [0..1].
- This is roughly equivalent to SkGetColorA(getColor()), but can be more efficent
- (and more precise if the pixels store more than 8 bits per component).
- @param x column index, zero or greater, and less than width()
- @param y row index, zero or greater, and less than height()
- @return alpha converted to normalized float
- */
- float getAlphaf(int x, int y) const;
- /** Returns readable pixel address at (x, y). Returns nullptr if SkPixelRef is nullptr.
- Input is not validated: out of bounds values of x or y trigger an assert() if
- built with SK_DEBUG defined. Returns nullptr if SkColorType is kUnknown_SkColorType.
- Performs a lookup of pixel size; for better performance, call
- one of: addr8, addr16, addr32, addr64, or addrF16().
- @param x column index, zero or greater, and less than width()
- @param y row index, zero or greater, and less than height()
- @return readable generic pointer to pixel
- */
- const void* addr(int x, int y) const {
- return (const char*)fPixels + fInfo.computeOffset(x, y, fRowBytes);
- }
- /** Returns readable base pixel address. Result is addressable as unsigned 8-bit bytes.
- Will trigger an assert() if SkColorType is not kAlpha_8_SkColorType or
- kGray_8_SkColorType, and is built with SK_DEBUG defined.
- One byte corresponds to one pixel.
- @return readable unsigned 8-bit pointer to pixels
- */
- const uint8_t* addr8() const {
- SkASSERT(1 == fInfo.bytesPerPixel());
- return reinterpret_cast<const uint8_t*>(fPixels);
- }
- /** Returns readable base pixel address. Result is addressable as unsigned 16-bit words.
- Will trigger an assert() if SkColorType is not kRGB_565_SkColorType or
- kARGB_4444_SkColorType, and is built with SK_DEBUG defined.
- One word corresponds to one pixel.
- @return readable unsigned 16-bit pointer to pixels
- */
- const uint16_t* addr16() const {
- SkASSERT(2 == fInfo.bytesPerPixel());
- return reinterpret_cast<const uint16_t*>(fPixels);
- }
- /** Returns readable base pixel address. Result is addressable as unsigned 32-bit words.
- Will trigger an assert() if SkColorType is not kRGBA_8888_SkColorType or
- kBGRA_8888_SkColorType, and is built with SK_DEBUG defined.
- One word corresponds to one pixel.
- @return readable unsigned 32-bit pointer to pixels
- */
- const uint32_t* addr32() const {
- SkASSERT(4 == fInfo.bytesPerPixel());
- return reinterpret_cast<const uint32_t*>(fPixels);
- }
- /** Returns readable base pixel address. Result is addressable as unsigned 64-bit words.
- Will trigger an assert() if SkColorType is not kRGBA_F16_SkColorType and is built
- with SK_DEBUG defined.
- One word corresponds to one pixel.
- @return readable unsigned 64-bit pointer to pixels
- */
- const uint64_t* addr64() const {
- SkASSERT(8 == fInfo.bytesPerPixel());
- return reinterpret_cast<const uint64_t*>(fPixels);
- }
- /** Returns readable base pixel address. Result is addressable as unsigned 16-bit words.
- Will trigger an assert() if SkColorType is not kRGBA_F16_SkColorType and is built
- with SK_DEBUG defined.
- Each word represents one color component encoded as a half float.
- Four words correspond to one pixel.
- @return readable unsigned 16-bit pointer to first component of pixels
- */
- const uint16_t* addrF16() const {
- SkASSERT(8 == fInfo.bytesPerPixel());
- SkASSERT(kRGBA_F16_SkColorType == fInfo.colorType());
- return reinterpret_cast<const uint16_t*>(fPixels);
- }
- /** Returns readable pixel address at (x, y).
- Input is not validated: out of bounds values of x or y trigger an assert() if
- built with SK_DEBUG defined.
- Will trigger an assert() if SkColorType is not kAlpha_8_SkColorType or
- kGray_8_SkColorType, and is built with SK_DEBUG defined.
- @param x column index, zero or greater, and less than width()
- @param y row index, zero or greater, and less than height()
- @return readable unsigned 8-bit pointer to pixel at (x, y)
- */
- const uint8_t* addr8(int x, int y) const {
- SkASSERT((unsigned)x < (unsigned)fInfo.width());
- SkASSERT((unsigned)y < (unsigned)fInfo.height());
- return (const uint8_t*)((const char*)this->addr8() + y * fRowBytes + (x << 0));
- }
- /** Returns readable pixel address at (x, y).
- Input is not validated: out of bounds values of x or y trigger an assert() if
- built with SK_DEBUG defined.
- Will trigger an assert() if SkColorType is not kRGB_565_SkColorType or
- kARGB_4444_SkColorType, and is built with SK_DEBUG defined.
- @param x column index, zero or greater, and less than width()
- @param y row index, zero or greater, and less than height()
- @return readable unsigned 16-bit pointer to pixel at (x, y)
- */
- const uint16_t* addr16(int x, int y) const {
- SkASSERT((unsigned)x < (unsigned)fInfo.width());
- SkASSERT((unsigned)y < (unsigned)fInfo.height());
- return (const uint16_t*)((const char*)this->addr16() + y * fRowBytes + (x << 1));
- }
- /** Returns readable pixel address at (x, y).
- Input is not validated: out of bounds values of x or y trigger an assert() if
- built with SK_DEBUG defined.
- Will trigger an assert() if SkColorType is not kRGBA_8888_SkColorType or
- kBGRA_8888_SkColorType, and is built with SK_DEBUG defined.
- @param x column index, zero or greater, and less than width()
- @param y row index, zero or greater, and less than height()
- @return readable unsigned 32-bit pointer to pixel at (x, y)
- */
- const uint32_t* addr32(int x, int y) const {
- SkASSERT((unsigned)x < (unsigned)fInfo.width());
- SkASSERT((unsigned)y < (unsigned)fInfo.height());
- return (const uint32_t*)((const char*)this->addr32() + y * fRowBytes + (x << 2));
- }
- /** Returns readable pixel address at (x, y).
- Input is not validated: out of bounds values of x or y trigger an assert() if
- built with SK_DEBUG defined.
- Will trigger an assert() if SkColorType is not kRGBA_F16_SkColorType and is built
- with SK_DEBUG defined.
- @param x column index, zero or greater, and less than width()
- @param y row index, zero or greater, and less than height()
- @return readable unsigned 64-bit pointer to pixel at (x, y)
- */
- const uint64_t* addr64(int x, int y) const {
- SkASSERT((unsigned)x < (unsigned)fInfo.width());
- SkASSERT((unsigned)y < (unsigned)fInfo.height());
- return (const uint64_t*)((const char*)this->addr64() + y * fRowBytes + (x << 3));
- }
- /** Returns readable pixel address at (x, y).
- Input is not validated: out of bounds values of x or y trigger an assert() if
- built with SK_DEBUG defined.
- Will trigger an assert() if SkColorType is not kRGBA_F16_SkColorType and is built
- with SK_DEBUG defined.
- Each unsigned 16-bit word represents one color component encoded as a half float.
- Four words correspond to one pixel.
- @param x column index, zero or greater, and less than width()
- @param y row index, zero or greater, and less than height()
- @return readable unsigned 16-bit pointer to pixel component at (x, y)
- */
- const uint16_t* addrF16(int x, int y) const {
- SkASSERT(kRGBA_F16_SkColorType == fInfo.colorType());
- return reinterpret_cast<const uint16_t*>(this->addr64(x, y));
- }
- /** Returns writable base pixel address.
- @return writable generic base pointer to pixels
- */
- void* writable_addr() const { return const_cast<void*>(fPixels); }
- /** Returns writable pixel address at (x, y).
- Input is not validated: out of bounds values of x or y trigger an assert() if
- built with SK_DEBUG defined. Returns zero if SkColorType is kUnknown_SkColorType.
- @param x column index, zero or greater, and less than width()
- @param y row index, zero or greater, and less than height()
- @return writable generic pointer to pixel
- */
- void* writable_addr(int x, int y) const {
- return const_cast<void*>(this->addr(x, y));
- }
- /** Returns writable pixel address at (x, y). Result is addressable as unsigned
- 8-bit bytes. Will trigger an assert() if SkColorType is not kAlpha_8_SkColorType
- or kGray_8_SkColorType, and is built with SK_DEBUG defined.
- One byte corresponds to one pixel.
- @param x column index, zero or greater, and less than width()
- @param y row index, zero or greater, and less than height()
- @return writable unsigned 8-bit pointer to pixels
- */
- uint8_t* writable_addr8(int x, int y) const {
- return const_cast<uint8_t*>(this->addr8(x, y));
- }
- /** Returns writable_addr pixel address at (x, y). Result is addressable as unsigned
- 16-bit words. Will trigger an assert() if SkColorType is not kRGB_565_SkColorType
- or kARGB_4444_SkColorType, and is built with SK_DEBUG defined.
- One word corresponds to one pixel.
- @param x column index, zero or greater, and less than width()
- @param y row index, zero or greater, and less than height()
- @return writable unsigned 16-bit pointer to pixel
- */
- uint16_t* writable_addr16(int x, int y) const {
- return const_cast<uint16_t*>(this->addr16(x, y));
- }
- /** Returns writable pixel address at (x, y). Result is addressable as unsigned
- 32-bit words. Will trigger an assert() if SkColorType is not
- kRGBA_8888_SkColorType or kBGRA_8888_SkColorType, and is built with SK_DEBUG
- defined.
- One word corresponds to one pixel.
- @param x column index, zero or greater, and less than width()
- @param y row index, zero or greater, and less than height()
- @return writable unsigned 32-bit pointer to pixel
- */
- uint32_t* writable_addr32(int x, int y) const {
- return const_cast<uint32_t*>(this->addr32(x, y));
- }
- /** Returns writable pixel address at (x, y). Result is addressable as unsigned
- 64-bit words. Will trigger an assert() if SkColorType is not
- kRGBA_F16_SkColorType and is built with SK_DEBUG defined.
- One word corresponds to one pixel.
- @param x column index, zero or greater, and less than width()
- @param y row index, zero or greater, and less than height()
- @return writable unsigned 64-bit pointer to pixel
- */
- uint64_t* writable_addr64(int x, int y) const {
- return const_cast<uint64_t*>(this->addr64(x, y));
- }
- /** Returns writable pixel address at (x, y). Result is addressable as unsigned
- 16-bit words. Will trigger an assert() if SkColorType is not
- kRGBA_F16_SkColorType and is built with SK_DEBUG defined.
- Each word represents one color component encoded as a half float.
- Four words correspond to one pixel.
- @param x column index, zero or greater, and less than width()
- @param y row index, zero or greater, and less than height()
- @return writable unsigned 16-bit pointer to first component of pixel
- */
- uint16_t* writable_addrF16(int x, int y) const {
- return reinterpret_cast<uint16_t*>(writable_addr64(x, y));
- }
- /** Copies a SkRect of pixels to dstPixels. Copy starts at (0, 0), and does not
- exceed SkPixmap (width(), height()).
- dstInfo specifies width, height, SkColorType, SkAlphaType, and
- SkColorSpace of destination. dstRowBytes specifics the gap from one destination
- row to the next. Returns true if pixels are copied. Returns false if
- dstInfo address equals nullptr, or dstRowBytes is less than dstInfo.minRowBytes().
- Pixels are copied only if pixel conversion is possible. If SkPixmap colorType() is
- kGray_8_SkColorType, or kAlpha_8_SkColorType; dstInfo.colorType() must match.
- If SkPixmap colorType() is kGray_8_SkColorType, dstInfo.colorSpace() must match.
- If SkPixmap alphaType() is kOpaque_SkAlphaType, dstInfo.alphaType() must
- match. If SkPixmap colorSpace() is nullptr, dstInfo.colorSpace() must match. Returns
- false if pixel conversion is not possible.
- Returns false if SkPixmap width() or height() is zero or negative.
- @param dstInfo destination width, height, SkColorType, SkAlphaType, SkColorSpace
- @param dstPixels destination pixel storage
- @param dstRowBytes destination row length
- @return true if pixels are copied to dstPixels
- */
- bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes) const {
- return this->readPixels(dstInfo, dstPixels, dstRowBytes, 0, 0);
- }
- /** Copies a SkRect of pixels to dstPixels. Copy starts at (srcX, srcY), and does not
- exceed SkPixmap (width(), height()).
- dstInfo specifies width, height, SkColorType, SkAlphaType, and
- SkColorSpace of destination. dstRowBytes specifics the gap from one destination
- row to the next. Returns true if pixels are copied. Returns false if
- dstInfo address equals nullptr, or dstRowBytes is less than dstInfo.minRowBytes().
- Pixels are copied only if pixel conversion is possible. If SkPixmap colorType() is
- kGray_8_SkColorType, or kAlpha_8_SkColorType; dstInfo.colorType() must match.
- If SkPixmap colorType() is kGray_8_SkColorType, dstInfo.colorSpace() must match.
- If SkPixmap alphaType() is kOpaque_SkAlphaType, dstInfo.alphaType() must
- match. If SkPixmap colorSpace() is nullptr, dstInfo.colorSpace() must match. Returns
- false if pixel conversion is not possible.
- srcX and srcY may be negative to copy only top or left of source. Returns
- false if SkPixmap width() or height() is zero or negative. Returns false if:
- abs(srcX) >= Pixmap width(), or if abs(srcY) >= Pixmap height().
- @param dstInfo destination width, height, SkColorType, SkAlphaType, SkColorSpace
- @param dstPixels destination pixel storage
- @param dstRowBytes destination row length
- @param srcX column index whose absolute value is less than width()
- @param srcY row index whose absolute value is less than height()
- @return true if pixels are copied to dstPixels
- */
- bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX,
- int srcY) const;
- /** Copies a SkRect of pixels to dst. Copy starts at (srcX, srcY), and does not
- exceed SkPixmap (width(), height()). dst specifies width, height, SkColorType,
- SkAlphaType, and SkColorSpace of destination. Returns true if pixels are copied.
- Returns false if dst address equals nullptr, or dst.rowBytes() is less than
- dst SkImageInfo::minRowBytes.
- Pixels are copied only if pixel conversion is possible. If SkPixmap colorType() is
- kGray_8_SkColorType, or kAlpha_8_SkColorType; dst.info().colorType must match.
- If SkPixmap colorType() is kGray_8_SkColorType, dst.info().colorSpace must match.
- If SkPixmap alphaType() is kOpaque_SkAlphaType, dst.info().alphaType must
- match. If SkPixmap colorSpace() is nullptr, dst.info().colorSpace must match. Returns
- false if pixel conversion is not possible.
- srcX and srcY may be negative to copy only top or left of source. Returns
- false SkPixmap width() or height() is zero or negative. Returns false if:
- abs(srcX) >= Pixmap width(), or if abs(srcY) >= Pixmap height().
- @param dst SkImageInfo and pixel address to write to
- @param srcX column index whose absolute value is less than width()
- @param srcY row index whose absolute value is less than height()
- @return true if pixels are copied to dst
- */
- bool readPixels(const SkPixmap& dst, int srcX, int srcY) const {
- return this->readPixels(dst.info(), dst.writable_addr(), dst.rowBytes(), srcX, srcY);
- }
- /** Copies pixels inside bounds() to dst. dst specifies width, height, SkColorType,
- SkAlphaType, and SkColorSpace of destination. Returns true if pixels are copied.
- Returns false if dst address equals nullptr, or dst.rowBytes() is less than
- dst SkImageInfo::minRowBytes.
- Pixels are copied only if pixel conversion is possible. If SkPixmap colorType() is
- kGray_8_SkColorType, or kAlpha_8_SkColorType; dst SkColorType must match.
- If SkPixmap colorType() is kGray_8_SkColorType, dst SkColorSpace must match.
- If SkPixmap alphaType() is kOpaque_SkAlphaType, dst SkAlphaType must
- match. If SkPixmap colorSpace() is nullptr, dst SkColorSpace must match. Returns
- false if pixel conversion is not possible.
- Returns false if SkPixmap width() or height() is zero or negative.
- @param dst SkImageInfo and pixel address to write to
- @return true if pixels are copied to dst
- */
- bool readPixels(const SkPixmap& dst) const {
- return this->readPixels(dst.info(), dst.writable_addr(), dst.rowBytes(), 0, 0);
- }
- /** Copies SkBitmap to dst, scaling pixels to fit dst.width() and dst.height(), and
- converting pixels to match dst.colorType() and dst.alphaType(). Returns true if
- pixels are copied. Returns false if dst address is nullptr, or dst.rowBytes() is
- less than dst SkImageInfo::minRowBytes.
- Pixels are copied only if pixel conversion is possible. If SkPixmap colorType() is
- kGray_8_SkColorType, or kAlpha_8_SkColorType; dst SkColorType must match.
- If SkPixmap colorType() is kGray_8_SkColorType, dst SkColorSpace must match.
- If SkPixmap alphaType() is kOpaque_SkAlphaType, dst SkAlphaType must
- match. If SkPixmap colorSpace() is nullptr, dst SkColorSpace must match. Returns
- false if pixel conversion is not possible.
- Returns false if SkBitmap width() or height() is zero or negative.
- Scales the image, with filterQuality, to match dst.width() and dst.height().
- filterQuality kNone_SkFilterQuality is fastest, typically implemented with
- nearest neighbor filter. kLow_SkFilterQuality is typically implemented with
- bilerp filter. kMedium_SkFilterQuality is typically implemented with
- bilerp filter, and mip-map filter when size is reduced.
- kHigh_SkFilterQuality is slowest, typically implemented with bicubic filter.
- @param dst SkImageInfo and pixel address to write to
- @param filterQuality one of: kNone_SkFilterQuality, kLow_SkFilterQuality,
- kMedium_SkFilterQuality, kHigh_SkFilterQuality
- @return true if pixels are scaled to fit dst
- */
- bool scalePixels(const SkPixmap& dst, SkFilterQuality filterQuality) const;
- /** Writes color to pixels bounded by subset; returns true on success.
- Returns false if colorType() is kUnknown_SkColorType, or if subset does
- not intersect bounds().
- @param color unpremultiplied color to write
- @param subset bounding integer SkRect of written pixels
- @return true if pixels are changed
- */
- bool erase(SkColor color, const SkIRect& subset) const;
- /** Writes color to pixels inside bounds(); returns true on success.
- Returns false if colorType() is kUnknown_SkColorType, or if bounds()
- is empty.
- @param color unpremultiplied color to write
- @return true if pixels are changed
- */
- bool erase(SkColor color) const { return this->erase(color, this->bounds()); }
- /** Writes color to pixels bounded by subset; returns true on success.
- if subset is nullptr, writes colors pixels inside bounds(). Returns false if
- colorType() is kUnknown_SkColorType, if subset is not nullptr and does
- not intersect bounds(), or if subset is nullptr and bounds() is empty.
- @param color unpremultiplied color to write
- @param subset bounding integer SkRect of pixels to write; may be nullptr
- @return true if pixels are changed
- */
- bool erase(const SkColor4f& color, const SkIRect* subset = nullptr) const;
- private:
- const void* fPixels;
- size_t fRowBytes;
- SkImageInfo fInfo;
- friend class SkPixmapPriv;
- };
- #endif
|