| Index: src/effects/SkTestImageFilters.cpp
|
| diff --git a/src/effects/SkTestImageFilters.cpp b/src/effects/SkTestImageFilters.cpp
|
| index f0f8ae039041e3ecd6b05bd4468439b3d9af3209..a75017cd84fba0bcc30c8ee865c69fca7ff30742 100755
|
| --- a/src/effects/SkTestImageFilters.cpp
|
| +++ b/src/effects/SkTestImageFilters.cpp
|
| @@ -1,29 +1,13 @@
|
|
|
| #include "SkTestImageFilters.h"
|
| #include "SkCanvas.h"
|
| -#include "SkDevice.h"
|
| +#include "SkSurface.h"
|
| #include "SkReadBuffer.h"
|
| #include "SkWriteBuffer.h"
|
|
|
| -// Simple helper canvas that "takes ownership" of the provided device, so that
|
| -// when this canvas goes out of scope, so will its device. Could be replaced
|
| -// with the following:
|
| -//
|
| -// SkCanvas canvas(device);
|
| -// SkAutoTUnref<SkBaseDevice> aur(device);
|
| -//
|
| -class OwnDeviceCanvas : public SkCanvas {
|
| -public:
|
| - OwnDeviceCanvas(SkBaseDevice* device) : SkCanvas(device) {
|
| - SkSafeUnref(device);
|
| - }
|
| -};
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -bool SkDownSampleImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& src,
|
| +bool SkDownSampleImageFilter::onFilterImage(Proxy* proxy, SkImage& src,
|
| const Context&,
|
| - SkBitmap* result, SkIPoint*) const {
|
| + SkAutoTUnref<SkImage>& result, SkIPoint*) const {
|
| SkScalar scale = fScale;
|
| if (scale > SK_Scalar1 || scale <= 0) {
|
| return false;
|
| @@ -38,35 +22,45 @@ bool SkDownSampleImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& src,
|
| dstH = 1;
|
| }
|
|
|
| - SkBitmap tmp;
|
| + SkAutoTUnref<SkImage> tmp;
|
|
|
| // downsample
|
| {
|
| - SkBaseDevice* dev = proxy->createDevice(dstW, dstH);
|
| - if (NULL == dev) {
|
| + SkAutoTUnref<SkSurface> surface(proxy->createSurface(dstW, dstH));
|
| + if (NULL == surface) {
|
| return false;
|
| }
|
| - OwnDeviceCanvas canvas(dev);
|
| + SkCanvas* canvas = surface->getCanvas();
|
| SkPaint paint;
|
| -
|
| paint.setFilterLevel(SkPaint::kLow_FilterLevel);
|
| - canvas.scale(scale, scale);
|
| - canvas.drawBitmap(src, 0, 0, &paint);
|
| - tmp = dev->accessBitmap(false);
|
| + canvas->scale(scale, scale);
|
| + canvas->drawImage(&src, 0, 0, &paint);
|
| +
|
| + tmp.reset(surface->newImageSnapshot(SkSurface::kYes_Budgeted));
|
| + if (NULL == tmp) {
|
| + return false;
|
| + }
|
| }
|
|
|
| // upscale
|
| {
|
| - SkBaseDevice* dev = proxy->createDevice(src.width(), src.height());
|
| - if (NULL == dev) {
|
| + SkAutoTUnref<SkSurface> surface(proxy->createSurface(dstW, dstH));
|
| + if (NULL == surface) {
|
| return false;
|
| }
|
| - OwnDeviceCanvas canvas(dev);
|
| -
|
| +#if 0 // TODO:CHECK
|
| SkRect r = SkRect::MakeWH(SkIntToScalar(src.width()),
|
| SkIntToScalar(src.height()));
|
| - canvas.drawBitmapRect(tmp, NULL, r, NULL);
|
| - *result = dev->accessBitmap(false);
|
| + surface->getCanvas()->drawImageRect(tmp, NULL, r, NULL);
|
| +#else
|
| + surface->getCanvas()->scale(1/scale, 1/scale);
|
| + surface->getCanvas()->drawImage(tmp, 0, 0, NULL);
|
| +#endif
|
| + SkImage* image = surface->newImageSnapshot(SkSurface::kYes_Budgeted);
|
| + if (NULL == image) {
|
| + return false;
|
| + }
|
| + result.reset(image);
|
| }
|
| return true;
|
| }
|
|
|