Index: src/image/SkImage.cpp |
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp |
index f427755d470dc4be61f436895e780c5b2fc542e9..995106eb78aaaa818edaec4eb457e90100ed2143 100644 |
--- a/src/image/SkImage.cpp |
+++ b/src/image/SkImage.cpp |
@@ -178,4 +178,35 @@ SkImage* SkImage_Base::onNewImage(int newWidth, int newHeight, const SkIRect* su |
return surface->newImageSnapshot(); |
} |
+inline static bool read_image_as_n32_bitmap(const SkImage* image, SkBitmap* bitmap) { |
+ SkBitmap tmp; |
+ if (!as_IB(image)->getROPixels(&tmp)) { |
+ return false; |
+ } |
+ if (tmp.colorType() != kN32_SkColorType) { |
+ return false; |
+ } |
+ |
+ tmp.lockPixels(); |
+ bitmap->swap(tmp); |
+ return true; |
+} |
+ |
+SkAutoAdoptImageAsN32Bitmap::SkAutoAdoptImageAsN32Bitmap(SkAutoTUnref<const SkImage>& image, |
+ SkBitmap* bitmap) |
+ : fBitmap(NULL) { |
+ if (read_image_as_n32_bitmap(image, bitmap)) { |
+ fBitmap = bitmap; |
+ image.reset(NULL); |
+ } |
+} |
+ |
+SkAutoImageAsN32Bitmap::SkAutoImageAsN32Bitmap(const SkImage* image, SkBitmap* bitmap) |
+ : fBitmap(NULL) { |
+ if (read_image_as_n32_bitmap(image, bitmap)) { |
+ fBitmap = bitmap; |
+ } |
+} |
+ |
+ |