diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index e235431..30645a0 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -406,7 +406,7 @@
     SkBitmap bitmap;
     bitmap.installPixels(info, pixels, rowBytes);
     swap_rb_if_necessary(bitmap, dstColorType);
-    canvas->drawBitmap(bitmap, left, top);
+    canvas->drawImage(bitmap.asImage(), left, top);
 }
 
 // For codec srcs, we want the "draw" step to be a memcpy.  Any interesting color space or
@@ -2201,7 +2201,7 @@
     canvas.concat(upright);
     SkPaint paint;
     paint.setBlendMode(SkBlendMode::kSrc);
-    canvas.drawBitmap(*bitmap, 0, 0, &paint);
+    canvas.drawImage(bitmap->asImage(), 0, 0, SkSamplingOptions(), &paint);
 
     *bitmap = uprighted;
     return Result::Ok();
diff --git a/docs/examples/Alpha_Constants_a.cpp b/docs/examples/Alpha_Constants_a.cpp
index aa2c7a3..391d04b 100644
--- a/docs/examples/Alpha_Constants_a.cpp
+++ b/docs/examples/Alpha_Constants_a.cpp
@@ -31,8 +31,6 @@
             }
         }
     }
-    SkBitmap bitmap;
-    bitmap.installPixels(pixmap);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(SkImage::MakeRasterCopy(pixmap), 0, 0);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Alpha_Constants_b.cpp b/docs/examples/Alpha_Constants_b.cpp
index 34068d3..1e9191f 100644
--- a/docs/examples/Alpha_Constants_b.cpp
+++ b/docs/examples/Alpha_Constants_b.cpp
@@ -18,8 +18,6 @@
             }
         }
     }
-    SkBitmap bitmap;
-    bitmap.installPixels(pixmap);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(SkImage::MakeRasterCopy(pixmap), 0, 0);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Anti_Alias.cpp b/docs/examples/Anti_Alias.cpp
index 120ac60..4f92642 100644
--- a/docs/examples/Anti_Alias.cpp
+++ b/docs/examples/Anti_Alias.cpp
@@ -18,7 +18,7 @@
         canvas->drawLine(5, 5, 15, 30, paint);
         canvas->save();
         canvas->scale(10, 10);
-        canvas->drawBitmap(bitmap, antialias ? 12 : 0, 0);
+        canvas->drawImage(bitmap.asImage(), antialias ? 12 : 0, 0);
         canvas->restore();
         canvas->translate(15, 0);
     }
diff --git a/docs/examples/Bitmap_allocN32Pixels.cpp b/docs/examples/Bitmap_allocN32Pixels.cpp
index bf89e68..6bff77f 100644
--- a/docs/examples/Bitmap_allocN32Pixels.cpp
+++ b/docs/examples/Bitmap_allocN32Pixels.cpp
@@ -16,7 +16,7 @@
             uint32_t h = random.nextRangeU(4, 32);
             uint32_t cy = random.nextRangeU(0, 64 - h);
             bitmap.erase(color, SkIRect::MakeXYWH(cx, cy, w, h));
-            canvas->drawBitmap(bitmap, x, y);
+            canvas->drawImage(bitmap.asImage(), x, y);
         }
     }
 }
diff --git a/docs/examples/Bitmap_allocPixels.cpp b/docs/examples/Bitmap_allocPixels.cpp
index d1c585c..e9ba469 100644
--- a/docs/examples/Bitmap_allocPixels.cpp
+++ b/docs/examples/Bitmap_allocPixels.cpp
@@ -10,8 +10,8 @@
     SkCanvas offscreen(bitmap);
     offscreen.scale(.5f, .5f);
     for (int y : { 0, 64, 128, 192 } ) {
-        offscreen.drawBitmap(source, 0, -y);
-        canvas->drawBitmap(bitmap, 0, y);
+        offscreen.drawImage(source.asImage(), 0, -y);
+        canvas->drawImage(bitmap.asImage(), 0, y);
     }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_allocPixelsFlags.cpp b/docs/examples/Bitmap_allocPixelsFlags.cpp
