diff options
Diffstat (limited to 'src/core/SkBitmap.cpp')
-rw-r--r-- | src/core/SkBitmap.cpp | 93 |
1 files changed, 9 insertions, 84 deletions
diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp index 900a3abcd0..d2a308b03a 100644 --- a/src/core/SkBitmap.cpp +++ b/src/core/SkBitmap.cpp @@ -361,47 +361,6 @@ void SkBitmap::updatePixelsFromRef() const { } } -static bool config_to_colorType(SkBitmap::Config config, SkColorType* ctOut) { - SkColorType ct; - switch (config) { - case SkBitmap::kNo_Config: - return false; - case SkBitmap::kA8_Config: - ct = kAlpha_8_SkColorType; - break; - case SkBitmap::kIndex8_Config: - ct = kIndex8_SkColorType; - break; - case SkBitmap::kRGB_565_Config: - ct = kRGB_565_SkColorType; - break; - case SkBitmap::kARGB_4444_Config: - ct = kARGB_4444_SkColorType; - break; - case SkBitmap::kARGB_8888_Config: - ct = kPMColor_SkColorType; - break; - } - if (ctOut) { - *ctOut = ct; - } - return true; -} - -bool SkBitmap::asImageInfo(SkImageInfo* info) const { - SkColorType ct; - if (!config_to_colorType(this->config(), &ct)) { - return false; - } - if (info) { - info->fWidth = fWidth; - info->fHeight = fHeight; - info->fAlphaType = this->alphaType(); - info->fColorType = ct; - } - return true; -} - SkPixelRef* SkBitmap::setPixelRef(SkPixelRef* pr, size_t offset) { // do this first, we that we never have a non-zero offset with a null ref if (NULL == pr) { @@ -452,20 +411,10 @@ void SkBitmap::setPixels(void* p, SkColorTable* ctable) { return; } - SkImageInfo info; - if (!this->asImageInfo(&info)) { - this->setPixelRef(NULL, 0); - return; - } - - SkPixelRef* pr = SkMallocPixelRef::NewDirect(info, p, fRowBytes, ctable); - if (NULL == pr) { - this->setPixelRef(NULL, 0); - return; - } - - this->setPixelRef(pr)->unref(); + Sk64 size = this->getSize64(); + SkASSERT(!size.isNeg() && size.is32()); + this->setPixelRef(new SkMallocPixelRef(p, size.get32(), ctable, false))->unref(); // since we're already allocated, we lockPixels right away this->lockPixels(); SkDEBUGCODE(this->validate();) @@ -530,19 +479,17 @@ GrTexture* SkBitmap::getTexture() const { */ bool SkBitmap::HeapAllocator::allocPixelRef(SkBitmap* dst, SkColorTable* ctable) { - SkImageInfo info; - if (!dst->asImageInfo(&info)) { -// SkDebugf("unsupported config for info %d\n", dst->config()); + Sk64 size = dst->getSize64(); + if (size.isNeg() || !size.is32()) { return false; } - - SkPixelRef* pr = SkMallocPixelRef::NewAllocate(info, dst->rowBytes(), - ctable); - if (NULL == pr) { + + void* addr = sk_malloc_flags(size.get32(), 0); // returns NULL on failure + if (NULL == addr) { return false; } - dst->setPixelRef(pr, 0)->unref(); + dst->setPixelRef(new SkMallocPixelRef(addr, size.get32(), ctable))->unref(); // since we're already allocated, we lockPixels right away dst->lockPixels(); return true; @@ -1649,28 +1596,6 @@ SkBitmap::RLEPixels::~RLEPixels() { /////////////////////////////////////////////////////////////////////////////// -void SkImageInfo::unflatten(SkFlattenableReadBuffer& buffer) { - fWidth = buffer.read32(); - fHeight = buffer.read32(); - - uint32_t packed = buffer.read32(); - SkASSERT(0 == (packed >> 16)); - fAlphaType = (SkAlphaType)((packed >> 8) & 0xFF); - fColorType = (SkColorType)((packed >> 0) & 0xFF); -} - -void SkImageInfo::flatten(SkFlattenableWriteBuffer& buffer) const { - buffer.write32(fWidth); - buffer.write32(fHeight); - - SkASSERT(0 == (fAlphaType & ~0xFF)); - SkASSERT(0 == (fColorType & ~0xFF)); - uint32_t packed = (fAlphaType << 8) | fColorType; - buffer.write32(packed); -} - -/////////////////////////////////////////////////////////////////////////////// - #ifdef SK_DEBUG void SkBitmap::validate() const { SkASSERT(fConfig < kConfigCount); |