Index: src/effects/SkBlurImageFilter.cpp |
diff --git a/src/effects/SkBlurImageFilter.cpp b/src/effects/SkBlurImageFilter.cpp |
index 20976968fe8e8e1e922a1171f51c9fdaf94d9cfd..8398f48b7f815e3af535b299727137c01c7943b5 100644 |
--- a/src/effects/SkBlurImageFilter.cpp |
+++ b/src/effects/SkBlurImageFilter.cpp |
@@ -8,6 +8,7 @@ |
#include "SkBitmap.h" |
#include "SkBlurImageFilter.h" |
#include "SkColorPriv.h" |
+#include "SkDevice.h" |
#include "SkGpuBlurUtils.h" |
#include "SkOpts.h" |
#include "SkReadBuffer.h" |
@@ -90,9 +91,12 @@ bool SkBlurImageFilter::onFilterImage(Proxy* proxy, |
return false; |
} |
- if (!dst->tryAllocPixels(src.info().makeWH(srcBounds.width(), srcBounds.height()))) { |
+ SkAutoTUnref<SkBaseDevice> device(proxy->createDevice(srcBounds.width(), srcBounds.height())); |
+ if (!device) { |
return false; |
} |
+ *dst = device->accessBitmap(false); |
+ SkAutoLockPixels alp_dst(*dst); |
dst->getBounds(&dstBounds); |
SkVector sigma = mapSigma(fSigma, ctx.ctm()); |
@@ -113,10 +117,12 @@ bool SkBlurImageFilter::onFilterImage(Proxy* proxy, |
return true; |
} |
- SkBitmap temp; |
- if (!temp.tryAllocPixels(dst->info())) { |
+ SkAutoTUnref<SkBaseDevice> tempDevice(proxy->createDevice(dst->width(), dst->height())); |
+ if (!tempDevice) { |
return false; |
} |
+ SkBitmap temp = tempDevice->accessBitmap(false); |
+ SkAutoLockPixels alpTemp(temp); |
offset->fX = srcBounds.fLeft; |
offset->fY = srcBounds.fTop; |