index 78ffb99..027cadd 100644
--- a/docs/examples/Bitmap_allocPixelsFlags.cpp
+++ b/docs/examples/Bitmap_allocPixelsFlags.cpp
@@ -12,7 +12,7 @@
     SkFont font;
     offscreen.drawString("!@#$%", 0, 12, font, paint);
     canvas->scale(6, 6);
-    canvas->drawBitmap(bitmap, 0, 0);
-    canvas->drawBitmap(bitmap, 8, 8);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
+    canvas->drawImage(bitmap.asImage(), 8, 8);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_allocPixels_2.cpp b/docs/examples/Bitmap_allocPixels_2.cpp
deleted file mode 100644
index 5c425ef..0000000
--- a/docs/examples/Bitmap_allocPixels_2.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2019 Google LLC.
-// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
-#include "tools/fiddle/examples.h"
-// HASH=91f474a11a2112cd5c88c40a9015048d
-REG_FIDDLE(Bitmap_allocPixels_2, 256, 256, false, 4) {
-void draw(SkCanvas* canvas) {
-    SkBitmap bitmap;
-    bitmap.allocPixels(SkImageInfo::Make(64, 64, kGray_8_SkColorType, kOpaque_SkAlphaType));
-    SkCanvas offscreen(bitmap);
-    offscreen.scale(.5f, .5f);
-    for (int y : { 0, 64, 128, 192 } ) {
-        offscreen.drawBitmap(source, -y, -y);
-        canvas->drawBitmap(bitmap, y, y);
-    }
-}
-}  // END FIDDLE
diff --git a/docs/examples/Bitmap_allocPixels_3.cpp b/docs/examples/Bitmap_allocPixels_3.cpp
deleted file mode 100644
index 20607a4..0000000
--- a/docs/examples/Bitmap_allocPixels_3.cpp
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2019 Google LLC.
-// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
-#include "tools/fiddle/examples.h"
-// HASH=1219b38c788bf270fb20f8cd2d78cff8
-REG_FIDDLE(Bitmap_allocPixels_3, 256, 50, false, 0) {
-void draw(SkCanvas* canvas) {
-    uint8_t set1[5] = { 0xCA, 0xDA, 0xCA, 0xC9, 0xA3 };
-    uint8_t set2[5] = { 0xAC, 0xA8, 0x89, 0x47, 0x87 };
-    SkBitmap bitmap;
-    bitmap.installPixels(SkImageInfo::Make(5, 1, kGray_8_SkColorType, kOpaque_SkAlphaType), set1, 5);
-    canvas->scale(10, 50);
-    canvas->drawBitmap(bitmap, 0, 0);
-    bitmap.allocPixels();
-    bitmap.eraseColor(SK_ColorBLACK);
-    canvas->drawBitmap(bitmap, 8, 0);
-    bitmap.setPixels(set2);
-    canvas->drawBitmap(bitmap, 16, 0);
-}
-}  // END FIDDLE
diff --git a/docs/examples/Bitmap_allocPixels_4.cpp b/docs/examples/Bitmap_allocPixels_4.cpp
deleted file mode 100644
index e12e68e..0000000
--- a/docs/examples/Bitmap_allocPixels_4.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2019 Google LLC.
-// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
-#include "tools/fiddle/examples.h"
-// HASH=1b2800d23c9ea249b45c2c21a34b6d14
-REG_FIDDLE(Bitmap_allocPixels_4, 256, 32, false, 0) {
-class TinyAllocator : public SkBitmap::Allocator {
-public:
-    bool allocPixelRef(SkBitmap* bitmap) override {
-        const SkImageInfo& info = bitmap->info();
-        if (info.height() * info.minRowBytes() > sizeof(storage)) {
-            return false;
-        }
-        sk_sp<SkPixelRef> pr = sk_sp<SkPixelRef>(
-                new SkPixelRef(info.width(), info.height(), storage, info.minRowBytes()));
-        bitmap->setPixelRef(std::move(pr), 0, 0);
-        return true;
-    }
-    char storage[16];
-};
-
-void draw(SkCanvas* canvas) {
-   TinyAllocator tinyAllocator;
-   SkBitmap bitmap;
-   bitmap.setInfo(SkImageInfo::MakeN32(2, 2, kOpaque_SkAlphaType));
-   if (bitmap.tryAllocPixels(&tinyAllocator)) {
-       bitmap.eraseColor(0xff55aa33);
-       bitmap.erase(0xffaa3355, SkIRect::MakeXYWH(1, 1, 1, 1));
-       canvas->scale(16, 16);
-       canvas->drawBitmap(bitmap, 0, 0);
-   }
-}
-}  // END FIDDLE
diff --git a/docs/examples/Bitmap_bounds.cpp b/docs/examples/Bitmap_bounds.cpp
index 221b733..6edbf92 100644
--- a/docs/examples/Bitmap_bounds.cpp
+++ b/docs/examples/Bitmap_bounds.cpp
@@ -8,7 +8,7 @@
     SkIRect bounds = source.bounds();
     for (int x : { 0, bounds.width() } ) {
         for (int y : { 0, bounds.height() } ) {
-            canvas->drawBitmap(source, x, y);
+            canvas->drawImage(source.asImage(), x, y);
         }
     }
 }
