diff options
author | 2015-03-17 17:44:06 -0700 | |
---|---|---|
committer | 2015-03-17 17:44:07 -0700 | |
commit | 0c9b1a8d05ea6ec5dfae0ead854304673d94d2c2 (patch) | |
tree | c6df748125f1c6a992900fa98de135a1b17d30b1 /src/core/SkBitmap.cpp | |
parent | 160f24ce0e8d6dd7ca80b78871e063d4f4609cfb (diff) |
add kGray_8_SkColorType
patch from issue 1014783003 at patchset 60001 (http://crrev.com/1014783003#ps60001)
BUG=skia:
TBR=
Review URL: https://codereview.chromium.org/1010343002
Diffstat (limited to 'src/core/SkBitmap.cpp')
-rw-r--r-- | src/core/SkBitmap.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp index 0b586cb081..877cfaa6e1 100644 --- a/src/core/SkBitmap.cpp +++ b/src/core/SkBitmap.cpp @@ -516,6 +516,7 @@ void* SkBitmap::getAddr(int x, int y) const { break; case kAlpha_8_SkColorType: case kIndex_8_SkColorType: + case kGray_8_SkColorType: base += x; break; default: @@ -532,6 +533,10 @@ SkColor SkBitmap::getColor(int x, int y) const { SkASSERT((unsigned)y < (unsigned)this->height()); switch (this->colorType()) { + case kGray_8_SkColorType: { + uint8_t* addr = this->getAddr8(x, y); + return SkColorSetRGB(*addr, *addr, *addr); + } case kAlpha_8_SkColorType: { uint8_t* addr = this->getAddr8(x, y); return SkColorSetA(0, addr[0]); @@ -597,6 +602,7 @@ bool SkBitmap::ComputeIsOpaque(const SkBitmap& bm) { return 0xFF == SkGetPackedA32(c); } break; case kRGB_565_SkColorType: + case kGray_8_SkColorType: return true; break; case kARGB_4444_SkColorType: { @@ -674,6 +680,20 @@ void SkBitmap::internalErase(const SkIRect& area, const int rowBytes = fRowBytes; switch (this->colorType()) { + case kGray_8_SkColorType: { + if (255 != a) { + r = SkMulDiv255Round(r, a); + g = SkMulDiv255Round(g, a); + b = SkMulDiv255Round(b, a); + } + int gray = SkComputeLuminance(r, g, b); + uint8_t* p = this->getAddr8(area.fLeft, area.fTop); + while (--height >= 0) { + memset(p, gray, width); + p += rowBytes; + } + break; + } case kAlpha_8_SkColorType: { uint8_t* p = this->getAddr8(area.fLeft, area.fTop); while (--height >= 0) { @@ -828,6 +848,16 @@ bool SkBitmap::canCopyTo(SkColorType dstColorType) const { break; case kARGB_4444_SkColorType: return sameConfigs || kN32_SkColorType == srcCT || kIndex_8_SkColorType == srcCT; + case kGray_8_SkColorType: + switch (srcCT) { + case kGray_8_SkColorType: + case kRGBA_8888_SkColorType: + case kBGRA_8888_SkColorType: + return true; + default: + break; + } + return false; default: return false; } |