Index: src/core/SkOrderedReadBuffer.cpp |
diff --git a/src/core/SkOrderedReadBuffer.cpp b/src/core/SkOrderedReadBuffer.cpp |
index 85491c5607545b04f8c48652399a611b3524cd21..4af64706a1db70e9246863a75f1ef9d183982c11 100644 |
--- a/src/core/SkOrderedReadBuffer.cpp |
+++ b/src/core/SkOrderedReadBuffer.cpp |
@@ -197,8 +197,23 @@ void SkOrderedReadBuffer::readBitmap(SkBitmap* bitmap) { |
// A non-zero size means the SkBitmap was encoded. |
const void* data = this->skip(length); |
if (fBitmapDecoder != NULL && fBitmapDecoder(data, length, bitmap)) { |
- SkASSERT(bitmap->width() == width && bitmap->height() == height); |
- return; |
+ if (bitmap->width() == width && bitmap->height() == height) { |
+ return; |
+ } |
+ |
+ // This case can only be reached if extractSubset was called, so |
+ // the recorded width and height must be smaller than (or equal to |
+ // the encoded width and height. |
+ SkASSERT(width <= bitmap->width() && height <= bitmap->height()); |
+ |
+ // FIXME: Once the writer is changed to record the (x,y) offset, |
+ // they will be used to store the correct portion of the picture. |
+ SkBitmap subsetBm; |
+ SkIRect subset = SkIRect::MakeWH(width, height); |
+ if (bitmap->extractSubset(&subsetBm, subset)) { |
+ bitmap->swap(subsetBm); |
+ return; |
+ } |
} |
// This bitmap was encoded when written, but we are unable to decode, possibly due to |
// not having a decoder. |