diff --git a/docs/examples/Bitmap_erase.cpp b/docs/examples/Bitmap_erase.cpp
index 6af379e..faeba8b 100644
--- a/docs/examples/Bitmap_erase.cpp
+++ b/docs/examples/Bitmap_erase.cpp
@@ -11,7 +11,7 @@
     bitmap.erase(0x7f3fff7f, SkIRect::MakeXYWH(1, 0, 1, 1));
     bitmap.erase(0x7f1fbf5f, SkIRect::MakeXYWH(1, 1, 1, 1));
     canvas->scale(25, 25);
-    canvas->drawBitmap(bitmap, 0, 0);
-    canvas->drawBitmap(bitmap, .5f, .5f);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
+    canvas->drawImage(bitmap.asImage(), .5f, .5f);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_eraseARGB.cpp b/docs/examples/Bitmap_eraseARGB.cpp
index 4351c4a..327326d 100644
--- a/docs/examples/Bitmap_eraseARGB.cpp
+++ b/docs/examples/Bitmap_eraseARGB.cpp
@@ -8,7 +8,7 @@
     bitmap.allocPixels(SkImageInfo::MakeN32(1, 1, kPremul_SkAlphaType));
     bitmap.eraseARGB(0x7f, 0xff, 0x7f, 0x3f);
     canvas->scale(50, 50);
-    canvas->drawBitmap(bitmap, 0, 0);
-    canvas->drawBitmap(bitmap, .5f, .5f);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
+    canvas->drawImage(bitmap.asImage(), .5f, .5f);
 }
 }  // END FIDDLE
diff --git a/gm/emboss.cpp b/gm/emboss.cpp
index 04c99fd..32b9cf6 100644
--- a/gm/emboss.cpp
+++ b/gm/emboss.cpp
@@ -18,20 +18,18 @@
 #include "include/core/SkShader.h"
 #include "include/core/SkSize.h"
 #include "include/core/SkString.h"
+#include "include/core/SkSurface.h"
 #include "include/core/SkTypeface.h"
 #include "src/core/SkBlurMask.h"
 #include "src/effects/SkEmbossMaskFilter.h"
 
