diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index f044e70..04d2cdd 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -505,7 +505,8 @@
             paint->setAntiAlias(SkOSMenu::kOnState == fAAState);
         }
         if (SkOSMenu::kMixedState != fFilterState) {
-            paint->setFilterBitmap(SkOSMenu::kOnState == fFilterState);
+            paint->setFilterLevel(SkOSMenu::kOnState == fFilterState ?
+                                  SkPaint::kLow_FilterLevel : SkPaint::kNone_FilterLevel);
         }
         if (SkOSMenu::kMixedState != fSubpixelState) {
             paint->setSubpixelText(SkOSMenu::kOnState == fSubpixelState);
diff --git a/samplecode/SampleBitmapRect.cpp b/samplecode/SampleBitmapRect.cpp
index 04297e0..422ed58 100644
--- a/samplecode/SampleBitmapRect.cpp
+++ b/samplecode/SampleBitmapRect.cpp
@@ -133,7 +133,7 @@
         canvas->drawRect(srcR, paint);
 
         for (int i = 0; i < 2; ++i) {
-            paint.setFilterBitmap(1 == i);
+            paint.setFilterLevel(1 == i ? SkPaint::kLow_FilterLevel : SkPaint::kNone_FilterLevel);
             canvas->drawBitmapRectToRect(bitmap, &srcR, fDstR[i], &paint);
             canvas->drawRect(fDstR[i], paint);
         }
@@ -226,7 +226,7 @@
         paint.setColor(SK_ColorYELLOW);
 
         for (int i = 0; i < 2; ++i) {
-            paint.setFilterBitmap(1 == i);
+            paint.setFilterLevel(1 == i ? SkPaint::kLow_FilterLevel : SkPaint::kNone_FilterLevel);
             canvas->drawBitmapRectToRect(fBitmap, &fSrcR, fDstR[i], &paint);
             canvas->drawRect(fDstR[i], paint);
         }
diff --git a/samplecode/SampleFilter.cpp b/samplecode/SampleFilter.cpp
index 3eb9cdc..71ab62f 100644
--- a/samplecode/SampleFilter.cpp
+++ b/samplecode/SampleFilter.cpp
@@ -59,7 +59,7 @@
 
 static SkScalar draw_set(SkCanvas* c, const SkBitmap& bm, SkScalar x, SkPaint* p) {
     x += draw_bm(c, bm, x, 0, p);
-    p->setFilterBitmap(true);
+    p->setFilterLevel(SkPaint::kLow_FilterLevel);
     x += draw_bm(c, bm, x, 0, p);
     p->setDither(true);
     return x + draw_bm(c, bm, x, 0, p);
diff --git a/samplecode/SampleFilter2.cpp b/samplecode/SampleFilter2.cpp
index f3a8b46..e982778 100644
--- a/samplecode/SampleFilter2.cpp
+++ b/samplecode/SampleFilter2.cpp
@@ -76,7 +76,7 @@
         canvas->scale(SK_Scalar1, scale);
 
         for (int k = 0; k < 2; k++) {
-            paint.setFilterBitmap(k == 1);
+            paint.setFilterLevel(k == 1 ? SkPaint::kLow_FilterLevel : SkPaint::kNone_FilterLevel);
             for (int j = 0; j < 2; j++) {
                 paint.setDither(j == 1);
                 for (int i = 0; i < fBitmapCount; i++) {
@@ -93,7 +93,7 @@
                         SkString s("dither=");
                         s.appendS32(paint.isDither());
                         s.append(" filter=");
-                        s.appendS32(paint.isFilterBitmap());
+                        s.appendS32(paint.getFilterLevel() != SkPaint::kNone_FilterLevel);
                         canvas->drawText(s.c_str(), s.size(), x + W/2,
                                          y - p.getTextSize(), p);
                     }
diff --git a/samplecode/SampleFilterFuzz.cpp b/samplecode/SampleFilterFuzz.cpp
index c04292d..b10fb31 100644
--- a/samplecode/SampleFilterFuzz.cpp
+++ b/samplecode/SampleFilterFuzz.cpp
@@ -231,9 +231,9 @@
                 make_scalar(true), make_scalar(true), R(10.0f), make_scalar()) :
             SkPerlinNoiseShader::CreateTubulence(
                 make_scalar(true), make_scalar(true), R(10.0f), make_scalar()));
-        filter = SkRectShaderImageFilter::Create(shader,
-                                                 SkRect::MakeWH(SkIntToScalar(kBitmapSize),
-                                                                SkIntToScalar(kBitmapSize)));
+        SkImageFilter::CropRect cropR(SkRect::MakeWH(SkIntToScalar(kBitmapSize),
+                                                     SkIntToScalar(kBitmapSize)));
+        filter = SkRectShaderImageFilter::Create(shader, &cropR);
     }
         break;
     case DROP_SHADOW:
diff --git a/samplecode/SamplePatch.cpp b/samplecode/SamplePatch.cpp
index 3da4b0c..c630e89 100644
--- a/samplecode/SamplePatch.cpp
+++ b/samplecode/SamplePatch.cpp
@@ -269,7 +269,7 @@
     virtual void onDrawContent(SkCanvas* canvas) {
         SkPaint paint;
         paint.setDither(true);
-        paint.setFilterBitmap(true);
+        paint.setFilterLevel(SkPaint::kLow_FilterLevel);
 
         canvas->translate(SkIntToScalar(20), 0);
 
diff --git a/samplecode/SampleSlides.cpp b/samplecode/SampleSlides.cpp
index 98e4e72..3dba782 100644
--- a/samplecode/SampleSlides.cpp
+++ b/samplecode/SampleSlides.cpp
@@ -444,7 +444,7 @@
 
     SkPaint paint;
     paint.setDither(true);
-    paint.setFilterBitmap(true);
+    paint.setFilterLevel(SkPaint::kLow_FilterLevel);
 
     for (size_t i = 0; i < SK_ARRAY_COUNT(fRecs); i++) {
         canvas->save();
diff --git a/samplecode/SampleTextureDomain.cpp b/samplecode/SampleTextureDomain.cpp
index 154eaa9..16e7a16 100644
--- a/samplecode/SampleTextureDomain.cpp
+++ b/samplecode/SampleTextureDomain.cpp
@@ -48,7 +48,7 @@
         SkIRect srcRect;
         SkRect dstRect;
         SkPaint paint;
-        paint.setFilterBitmap(true);
+        paint.setFilterLevel(SkPaint::kLow_FilterLevel);
 
         // Test that bitmap draws from malloc-backed bitmaps respect
         // the constrained texture domain.
diff --git a/samplecode/SampleTiling.cpp b/samplecode/SampleTiling.cpp
index eb791c5..c35cf88 100644
--- a/samplecode/SampleTiling.cpp
+++ b/samplecode/SampleTiling.cpp
@@ -52,7 +52,7 @@
                   SkShader::TileMode tmx, SkShader::TileMode tmy) {
     SkShader* shader = SkShader::CreateBitmapShader(bm, tmx, tmy);
     paint->setShader(shader)->unref();
-    paint->setFilterBitmap(filter);
+    paint->setFilterLevel(filter ? SkPaint::kLow_FilterLevel : SkPaint::kNone_FilterLevel);
 }
 
 static const SkBitmap::Config gConfigs[] = {
diff --git a/samplecode/SampleVertices.cpp b/samplecode/SampleVertices.cpp
index 53db2ea..323c4b5 100644
--- a/samplecode/SampleVertices.cpp
+++ b/samplecode/SampleVertices.cpp
@@ -91,7 +91,7 @@
     virtual void onDrawContent(SkCanvas* canvas) {
         SkPaint paint;
         paint.setDither(true);
-        paint.setFilterBitmap(true);
+        paint.setFilterLevel(SkPaint::kLow_FilterLevel);
 
         for (size_t i = 0; i < SK_ARRAY_COUNT(fRecs); i++) {
             canvas->save();
