aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/SkBitmap.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp
index c3bc4a9d63..9de2261a9a 100644
--- a/src/core/SkBitmap.cpp
+++ b/src/core/SkBitmap.cpp
@@ -190,15 +190,15 @@ void SkBitmap::setPixelRef(sk_sp<SkPixelRef> pr, int dx, int dy) {
#ifdef SK_DEBUG
if (pr) {
if (kUnknown_SkColorType != fInfo.colorType()) {
- SkASSERT(fInfo.width() + dx <= pr->width());
- SkASSERT(fInfo.height() + dy <= pr->height());
+ SkASSERT(dx >= 0 && fInfo.width() + dx <= pr->width());
+ SkASSERT(dy >= 0 && fInfo.height() + dy <= pr->height());
}
}
#endif
-
- fPixelRef = std::move(pr);
+ fPixelRef = kUnknown_SkColorType != fInfo.colorType() ? std::move(pr) : nullptr;
if (fPixelRef) {
- fPixelRefOrigin.set(SkTPin(dx, 0, fPixelRef->width()), SkTPin(dy, 0, fPixelRef->height()));
+ fPixelRefOrigin.set(dx, dy);
+ fRowBytes = fPixelRef->rowBytes();
this->updatePixelsFromRef();
} else {
// ignore dx,dy if there is no pixelref
@@ -245,6 +245,9 @@ bool SkBitmap::tryAllocPixels(const SkImageInfo& requestedInfo, size_t rowBytes)
// setInfo may have corrected info (e.g. 565 is always opaque).
const SkImageInfo& correctedInfo = this->info();
+ if (kUnknown_SkColorType == correctedInfo.colorType()) {
+ return true;
+ }
// setInfo may have computed a valid rowbytes if 0 were passed in
rowBytes = this->rowBytes();