-static SkBitmap make_bm() {
-    SkBitmap bm;
-    bm.allocN32Pixels(100, 100);
+static sk_sp<SkImage> make_bm() {
+    auto surf = SkSurface::MakeRasterN32Premul(100, 100);
 
-    SkCanvas canvas(bm);
-    canvas.clear(0);
     SkPaint paint;
     paint.setAntiAlias(true);
-    canvas.drawCircle(50, 50, 50, paint);
-    return bm;
+    surf->getCanvas()->drawCircle(50, 50, 50, paint);
+    return surf->makeImageSnapshot();
 }
 
 class EmbossGM : public skiagm::GM {
@@ -50,21 +48,21 @@
 
     void onDraw(SkCanvas* canvas) override {
         SkPaint paint;
-        SkBitmap bm = make_bm();
-        canvas->drawBitmap(bm, 10, 10, &paint);
-        canvas->translate(bm.width() + SkIntToScalar(10), 0);
+        auto img = make_bm();
+        canvas->drawImage(img, 10, 10, &paint);
+        canvas->translate(img->width() + SkIntToScalar(10), 0);
 
         paint.setMaskFilter(SkEmbossMaskFilter::Make(
             SkBlurMask::ConvertRadiusToSigma(3),
             { { SK_Scalar1, SK_Scalar1, SK_Scalar1 }, 0, 128, 16*2 }));
-        canvas->drawBitmap(bm, 10, 10, &paint);
-        canvas->translate(bm.width() + SkIntToScalar(10), 0);
+        canvas->drawImage(img, 10, 10, &paint);
+        canvas->translate(img->width() + SkIntToScalar(10), 0);
 
         // this combination of emboss+colorfilter used to crash -- so we exercise it to
         // confirm that we have a fix.
         paint.setColorFilter(SkColorFilters::Blend(0xFFFF0000, SkBlendMode::kSrcATop));
-        canvas->drawBitmap(bm, 10, 10, &paint);
-        canvas->translate(bm.width() + SkIntToScalar(10), 0);
+        canvas->drawImage(img, 10, 10, &paint);
+        canvas->translate(img->width() + SkIntToScalar(10), 0);
 
         paint.setAntiAlias(true);
         paint.setStyle(SkPaint::kStroke_Style);
diff --git a/gm/image_pict.cpp b/gm/image_pict.cpp
index 75dcecf..d375b84 100644
--- a/gm/image_pict.cpp
+++ b/gm/image_pict.cpp
@@ -296,7 +296,7 @@
                                SkScalar x, SkScalar y) {
         SkBitmap bitmap;
         if (as_IB(image)->getROPixels(dContext, &bitmap)) {
-            canvas->drawBitmap(bitmap, x, y);
+            canvas->drawImage(bitmap.asImage(), x, y);
         } else {
             draw_placeholder(canvas, x, y, image->width(), image->height());
         }
diff --git a/gm/imagefiltersbase.cpp b/gm/imagefiltersbase.cpp
index 11923b4..12669d6 100644
--- a/gm/imagefiltersbase.cpp
+++ b/gm/imagefiltersbase.cpp
@@ -153,7 +153,7 @@
     SkCanvas c(bm);
     draw_path(&c, i, r, nullptr);
 
-    canvas->drawBitmap(bm, 0, 0, &paint);
+    canvas->drawImage(bm.asImage(), 0, 0, SkSamplingOptions(), &paint);
 }
 
 static void draw_patch(SkCanvas* canvas, SkImage*, const SkRect& r, sk_sp<SkImageFilter> imf) {
diff --git a/gm/matrixconvolution.cpp b/gm/matrixconvolution.cpp
index 582392e..a150057 100644
--- a/gm/matrixconvolution.cpp
+++ b/gm/matrixconvolution.cpp
@@ -52,9 +52,7 @@
 
     void makeBitmap() {
         // Draw our bitmap in N32, so legacy devices get "premul" values they understand
-        fBitmap.allocN32Pixels(80, 80);
-        SkCanvas canvas(fBitmap);
-        canvas.clear(0x00000000);
+        auto surf = SkSurface::MakeRasterN32Premul(80, 80);
         SkPaint paint;
         paint.setColor(0xFFFFFFFF);
         SkPoint pts[2] = { {0, 0},
@@ -63,7 +61,8 @@
         paint.setShader(SkGradientShader::MakeLinear(
             pts, fColors, pos, 2, SkTileMode::kClamp));
         SkFont font(ToolUtils::create_portable_typeface(), 180.0f);
-        canvas.drawString("e", -10.0f, 80.0f, font, paint);
+        surf->getCanvas()->drawString("e", -10.0f, 80.0f, font, paint);
+        fImage = surf->makeImageSnapshot();
     }
 
     SkISize onISize() override {
@@ -98,13 +97,13 @@
         paint.setImageFilter(this->makeFilter(kernelOffset, tileMode, convolveAlpha, cropRect));
         canvas->save();
         canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
-        const SkRect layerBounds = SkRect::MakeIWH(fBitmap.width(), fBitmap.height());
+        const SkRect layerBounds = SkRect::Make(fImage->bounds());
         canvas->clipRect(layerBounds);
         // This GM is, in part, intended to display the wrapping behavior of the
         // matrix image filter. The only (rational) way to achieve that for repeat mode
         // is to create a tight layer.
         canvas->saveLayer(layerBounds, &paint);
-            canvas->drawBitmap(fBitmap, 0, 0, nullptr);
+            canvas->drawImage(fImage, 0, 0);
         canvas->restore();
         canvas->restore();
     }
@@ -116,7 +115,7 @@
     void onDraw(SkCanvas* canvas) override {
         canvas->clear(SK_ColorBLACK);
         SkIPoint kernelOffset = SkIPoint::Make(1, 0);
-        SkIRect rect = fBitmap.bounds();
+        SkIRect rect = fImage->bounds();
         for (int x = 10; x < 310; x += 100) {
             this->draw(canvas, x, 10, kernelOffset, SkTileMode::kClamp, true, &rect);
             this->draw(canvas, x, 110, kernelOffset, SkTileMode::kDecal, true, &rect);
@@ -135,7 +134,7 @@
     }
 
 private:
-    SkBitmap fBitmap;
+    sk_sp<SkImage> fImage;
     SkColor fColors[2];
     const char* fNameSuffix;
     KernelFixture fKernelFixture;
diff --git a/gm/rasterhandleallocator.cpp b/gm/rasterhandleallocator.cpp
index 3e3b597..340b033 100644
--- a/gm/rasterhandleallocator.cpp
+++ b/gm/rasterhandleallocator.cpp
@@ -303,7 +303,5 @@
 
     SkPixmap pm;
     nativeCanvas->peekPixels(&pm);
-    SkBitmap bm;
-    bm.installPixels(pm);
-    canvas->drawBitmap(bm, 280, 0, nullptr);
+    canvas->drawImage(SkImage::MakeRasterCopy(pm), 280, 0);
 }
diff --git a/gm/recordopts.cpp b/gm/recordopts.cpp
index c427a86..5a873e7 100644
--- a/gm/recordopts.cpp
+++ b/gm/recordopts.cpp
@@ -96,7 +96,7 @@
     canvas->saveLayer(&targetRect, &layerPaint);
         SkPaint drawPaint;
         installDetector(&drawPaint);
-        canvas->drawBitmap(bitmap, SkIntToScalar(0), SkIntToScalar(0), &drawPaint);
+        canvas->drawImage(bitmap.asImage(), 0, 0, SkSamplingOptions(), &drawPaint);
     canvas->restore();
 }
 
diff --git a/gm/runtimeintrinsics.cpp b/gm/runtimeintrinsics.cpp
index 2e1f7c8..8127941 100644
--- a/gm/runtimeintrinsics.cpp
+++ b/gm/runtimeintrinsics.cpp
@@ -73,7 +73,7 @@
     bitmap.allocPixels(info);
     surface->readPixels(bitmap, 0, 0);
 
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     return bitmap;
 }
 
diff --git a/gm/wacky_yuv_formats.cpp b/gm/wacky_yuv_formats.cpp
index 5222459..d87b628 100644
--- a/gm/wacky_yuv_formats.cpp
+++ b/gm/wacky_yuv_formats.cpp
@@ -934,7 +934,8 @@
 
                 draw_col_label(canvas, dstRect.fLeft + cellWidth / 2, cs, opaque);
 
-                canvas->drawBitmapRect(fOriginalBMs[opaque], srcRect, dstRect, nullptr, constraint);
+                canvas->drawImageRect(fOriginalBMs[opaque].asImage(), srcRect, dstRect,
+                                      SkSamplingOptions(), nullptr, constraint);
                 dstRect.offset(0.f, cellHeight + kPad);
 
                 for (int format = kP016_YUVFormat; format <= kLast_YUVFormat; ++format) {
@@ -1126,7 +1127,7 @@
                     SkBitmap readBack;
                     readBack.allocPixels(yuv->imageInfo());
                     SkAssertResult(yuv->readPixels(dContext, readBack.pixmap(), 0, 0));
-                    canvas->drawBitmap(readBack, x, y);
+                    canvas->drawImage(readBack.asImage(), x, y);
                 }
                 x += kTileWidthHeight + kPad;
             }
diff --git a/tests/PictureTest.cpp b/tests/PictureTest.cpp
index a3249a6..dab0144 100644
--- a/tests/PictureTest.cpp
+++ b/tests/PictureTest.cpp
@@ -633,8 +633,8 @@
     canvas->drawColor(0);
 
     canvas->saveLayer(nullptr, &semiTransparent);
-    canvas->drawBitmap(blueBM, 25, 25);
-    canvas->drawBitmap(redBM, 50, 50);
+    canvas->drawImage(blueBM.asImage(), 25, 25);
+    canvas->drawImage(redBM.asImage(), 50, 50);
     canvas->restore();
 
     sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture());
@@ -716,8 +716,8 @@
         // place it inside local braces.
         SkPictureRecorder rec;
         SkCanvas* canvas = rec.beginRecording(1920, 1200);
-            canvas->drawBitmap(mut, 0, 0);
-            canvas->drawBitmap(immut, 800, 600);
+            canvas->drawImage(mut.asImage(), 0, 0);
+            canvas->drawImage(immut.asImage(), 800, 600);
         pic = rec.finishRecordingAsPicture();
     }
 
diff --git a/tests/QuickRejectTest.cpp b/tests/QuickRejectTest.cpp
index c637c72..13e3d1e 100644
--- a/tests/QuickRejectTest.cpp
+++ b/tests/QuickRejectTest.cpp
@@ -23,13 +23,12 @@
     dst.eraseColor(SK_ColorTRANSPARENT);
 
     SkCanvas canvas(dst);
-    SkPaint  paint;
 
     // we are initially transparent
     REPORTER_ASSERT(reporter, 0 == *dst.getAddr32(5, 5));
 
     // we see the bitmap drawn
-    canvas.drawBitmap(src, 0, 0, &paint);
+    canvas.drawImage(src.asImage(), 0, 0);
     REPORTER_ASSERT(reporter, 0xFFFFFFFF == *dst.getAddr32(5, 5));
 
     // reverify we are clear again
@@ -37,7 +36,7 @@
     REPORTER_ASSERT(reporter, 0 == *dst.getAddr32(5, 5));
 
     // if the bitmap is clipped out, we don't draw it
-    canvas.drawBitmap(src, SkIntToScalar(-10), 0, &paint);
+    canvas.drawImage(src.asImage(), SkIntToScalar(-10), 0);
     REPORTER_ASSERT(reporter, 0 == *dst.getAddr32(5, 5));
 }
 
diff --git a/tests/ReadPixelsTest.cpp b/tests/ReadPixelsTest.cpp
index b5ecc39..3787a41 100644
--- a/tests/ReadPixelsTest.cpp
+++ b/tests/ReadPixelsTest.cpp
@@ -91,7 +91,7 @@
     return SkPackARGB32(a, r, g, b);
 }
 
-static SkBitmap make_src_bitmap() {
+static sk_sp<SkImage> make_src_image() {
     static SkBitmap bmp;
     if (bmp.isNull()) {
         bmp.allocN32Pixels(DEV_W, DEV_H);
@@ -102,8 +102,9 @@
                 *pixel = get_src_color(x, y);
             }
         }
+        bmp.setImmutable();
     }
-    return bmp;
+    return bmp.asImage();
 }
 
 static void fill_src_canvas(SkCanvas* canvas) {
@@ -112,7 +113,7 @@
     canvas->clipRect(DEV_RECT_S, SkClipOp::kIntersect);
     SkPaint paint;
     paint.setBlendMode(SkBlendMode::kSrc);
-    canvas->drawBitmap(make_src_bitmap(), 0, 0, &paint);
+    canvas->drawImage(make_src_image(), 0, 0, SkSamplingOptions(), &paint);
     canvas->restore();
 }
 
diff --git a/tests/RecordingXfermodeTest.cpp b/tests/RecordingXfermodeTest.cpp
index 16e63ea..9dad24e 100644
--- a/tests/RecordingXfermodeTest.cpp
+++ b/tests/RecordingXfermodeTest.cpp
@@ -13,6 +13,7 @@
 #include "include/core/SkPictureRecorder.h"
 #include "include/core/SkStream.h"
 #include "include/core/SkString.h"
+#include "include/core/SkSurface.h"
 #include "src/core/SkBlendModePriv.h"
 
 #include <cstring>
@@ -27,12 +28,12 @@
 class Drawer {
  public:
     explicit Drawer() : fImageInfo(SkImageInfo::MakeN32Premul(200, 100)) {
-        fCircleBM.allocPixels(SkImageInfo::MakeN32Premul(100, 100));
-        SkCanvas canvas(fCircleBM);
-        canvas.clear(0xffffffff);
+        auto surf = SkSurface::MakeRasterN32Premul(100, 100);
+        surf->getCanvas()->clear(0xffffffff);
         SkPaint circlePaint;
         circlePaint.setColor(0xff000000);
-        canvas.drawCircle(50, 50, 50, circlePaint);
+        surf->getCanvas()->drawCircle(50, 50, 50, circlePaint);
+        fCircleImage = surf->makeImageSnapshot();
     }
 
     const SkImageInfo& imageInfo() const { return fImageInfo; }
@@ -56,14 +57,15 @@
         canvas->saveLayer(nullptr, &blackPaint);
             canvas->drawRect(canvasRect, greenPaint);
             canvas->saveLayer(nullptr, &layerPaint);
-                canvas->drawBitmapRect(fCircleBM, SkRect::MakeXYWH(20,20,60,60), &blackPaint);
+                canvas->drawImageRect(fCircleImage, SkRect::MakeXYWH(20,20,60,60),
+                                      SkSamplingOptions(), &blackPaint);
             canvas->restore();
         canvas->restore();
     }
 
  private:
     const SkImageInfo fImageInfo;
-    SkBitmap fCircleBM;
+    sk_sp<SkImage> fCircleImage;
 };
 
 class RecordingStrategy {
diff --git a/tests/ResourceCacheTest.cpp b/tests/ResourceCacheTest.cpp
index f79a1ba..23d46f3 100644
--- a/tests/ResourceCacheTest.cpp
+++ b/tests/ResourceCacheTest.cpp
@@ -59,7 +59,7 @@
     readback.allocN32Pixels(size.width(), size.height());
 
     for (int i = 0; i < 100; ++i) {
-        canvas->drawBitmap(src, 0, 0);
+        canvas->drawImage(src.asImage(), 0, 0);
         surface->readPixels(readback, 0, 0);
 
         // "modify" the src texture
diff --git a/tests/SerializationTest.cpp b/tests/SerializationTest.cpp
index e13d3eb..fa516c1 100644
--- a/tests/SerializationTest.cpp
+++ b/tests/SerializationTest.cpp
@@ -294,7 +294,7 @@
         SkPaint paint;
         paint.setImageFilter(deserializedFilter);
         canvas.clipRect(SkRect::MakeXYWH(0, 0, SkIntToScalar(24), SkIntToScalar(24)));
-        canvas.drawBitmap(bitmap, 0, 0, &paint);
+        canvas.drawImage(bitmap.asImage(), 0, 0, &paint);
     }
 }
 
@@ -475,7 +475,8 @@
     bitmap->allocN32Pixels(kBitmapSize, kBitmapSize);
 }
 
-static void make_checkerboard_bitmap(SkBitmap& bitmap) {
+static sk_sp<SkImage> make_checkerboard_image() {
+    SkBitmap bitmap;
     setup_bitmap_for_canvas(&bitmap);
 
     SkCanvas canvas(bitmap);
@@ -497,20 +498,17 @@
             canvas.restore();
         }
     }
+    return bitmap.asImage();
 }
 
 static void draw_something(SkCanvas* canvas) {
-    SkPaint paint;
-    SkBitmap bitmap;
-    make_checkerboard_bitmap(bitmap);
-
     canvas->save();
     canvas->scale(0.5f, 0.5f);
-    canvas->drawBitmap(bitmap, 0, 0, nullptr);
+    canvas->drawImage(make_checkerboard_image(), 0, 0);
     canvas->restore();
 
+    SkPaint paint;
     paint.setAntiAlias(true);
-
     paint.setColor(SK_ColorRED);
     canvas->drawCircle(SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/3), paint);
     paint.setColor(SK_ColorBLACK);
diff --git a/tests/Skbug6653.cpp b/tests/Skbug6653.cpp
index 12cb629..769c177 100644
--- a/tests/Skbug6653.cpp
+++ b/tests/Skbug6653.cpp
@@ -65,8 +65,7 @@
 
         auto s3 = make_surface(dContext);
         s3->getCanvas()->clear(SK_ColorBLUE);
-        SkBitmap b3 = read_pixels(s3, SK_ColorBLACK);
-        s0->getCanvas()->drawBitmap(b3, 0, 0);
+        s0->getCanvas()->drawImage(read_pixels(s3, SK_ColorBLACK).asImage(), 0, 0);
         s3 = nullptr;
 
         auto s4 = make_surface(dContext);
diff --git a/tests/SurfaceTest.cpp b/tests/SurfaceTest.cpp
index 27dfe0e..f99dc60 100644
--- a/tests/SurfaceTest.cpp
+++ b/tests/SurfaceTest.cpp
@@ -422,8 +422,8 @@
     EXPECT_COPY_ON_WRITE(drawRect(testRect, testPaint))
     EXPECT_COPY_ON_WRITE(drawRRect(testRRect, testPaint))
     EXPECT_COPY_ON_WRITE(drawPath(testPath, testPaint))
-    EXPECT_COPY_ON_WRITE(drawBitmap(testBitmap, 0, 0))
-    EXPECT_COPY_ON_WRITE(drawBitmapRect(testBitmap, testRect, nullptr))
+    EXPECT_COPY_ON_WRITE(drawImage(testBitmap.asImage(), 0, 0))
+    EXPECT_COPY_ON_WRITE(drawImageRect(testBitmap.asImage(), testRect, SkSamplingOptions()))
     EXPECT_COPY_ON_WRITE(drawString(testText, 0, 1, SkFont(), testPaint))
 }
 DEF_TEST(SurfaceCopyOnWrite, reporter) {
diff --git a/tools/fiddle/all_examples.cpp b/tools/fiddle/all_examples.cpp
index 6bcbea1..350b355 100644
--- a/tools/fiddle/all_examples.cpp
+++ b/tools/fiddle/all_examples.cpp
@@ -15,9 +15,6 @@
 #include "../../docs/examples/Bitmap_allocN32Pixels.cpp"
 #include "../../docs/examples/Bitmap_allocPixels.cpp"
 #include "../../docs/examples/Bitmap_allocPixelsFlags.cpp"
-#include "../../docs/examples/Bitmap_allocPixels_2.cpp"
-#include "../../docs/examples/Bitmap_allocPixels_3.cpp"
-#include "../../docs/examples/Bitmap_allocPixels_4.cpp"
 #include "../../docs/examples/Bitmap_bounds.cpp"
 #include "../../docs/examples/Bitmap_bytesPerPixel.cpp"
 #include "../../docs/examples/Bitmap_colorSpace.cpp"
