diff --git a/docs/examples/Bitmap_eraseColor.cpp b/docs/examples/Bitmap_eraseColor.cpp
index 3f46b1b..8e90534 100644
--- a/docs/examples/Bitmap_eraseColor.cpp
+++ b/docs/examples/Bitmap_eraseColor.cpp
@@ -8,6 +8,6 @@
     bitmap.allocPixels(SkImageInfo::MakeN32(1, 1, kOpaque_SkAlphaType));
     bitmap.eraseColor(SK_ColorRED);
     canvas->scale(16, 16);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_extractAlpha.cpp b/docs/examples/Bitmap_extractAlpha.cpp
index c5e7ecd..4afda81 100644
--- a/docs/examples/Bitmap_extractAlpha.cpp
+++ b/docs/examples/Bitmap_extractAlpha.cpp
@@ -17,7 +17,7 @@
     offscreen.flush();
     bitmap.extractAlpha(&alpha);
     paint.setColor(SK_ColorRED);
-    canvas->drawBitmap(bitmap, 0, 0, &paint);
-    canvas->drawBitmap(alpha, 100, 0, &paint);
+    canvas->drawImage(bitmap.asImage(), 0, 0, &paint);
+    canvas->drawImage(alpha.asImage(), 100, 0, &paint);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_extractAlpha_2.cpp b/docs/examples/Bitmap_extractAlpha_2.cpp
index 1f8a228..4ec366f 100644
--- a/docs/examples/Bitmap_extractAlpha_2.cpp
+++ b/docs/examples/Bitmap_extractAlpha_2.cpp
@@ -23,7 +23,7 @@
     SkIPoint offset;
     bitmap.extractAlpha(&alpha, &paint, &offset);
     paint.setColor(SK_ColorRED);
-    canvas->drawBitmap(bitmap, 0, -offset.fY, &paint);
-    canvas->drawBitmap(alpha, 100 + offset.fX, 0, &paint);
+    canvas->drawImage(bitmap.asImage(), 0, -offset.fY, &paint);
+    canvas->drawImage(alpha.asImage(), 100 + offset.fX, 0, &paint);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_extractAlpha_3.cpp b/docs/examples/Bitmap_extractAlpha_3.cpp
index 676334d..e5fcdf4 100644
--- a/docs/examples/Bitmap_extractAlpha_3.cpp
+++ b/docs/examples/Bitmap_extractAlpha_3.cpp
@@ -19,7 +19,7 @@
     SkIPoint offset;
     bitmap.extractAlpha(&alpha, &paint, nullptr, &offset);
     paint.setColor(SK_ColorRED);
-    canvas->drawBitmap(bitmap, 0, -offset.fY, &paint);
-    canvas->drawBitmap(alpha, 100 + offset.fX, 0, &paint);
+    canvas->drawImage(bitmap.asImage(), 0, -offset.fY, &paint);
+    canvas->drawImage(alpha.asImage(), 100 + offset.fX, 0, &paint);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_getBounds.cpp b/docs/examples/Bitmap_getBounds.cpp
index 11a5b33..54a0487 100644
--- a/docs/examples/Bitmap_getBounds.cpp
+++ b/docs/examples/Bitmap_getBounds.cpp
@@ -11,6 +11,6 @@
     paint.setColor(SK_ColorGRAY);
     canvas->scale(.25f, .25f);
     canvas->drawRect(bounds, paint);
-    canvas->drawBitmap(source, 40, 40);
+    canvas->drawImage(source.asImage(), 40, 40);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_getBounds_2.cpp b/docs/examples/Bitmap_getBounds_2.cpp
index 7b969ca..429dbab 100644
--- a/docs/examples/Bitmap_getBounds_2.cpp
+++ b/docs/examples/Bitmap_getBounds_2.cpp
@@ -10,6 +10,6 @@
     SkBitmap bitmap;
     source.extractSubset(&bitmap, bounds);
     canvas->scale(.5f, .5f);
-    canvas->drawBitmap(bitmap, 10, 10);
+    canvas->drawImage(bitmap.asImage(), 10, 10);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_installPixels_2.cpp b/docs/examples/Bitmap_installPixels_2.cpp
index 1c113e0..ea5fc64 100644
--- a/docs/examples/Bitmap_installPixels_2.cpp
+++ b/docs/examples/Bitmap_installPixels_2.cpp
@@ -15,7 +15,7 @@
    SkImageInfo info = SkImageInfo::MakeN32(width, height, kUnpremul_SkAlphaType);
    if (bitmap.installPixels(info, pixels, info.minRowBytes())) {
        canvas->scale(32, 32);
-       canvas->drawBitmap(bitmap, 0, 0);
+       canvas->drawImage(bitmap.asImage(), 0, 0);
    }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_installPixels_3.cpp b/docs/examples/Bitmap_installPixels_3.cpp
index 30e3003..404c10e 100644
--- a/docs/examples/Bitmap_installPixels_3.cpp
+++ b/docs/examples/Bitmap_installPixels_3.cpp
@@ -14,9 +14,9 @@
     SkBitmap bitmap;
     bitmap.installPixels(pixmap);
     canvas->scale(10, 10);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     *pixmap.writable_addr8(2, 2) = 0xFF;
     bitmap.installPixels(pixmap);
-    canvas->drawBitmap(bitmap, 10, 0);
+    canvas->drawImage(bitmap.asImage(), 10, 0);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_notifyPixelsChanged.cpp b/docs/examples/Bitmap_notifyPixelsChanged.cpp
index b3e6ea5..bbe9b53 100644
--- a/docs/examples/Bitmap_notifyPixelsChanged.cpp
+++ b/docs/examples/Bitmap_notifyPixelsChanged.cpp
@@ -9,11 +9,11 @@
     bitmap.allocPixels();
     bitmap.eraseColor(SK_ColorRED);
     canvas->scale(16, 16);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     *(SkPMColor*) bitmap.getPixels() = SkPreMultiplyColor(SK_ColorBLUE);
-    canvas->drawBitmap(bitmap, 2, 0);
+    canvas->drawImage(bitmap.asImage(), 2, 0);
     bitmap.notifyPixelsChanged();
     *(SkPMColor*) bitmap.getPixels() = SkPreMultiplyColor(SK_ColorGREEN);
-    canvas->drawBitmap(bitmap, 4, 0);
+    canvas->drawImage(bitmap.asImage(), 4, 0);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_readPixels.cpp b/docs/examples/Bitmap_readPixels.cpp
index e13df72..c5c121e 100644
--- a/docs/examples/Bitmap_readPixels.cpp
+++ b/docs/examples/Bitmap_readPixels.cpp
@@ -16,13 +16,13 @@
     bitmap.allocPixels(srcInfo);
     SkCanvas srcCanvas(bitmap);
     srcCanvas.drawRect(SkRect::MakeWH(width, height), paint);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     SkImageInfo dstInfo = srcInfo.makeColorType(kARGB_4444_SkColorType);
     std::vector<int16_t> dstPixels;
     dstPixels.resize(height * width);
     bitmap.readPixels(dstInfo, &dstPixels.front(), width * 2, 0, 0);
     SkPixmap dstPixmap(dstInfo, &dstPixels.front(), width * 2);
     bitmap.installPixels(dstPixmap);
-    canvas->drawBitmap(bitmap, 0, 64);
+    canvas->drawImage(bitmap.asImage(), 0, 64);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_readPixels_2.cpp b/docs/examples/Bitmap_readPixels_2.cpp
index 72dc28b..c38a270 100644
--- a/docs/examples/Bitmap_readPixels_2.cpp
+++ b/docs/examples/Bitmap_readPixels_2.cpp
@@ -18,6 +18,6 @@
     SkBitmap bitmap;
     bitmap.installPixels(SkImageInfo::MakeN32Premul(source.width(), source.height()),
                              &srcPixels.front(), source.rowBytes());
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_readPixels_3.cpp b/docs/examples/Bitmap_readPixels_3.cpp
index 85d1ecb..bcdd8cb 100644
--- a/docs/examples/Bitmap_readPixels_3.cpp
+++ b/docs/examples/Bitmap_readPixels_3.cpp
@@ -16,6 +16,6 @@
     SkBitmap bitmap;
     bitmap.installPixels(SkImageInfo::MakeN32Premul(source.width() * 2, source.height()),
                          &srcPixels.front(), source.rowBytes() * 2);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_readyToDraw.cpp b/docs/examples/Bitmap_readyToDraw.cpp
index e9337f0..2eaa602 100644
--- a/docs/examples/Bitmap_readyToDraw.cpp
+++ b/docs/examples/Bitmap_readyToDraw.cpp
@@ -5,7 +5,7 @@
 REG_FIDDLE(Bitmap_readyToDraw, 256, 160, false, 5) {
 void draw(SkCanvas* canvas) {
     if (source.readyToDraw()) {
-        canvas->drawBitmap(source, 10, 10);
+        canvas->drawImage(source.asImage(), 10, 10);
     }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_setInfo.cpp b/docs/examples/Bitmap_setInfo.cpp
index 1578cf1..05c1f17 100644
--- a/docs/examples/Bitmap_setInfo.cpp
+++ b/docs/examples/Bitmap_setInfo.cpp
@@ -13,6 +13,6 @@
     SkFont font;
     offscreen.drawString("!@#$%", 0, 12, font, paint);
     canvas->scale(6, 6);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_setPixelRef.cpp b/docs/examples/Bitmap_setPixelRef.cpp
index af88e4b..a92875a 100644
--- a/docs/examples/Bitmap_setPixelRef.cpp
+++ b/docs/examples/Bitmap_setPixelRef.cpp
@@ -8,6 +8,6 @@
     bitmap.setInfo(SkImageInfo::Make(source.width() - 5, source.height() - 5,
                    kGray_8_SkColorType, kOpaque_SkAlphaType), source.rowBytes());
     bitmap.setPixelRef(sk_ref_sp(source.pixelRef()), 5, 5);
-    canvas->drawBitmap(bitmap, 10, 10);
+    canvas->drawImage(bitmap.asImage(), 10, 10);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_setPixels.cpp b/docs/examples/Bitmap_setPixels.cpp
index 450b112..210c4be 100644
--- a/docs/examples/Bitmap_setPixels.cpp
+++ b/docs/examples/Bitmap_setPixels.cpp
@@ -9,8 +9,8 @@
     SkBitmap bitmap;
     bitmap.installPixels(SkImageInfo::Make(5, 1, kGray_8_SkColorType, kOpaque_SkAlphaType), set1, 5);
     canvas->scale(10, 50);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     bitmap.setPixels(set2);
-    canvas->drawBitmap(bitmap, 10, 0);
+    canvas->drawImage(bitmap.asImage(), 10, 0);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_tryAllocN32Pixels.cpp b/docs/examples/Bitmap_tryAllocN32Pixels.cpp
index 6885333..ac57e64 100644
--- a/docs/examples/Bitmap_tryAllocN32Pixels.cpp
+++ b/docs/examples/Bitmap_tryAllocN32Pixels.cpp
@@ -10,9 +10,9 @@
         bitmap.erase(0x7f3f7fff, SkIRect::MakeWH(50, 30));
         bitmap.erase(0x3f7fff3f, SkIRect::MakeXYWH(20, 10, 50, 30));
         bitmap.erase(0x5fff3f7f, SkIRect::MakeXYWH(40, 20, 50, 30));
-        canvas->drawBitmap(bitmap, 0, 0);
+        canvas->drawImage(bitmap.asImage(), 0, 0);
         for (int x : { 0, 30, 60, 90 } ) {
-            canvas->drawBitmap(bitmap, x, 70);
+            canvas->drawImage(bitmap.asImage(), x, 70);
         }
     }
 }
diff --git a/docs/examples/Bitmap_tryAllocPixels.cpp b/docs/examples/Bitmap_tryAllocPixels.cpp
index 81113a5..b2e08ce 100644
--- a/docs/examples/Bitmap_tryAllocPixels.cpp
+++ b/docs/examples/Bitmap_tryAllocPixels.cpp
@@ -10,8 +10,8 @@
         SkCanvas offscreen(bitmap);
         offscreen.scale(.5f, .5f);
         for (int x : { 0, 64, 128, 192 } ) {
-            offscreen.drawBitmap(source, -x, 0);
-            canvas->drawBitmap(bitmap, x, 0);
+            offscreen.drawImage(source.asImage(), -x, 0);
+            canvas->drawImage(bitmap.asImage(), x, 0);
         }
     }
 }
diff --git a/docs/examples/Bitmap_tryAllocPixels_2.cpp b/docs/examples/Bitmap_tryAllocPixels_2.cpp
index ad3d107..c8ee8bd 100644
--- a/docs/examples/Bitmap_tryAllocPixels_2.cpp
+++ b/docs/examples/Bitmap_tryAllocPixels_2.cpp
@@ -9,8 +9,8 @@
         SkCanvas offscreen(bitmap);
         offscreen.scale(.25f, .5f);
         for (int y : { 0, 64, 128, 192 } ) {
-            offscreen.drawBitmap(source, -y, -y);
-            canvas->drawBitmap(bitmap, y, y);
+            offscreen.drawImage(source.asImage(), -y, -y);
+            canvas->drawImage(bitmap.asImage(), y, y);
         }
     }
 }
diff --git a/docs/examples/Bitmap_tryAllocPixels_3.cpp b/docs/examples/Bitmap_tryAllocPixels_3.cpp
index d8fefe8..7e8dc0a 100644
--- a/docs/examples/Bitmap_tryAllocPixels_3.cpp
+++ b/docs/examples/Bitmap_tryAllocPixels_3.cpp
@@ -8,12 +8,12 @@
     SkBitmap bitmap;
     bitmap.installPixels(SkImageInfo::Make(5, 1, kGray_8_SkColorType, kOpaque_SkAlphaType), set1, 5);
     canvas->scale(10, 50);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     if (bitmap.tryAllocPixels()) {
         bitmap.eraseColor(SK_ColorBLACK);
-        canvas->drawBitmap(bitmap, 8, 0);
+        canvas->drawImage(bitmap.asImage(), 8, 0);
         bitmap.setPixels(set1);
-        canvas->drawBitmap(bitmap, 16, 0);
+        canvas->drawImage(bitmap.asImage(), 16, 0);
     }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_tryAllocPixels_4.cpp b/docs/examples/Bitmap_tryAllocPixels_4.cpp
index ec7f31e..7e17f2c 100644
--- a/docs/examples/Bitmap_tryAllocPixels_4.cpp
+++ b/docs/examples/Bitmap_tryAllocPixels_4.cpp
@@ -39,7 +39,7 @@
    bitmap.setInfo(SkImageInfo::MakeN32(width, height, kOpaque_SkAlphaType));
    if (bitmap.tryAllocPixels(&largeAllocator)) {
        bitmap.eraseColor(0xff55aa33);
-       canvas->drawBitmap(bitmap, 0, 0);
+       canvas->drawImage(bitmap.asImage(), 0, 0);
    }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Bitmap_writePixels.cpp b/docs/examples/Bitmap_writePixels.cpp
index be77bf2..e41af69 100644
--- a/docs/examples/Bitmap_writePixels.cpp
+++ b/docs/examples/Bitmap_writePixels.cpp
@@ -19,7 +19,7 @@
             SkBitmap bitmap;
             bitmap.allocPixels(SkImageInfo::MakeN32Premul(width, height));
             bitmap.writePixels(pixmap, -y * width, -x * height);
-            canvas->drawBitmap(bitmap, x * width, y * height);
+            canvas->drawImage(bitmap.asImage(), x * width, y * height);
         }
     }
 }
diff --git a/docs/examples/Bitmap_writePixels_2.cpp b/docs/examples/Bitmap_writePixels_2.cpp
index fde7ef6..6e049ff 100644
--- a/docs/examples/Bitmap_writePixels_2.cpp
+++ b/docs/examples/Bitmap_writePixels_2.cpp
@@ -11,6 +11,6 @@
     SkPixmap src(SkImageInfo::MakeN32Premul(1, 1), &color, 4);
     bitmap.writePixels(src);
     canvas->scale(40, 40);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Canvas_SrcRectConstraint.cpp b/docs/examples/Canvas_SrcRectConstraint.cpp
index 69b07ce..d730e8d 100644
--- a/docs/examples/Canvas_SrcRectConstraint.cpp
+++ b/docs/examples/Canvas_SrcRectConstraint.cpp
@@ -13,16 +13,15 @@
     checkRed.writePixels(
             SkImageInfo::MakeN32Premul(2, 2), (void*) checkers, sizeof(checkers[0]), 1, 1);
     canvas->scale(16, 16);
-    canvas->drawBitmap(redBorder, 0, 0, nullptr);
+    canvas->drawImage(redBorder.asImage(), 0, 0);
     canvas->resetMatrix();
     sk_sp<SkImage> image = redBorder.asImage();
-    SkPaint lowPaint;
-    lowPaint.setFilterQuality(kLow_SkFilterQuality);
     for (auto constraint : { SkCanvas::kStrict_SrcRectConstraint,
                              SkCanvas::kFast_SrcRectConstraint } ) {
         canvas->translate(80, 0);
         canvas->drawImageRect(image.get(), SkRect::MakeLTRB(1, 1, 3, 3),
-                SkRect::MakeLTRB(16, 16, 48, 48), &lowPaint, constraint);
+                SkRect::MakeLTRB(16, 16, 48, 48),
+                SkSamplingOptions(SkFilterMode::kLinear), nullptr, constraint);
     }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Canvas_destructor.cpp b/docs/examples/Canvas_destructor.cpp
index 9a910f3..98c2b48 100644
--- a/docs/examples/Canvas_destructor.cpp
+++ b/docs/examples/Canvas_destructor.cpp
@@ -16,6 +16,6 @@
         offscreen.clear(SK_ColorWHITE);
         offscreen.drawString("DEF", 20, 160, font, paint);
     }
-    canvas->drawBitmap(bitmap, 0, 0, nullptr);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Canvas_drawBitmap.cpp b/docs/examples/Canvas_drawBitmap.cpp
index 11e852f..f1c8bba 100644
--- a/docs/examples/Canvas_drawBitmap.cpp
+++ b/docs/examples/Canvas_drawBitmap.cpp
@@ -19,7 +19,7 @@
     canvas->scale(4, 4);
     for (auto color : { SK_ColorRED, SK_ColorBLUE, 0xFF007F00} ) {
         paint.setColor(color);
-        canvas->drawBitmap(bitmap, 0, 0, &paint);
+        canvas->drawImage(bitmap.asImage(), 0, 0, SkSamplingOptions(), &paint);
         canvas->translate(12, 0);
     }
 }
diff --git a/docs/examples/Canvas_drawBitmapRect.cpp b/docs/examples/Canvas_drawBitmapRect.cpp
index 83a3300..10238cc 100644
--- a/docs/examples/Canvas_drawBitmapRect.cpp
+++ b/docs/examples/Canvas_drawBitmapRect.cpp
@@ -19,7 +19,10 @@
     paint.setMaskFilter(SkMaskFilter::MakeBlur(kSolid_SkBlurStyle, 6));
     for (auto color : { SK_ColorRED, SK_ColorBLUE, 0xFF007F00} ) {
         paint.setColor(color);
-        canvas->drawBitmapRect(bitmap, SkRect::MakeWH(8, 8), SkRect::MakeWH(32, 32), &paint);
+        canvas->drawImageRect(bitmap.asImage(),
+                              SkRect::MakeWH(8, 8), SkRect::MakeWH(32, 32),
+                              SkSamplingOptions(), &paint,
+                              SkCanvas::kStrict_SrcRectConstraint);
         canvas->translate(48, 0);
     }
 }
diff --git a/docs/examples/Canvas_drawBitmapRect_2.cpp b/docs/examples/Canvas_drawBitmapRect_2.cpp
index b48774e..3a033f8 100644
--- a/docs/examples/Canvas_drawBitmapRect_2.cpp
+++ b/docs/examples/Canvas_drawBitmapRect_2.cpp
@@ -16,10 +16,12 @@
     bitmap.installPixels(SkImageInfo::MakeA8(8, 8),
             (void*) pixels, sizeof(pixels[0]));
     SkPaint paint;
-    paint.setFilterQuality(kHigh_SkFilterQuality);
     for (auto color : { SK_ColorRED, SK_ColorBLUE, 0xFF007F00, 0xFF7f007f} ) {
         paint.setColor(color);
-        canvas->drawBitmapRect(bitmap, SkIRect::MakeWH(8, 8), SkRect::MakeWH(32, 32), &paint);
+        canvas->drawImageRect(bitmap.asImage().get(),
+                              SkRect::MakeWH(8, 8), SkRect::MakeWH(32, 32),
+                              SkSamplingOptions({1.0f/3, 1.0f/3}), &paint,
+                              SkCanvas::kStrict_SrcRectConstraint);
         canvas->translate(48.25f, 0);
     }
 }
diff --git a/docs/examples/Canvas_drawBitmapRect_3.cpp b/docs/examples/Canvas_drawBitmapRect_3.cpp
index 9ec6268..1ba18c8 100644
--- a/docs/examples/Canvas_drawBitmapRect_3.cpp
+++ b/docs/examples/Canvas_drawBitmapRect_3.cpp
@@ -13,7 +13,8 @@
     canvas->scale(4, 4);
     for (auto color : { SK_ColorRED, SK_ColorBLUE, SK_ColorGREEN } ) {
         paint.setColorFilter(SkColorFilters::Blend(color, SkBlendMode::kPlus));
-        canvas->drawBitmapRect(bitmap, SkRect::MakeWH(8, 8), &paint);
+        canvas->drawImageRect(bitmap.asImage().get(), SkRect::MakeWH(8, 8),
+                              SkSamplingOptions(), &paint);
         canvas->translate(8, 0);
     }
 }
diff --git a/docs/examples/ColorSetA.cpp b/docs/examples/ColorSetA.cpp
index 9fc343e..c0f138e 100644
--- a/docs/examples/ColorSetA.cpp
+++ b/docs/examples/ColorSetA.cpp
@@ -4,7 +4,7 @@
 // HASH=18f6f376f771f5ffa56d5e5b2ebd20fb
 REG_FIDDLE(ColorSetA, 256, 256, false, 3) {
 void draw(SkCanvas* canvas) {
-    canvas->drawBitmap(source, 0, 0);
+    canvas->drawImage(source.asImage(), 0, 0);
     for (int y = 0; y < 256; y += 16) {
        for (int x = 0; x < 256; x += 16) {
          SkColor color = source.getColor(x + 8, y + 8);
diff --git a/docs/examples/ColorToHSV.cpp b/docs/examples/ColorToHSV.cpp
index 6c24079..3e8796e 100644
--- a/docs/examples/ColorToHSV.cpp
+++ b/docs/examples/ColorToHSV.cpp
@@ -4,7 +4,7 @@
 // HASH=1e0370f12c8aab5b84f9e824074f1e5a
 REG_FIDDLE(ColorToHSV, 256, 256, false, 3) {
 void draw(SkCanvas* canvas) {
-    canvas->drawBitmap(source, 0, 0);
+    canvas->drawImage(source.asImage(), 0, 0);
     for (int y = 0; y < 256; ++y) {
        for (int x = 0; x < 256; ++x) {
          SkScalar hsv[3];
diff --git a/docs/examples/Color_Constants_b.cpp b/docs/examples/Color_Constants_b.cpp
index c43096e..26016e6 100644
--- a/docs/examples/Color_Constants_b.cpp
+++ b/docs/examples/Color_Constants_b.cpp
@@ -15,7 +15,7 @@
     pixmap.erase(SK_ColorTRANSPARENT, { 48, 48, 168, 168 } );
     SkBitmap bitmap;
     bitmap.installPixels(pixmap);
-    canvas->drawBitmap(bitmap, 0, 0);
-    canvas->drawBitmap(bitmap, 48, 48);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
+    canvas->drawImage(bitmap.asImage(), 48, 48);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Color_Constants_c.cpp b/docs/examples/Color_Constants_c.cpp
index 15b00ec..bb789aa 100644
--- a/docs/examples/Color_Constants_c.cpp
+++ b/docs/examples/Color_Constants_c.cpp
@@ -15,7 +15,7 @@
     pixmap.erase(SK_ColorBLACK, { 48, 48, 168, 168 } );
     SkBitmap bitmap;
     bitmap.installPixels(pixmap);
-    canvas->drawBitmap(bitmap, 0, 0);
-    canvas->drawBitmap(bitmap, 48, 48);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
+    canvas->drawImage(bitmap.asImage(), 48, 48);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Color_Constants_d.cpp b/docs/examples/Color_Constants_d.cpp
index b3c8c5a..3c33410 100644
--- a/docs/examples/Color_Constants_d.cpp
+++ b/docs/examples/Color_Constants_d.cpp
@@ -15,7 +15,7 @@
     pixmap.erase(SK_ColorWHITE, { 48, 48, 168, 168 } );
     SkBitmap bitmap;
     bitmap.installPixels(pixmap);
-    canvas->drawBitmap(bitmap, 0, 0);
-    canvas->drawBitmap(bitmap, 48, 48);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
+    canvas->drawImage(bitmap.asImage(), 48, 48);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Color_Type_ARGB_4444.cpp b/docs/examples/Color_Type_ARGB_4444.cpp
index c79e16a..5109e3c 100644
--- a/docs/examples/Color_Type_ARGB_4444.cpp
+++ b/docs/examples/Color_Type_ARGB_4444.cpp
@@ -10,7 +10,7 @@
     bitmap.allocPixels(imageInfo);
     SkCanvas offscreen(bitmap);
     offscreen.clear(SK_ColorGREEN);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     auto pack4444 = [](unsigned a, unsigned r, unsigned g, unsigned b) -> uint16_t {
         return (a << 0) | (b << 4) | (g << 8) | (r << 12);
     };
@@ -20,11 +20,11 @@
                             pack4444(0xF, 0x0, 0x0, 0x7), pack4444(0xF, 0x0, 0x0, 0x3) };
     SkPixmap redPixmap(imageInfo, &red4444, imageInfo.minRowBytes());
     if (bitmap.writePixels(redPixmap, 0, 0)) {
-        canvas->drawBitmap(bitmap, 2, 2);
+        canvas->drawImage(bitmap.asImage(), 2, 2);
     }
     SkPixmap bluePixmap(imageInfo, &blue4444, imageInfo.minRowBytes());
     if (bitmap.writePixels(bluePixmap, 0, 0)) {
-        canvas->drawBitmap(bitmap, 4, 4);
+        canvas->drawImage(bitmap.asImage(), 4, 4);
     }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Color_Type_Alpha_8.cpp b/docs/examples/Color_Type_Alpha_8.cpp
index 4e15231..1e81a5d 100644
--- a/docs/examples/Color_Type_Alpha_8.cpp
+++ b/docs/examples/Color_Type_Alpha_8.cpp
@@ -12,11 +12,11 @@
     offscreen.clear(SK_ColorGREEN);
     SkPaint orangePaint;
     orangePaint.setARGB(0xFF, 0xFF, 0xA5, 0x00);
-    canvas->drawBitmap(bitmap, 0, 0, &orangePaint);
+    canvas->drawImage(bitmap.asImage(), 0, 0, SkSamplingOptions(), &orangePaint);
     uint8_t alpha8[] = { 0xFF, 0xBB, 0x77, 0x33 };
     SkPixmap alphaPixmap(imageInfo, &alpha8, imageInfo.minRowBytes());
     if (bitmap.writePixels(alphaPixmap, 0, 0)) {
-        canvas->drawBitmap(bitmap, 2, 2, &orangePaint);
+        canvas->drawImage(bitmap.asImage(), 2, 2, SkSamplingOptions(), &orangePaint);
     }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Color_Type_BGRA_8888.cpp b/docs/examples/Color_Type_BGRA_8888.cpp
index 9e22c0e..8160985 100644
--- a/docs/examples/Color_Type_BGRA_8888.cpp
+++ b/docs/examples/Color_Type_BGRA_8888.cpp
@@ -10,7 +10,7 @@
     bitmap.allocPixels(imageInfo);
     SkCanvas offscreen(bitmap);
     offscreen.clear(SK_ColorGREEN);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     auto pack8888 = [](unsigned a, unsigned r, unsigned g, unsigned b) -> uint32_t {
         return (b << 0) | (g << 8) | (r << 16) | (a << 24);
     };
@@ -20,11 +20,11 @@
                             pack8888(0xFF, 0x0, 0x0, 0x099), pack8888(0xFF, 0x0, 0x0, 0x055) };
     SkPixmap redPixmap(imageInfo, &red8888, imageInfo.minRowBytes());
     if (bitmap.writePixels(redPixmap, 0, 0)) {
-        canvas->drawBitmap(bitmap, 2, 2);
+        canvas->drawImage(bitmap.asImage(), 2, 2);
     }
     SkPixmap bluePixmap(imageInfo, &blue8888, imageInfo.minRowBytes());
     if (bitmap.writePixels(bluePixmap, 0, 0)) {
-        canvas->drawBitmap(bitmap, 4, 4);
+        canvas->drawImage(bitmap.asImage(), 4, 4);
     }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Color_Type_Gray_8.cpp b/docs/examples/Color_Type_Gray_8.cpp
index 2f96295..8d6b3f4 100644
--- a/docs/examples/Color_Type_Gray_8.cpp
+++ b/docs/examples/Color_Type_Gray_8.cpp
@@ -10,11 +10,11 @@
     bitmap.allocPixels(imageInfo);
     SkCanvas offscreen(bitmap);
     offscreen.clear(SK_ColorGREEN);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     uint8_t gray8[] = { 0xFF, 0xBB, 0x77, 0x33 };
     SkPixmap grayPixmap(imageInfo, &gray8, imageInfo.minRowBytes());
     if (bitmap.writePixels(grayPixmap, 0, 0)) {
-        canvas->drawBitmap(bitmap, 2, 2);
+        canvas->drawImage(bitmap.asImage(), 2, 2);
     }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Color_Type_RGBA_1010102.cpp b/docs/examples/Color_Type_RGBA_1010102.cpp
index 9ba3dc0..cce6a32 100644
--- a/docs/examples/Color_Type_RGBA_1010102.cpp
+++ b/docs/examples/Color_Type_RGBA_1010102.cpp
@@ -10,7 +10,7 @@
     bitmap.allocPixels(imageInfo);
     SkCanvas offscreen(bitmap);
     offscreen.clear(SK_ColorGREEN);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     auto pack1010102 = [](unsigned r, unsigned g, unsigned b, unsigned a) -> uint32_t {
         return (r << 0) | (g << 10) | (b << 20) | (a << 30);
     };
@@ -23,11 +23,11 @@
                             pack1010102(0x000, 0x000, 0x1ff, 0x3),
                             pack1010102(0x000, 0x000, 0x0ff, 0x3) };
     if (bitmap.installPixels(imageInfo, (void*) redBits, imageInfo.minRowBytes())) {
-        canvas->drawBitmap(bitmap, 2, 2);
+        canvas->drawImage(bitmap.asImage(), 2, 2);
     }
     SkPixmap bluePixmap(imageInfo, &blueBits, imageInfo.minRowBytes());
     if (bitmap.installPixels(imageInfo, (void*) blueBits, imageInfo.minRowBytes())) {
-        canvas->drawBitmap(bitmap, 4, 4);
+        canvas->drawImage(bitmap.asImage(), 4, 4);
     }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Color_Type_RGBA_8888.cpp b/docs/examples/Color_Type_RGBA_8888.cpp
index 0978cb1..7f34611 100644
--- a/docs/examples/Color_Type_RGBA_8888.cpp
+++ b/docs/examples/Color_Type_RGBA_8888.cpp
@@ -10,7 +10,7 @@
     bitmap.allocPixels(imageInfo);
     SkCanvas offscreen(bitmap);
     offscreen.clear(SK_ColorGREEN);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     auto pack8888 = [](unsigned a, unsigned r, unsigned g, unsigned b) -> uint32_t {
         return (r << 0) | (g << 8) | (b << 16) | (a << 24);
     };
@@ -20,11 +20,11 @@
                             pack8888(0xFF, 0x0, 0x0, 0x077), pack8888(0xFF, 0x0, 0x0, 0x033) };
     SkPixmap redPixmap(imageInfo, &red8888, imageInfo.minRowBytes());
     if (bitmap.writePixels(redPixmap, 0, 0)) {
-        canvas->drawBitmap(bitmap, 2, 2);
+        canvas->drawImage(bitmap.asImage(), 2, 2);
     }
     SkPixmap bluePixmap(imageInfo, &blue8888, imageInfo.minRowBytes());
     if (bitmap.writePixels(bluePixmap, 0, 0)) {
-        canvas->drawBitmap(bitmap, 4, 4);
+        canvas->drawImage(bitmap.asImage(), 4, 4);
     }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Color_Type_RGBA_F16.cpp b/docs/examples/Color_Type_RGBA_F16.cpp
index cdb2f87..8c4add9 100644
--- a/docs/examples/Color_Type_RGBA_F16.cpp
+++ b/docs/examples/Color_Type_RGBA_F16.cpp
@@ -27,7 +27,7 @@
     bitmap.allocPixels(imageInfo);
     SkCanvas offscreen(bitmap);
     offscreen.clear(SK_ColorGREEN);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     auto H = [](float c) -> uint16_t {
         return FloatToHalf(c);
     };
@@ -42,11 +42,11 @@
                                { H(0.0), H(0.0), H(.25), H(1.0) } };
     SkPixmap redPixmap(imageInfo, red_f16, imageInfo.minRowBytes());
     if (bitmap.writePixels(redPixmap, 0, 0)) {
-        canvas->drawBitmap(bitmap, 2, 2);
+        canvas->drawImage(bitmap.asImage(), 2, 2);
     }
     SkPixmap bluePixmap(imageInfo, blue_f16, imageInfo.minRowBytes());
     if (bitmap.writePixels(bluePixmap, 0, 0)) {
-        canvas->drawBitmap(bitmap, 4, 4);
+        canvas->drawImage(bitmap.asImage(), 4, 4);
     }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Color_Type_RGB_101010.cpp b/docs/examples/Color_Type_RGB_101010.cpp
index 9a266f6..3660c38 100644
--- a/docs/examples/Color_Type_RGB_101010.cpp
+++ b/docs/examples/Color_Type_RGB_101010.cpp
@@ -10,7 +10,7 @@
     bitmap.allocPixels(imageInfo);
     SkCanvas offscreen(bitmap);
     offscreen.clear(SK_ColorGREEN);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     auto pack101010x = [](unsigned r, unsigned g, unsigned b) -> uint32_t {
         return (r << 0) | (g << 10) | (b << 20);
     };
@@ -19,11 +19,11 @@
     uint32_t blueBits[] = { pack101010x(0x000, 0x000, 0x3FF), pack101010x(0x000, 0x000, 0x2ff),
     pack101010x(0x000, 0x000, 0x1ff), pack101010x(0x000, 0x000, 0x0ff) };
     if (bitmap.installPixels(imageInfo, (void*) redBits, imageInfo.minRowBytes())) {
-        canvas->drawBitmap(bitmap, 2, 2);
+        canvas->drawImage(bitmap.asImage(), 2, 2);
     }
     SkPixmap bluePixmap(imageInfo, &blueBits, imageInfo.minRowBytes());
     if (bitmap.installPixels(imageInfo, (void*) blueBits, imageInfo.minRowBytes())) {
-        canvas->drawBitmap(bitmap, 4, 4);
+        canvas->drawImage(bitmap.asImage(), 4, 4);
     }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Color_Type_RGB_565.cpp b/docs/examples/Color_Type_RGB_565.cpp
index 0521cd9..254bb19 100644
--- a/docs/examples/Color_Type_RGB_565.cpp
+++ b/docs/examples/Color_Type_RGB_565.cpp
@@ -10,7 +10,7 @@
     bitmap.allocPixels(imageInfo);
     SkCanvas offscreen(bitmap);
     offscreen.clear(SK_ColorGREEN);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     auto pack565 = [](unsigned r, unsigned g, unsigned b) -> uint16_t {
         return (b << 0) | (g << 5) | (r << 11);
     };
@@ -20,11 +20,11 @@
                            pack565(0x00, 0x00, 0x0F), pack565(0x00, 0x00, 0x07) };
     SkPixmap redPixmap(imageInfo, &red565, imageInfo.minRowBytes());
     if (bitmap.writePixels(redPixmap, 0, 0)) {
-        canvas->drawBitmap(bitmap, 2, 2);
+        canvas->drawImage(bitmap.asImage(), 2, 2);
     }
     SkPixmap bluePixmap(imageInfo, &blue565, imageInfo.minRowBytes());
     if (bitmap.writePixels(bluePixmap, 0, 0)) {
-        canvas->drawBitmap(bitmap, 4, 4);
+        canvas->drawImage(bitmap.asImage(), 4, 4);
     }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Color_Type_RGB_888.cpp b/docs/examples/Color_Type_RGB_888.cpp
index c589262..a0c034a 100644
--- a/docs/examples/Color_Type_RGB_888.cpp
+++ b/docs/examples/Color_Type_RGB_888.cpp
@@ -10,7 +10,7 @@
     bitmap.allocPixels(imageInfo);
     SkCanvas offscreen(bitmap);
     offscreen.clear(SK_ColorGREEN);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     auto pack888 = [](unsigned r, unsigned g, unsigned b) -> uint32_t {
         return (r << 0) | (g << 8) | (b << 16);
     };
@@ -19,10 +19,10 @@
     uint32_t blue888[] = { pack888(0x00, 0x00, 0xFF), pack888(0x00, 0x00, 0xbb),
         pack888(0x00, 0x00, 0x77), pack888(0x00, 0x00, 0x33) };
     if (bitmap.installPixels(imageInfo, (void*) red888, imageInfo.minRowBytes())) {
-        canvas->drawBitmap(bitmap, 2, 2);
+        canvas->drawImage(bitmap.asImage(), 2, 2);
     }
     if (bitmap.installPixels(imageInfo, (void*) blue888, imageInfo.minRowBytes())) {
-        canvas->drawBitmap(bitmap, 4, 4);
+        canvas->drawImage(bitmap.asImage(), 4, 4);
     }
 }
 }  // END FIDDLE
diff --git a/docs/examples/Dither_a.cpp b/docs/examples/Dither_a.cpp
index 80754d1..0b670d2 100644
--- a/docs/examples/Dither_a.cpp
+++ b/docs/examples/Dither_a.cpp
@@ -20,6 +20,6 @@
         }
     }
     canvas->scale(8, 8);
-    canvas->drawBitmap(bm16, 0, 0);
+    canvas->drawImage(bm16.asImage(), 0, 0);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Dither_b.cpp b/docs/examples/Dither_b.cpp
index 01cb7e6..075ca64 100644
--- a/docs/examples/Dither_b.cpp
+++ b/docs/examples/Dither_b.cpp
@@ -15,12 +15,13 @@
                      points, colors, nullptr, SK_ARRAY_COUNT(colors),
                      SkTileMode::kClamp));
     paint.setDither(true);
+    auto img = bm32.asImage();
     c32.drawPaint(paint);
     canvas->scale(12, 12);
-    canvas->drawBitmap(bm32, 0, 0);
+    canvas->drawImage(img, 0, 0);
     paint.setBlendMode(SkBlendMode::kPlus);
-    canvas->drawBitmap(bm32, 0, 11, &paint);
-    canvas->drawBitmap(bm32, 0, 11, &paint);
-    canvas->drawBitmap(bm32, 0, 11, &paint);
+    canvas->drawImage(img, 0, 11, &paint);
+    canvas->drawImage(img, 0, 11, &paint);
+    canvas->drawImage(img, 0, 11, &paint);
 }
 }  // END FIDDLE
diff --git a/docs/examples/HSVToColor.cpp b/docs/examples/HSVToColor.cpp
index a8c5e33..ac19a83 100644
--- a/docs/examples/HSVToColor.cpp
+++ b/docs/examples/HSVToColor.cpp
@@ -4,7 +4,7 @@
 // HASH=311a59931ac340b90f202cd6ac399a0a
 REG_FIDDLE(HSVToColor, 256, 256, false, 3) {
 void draw(SkCanvas* canvas) {
-    canvas->drawBitmap(source, 0, 0);
+    canvas->drawImage(source.asImage(), 0, 0);
     for (int y = 0; y < 256; ++y) {
        for (int x = 0; x < 256; ++x) {
          SkColor color = source.getColor(x, y);
diff --git a/docs/examples/HSVToColor_2.cpp b/docs/examples/HSVToColor_2.cpp
index 8b67137..2130ee5 100644
--- a/docs/examples/HSVToColor_2.cpp
+++ b/docs/examples/HSVToColor_2.cpp
@@ -4,7 +4,7 @@
 // HASH=d355a17547908cdbc2c38720974b5d11
 REG_FIDDLE(HSVToColor_2, 256, 256, false, 3) {
 void draw(SkCanvas* canvas) {
-    canvas->drawBitmap(source, 0, 0);
+    canvas->drawImage(source.asImage(), 0, 0);
     for (int y = 0; y < 256; ++y) {
        for (int x = 0; x < 256; ++x) {
          SkColor color = source.getColor(x, y);
diff --git a/docs/examples/ImageInfo_Make.cpp b/docs/examples/ImageInfo_Make.cpp
index b8548de..3e56aed 100644
--- a/docs/examples/ImageInfo_Make.cpp
+++ b/docs/examples/ImageInfo_Make.cpp
@@ -14,6 +14,6 @@
     SkBitmap bitmap;
     bitmap.installPixels(pixmap);
     canvas->scale(8, 8);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
 }
 }  // END FIDDLE
diff --git a/docs/examples/ImageInfo_MakeA8.cpp b/docs/examples/ImageInfo_MakeA8.cpp
index a899311..40f773f 100644
--- a/docs/examples/ImageInfo_MakeA8.cpp
+++ b/docs/examples/ImageInfo_MakeA8.cpp
@@ -19,7 +19,7 @@
     canvas->scale(4, 4);
     for (auto color : { SK_ColorRED, SK_ColorBLUE, 0xFF007F00} ) {
         paint.setColor(color);
-        canvas->drawBitmap(bitmap, 0, 0, &paint);
+        canvas->drawImage(bitmap.asImage(), 0, 0, &paint);
         canvas->translate(12, 0);
     }
 }
diff --git a/docs/examples/ImageInfo_MakeS32.cpp b/docs/examples/ImageInfo_MakeS32.cpp
index 391450c..b369779 100644
--- a/docs/examples/ImageInfo_MakeS32.cpp
+++ b/docs/examples/ImageInfo_MakeS32.cpp
@@ -16,14 +16,14 @@
     bitmap.allocPixels(SkImageInfo::MakeN32(width, height, kPremul_SkAlphaType));
     SkCanvas offScreen(bitmap);
     offScreen.drawRect(SkRect::MakeWH(width, height), gradPaint);
-    canvas->drawBitmap(bitmap, 0, 0);
+    canvas->drawImage(bitmap.asImage(), 0, 0);
     bitmap.allocPixels(SkImageInfo::MakeS32(width, height, kPremul_SkAlphaType));
     SkCanvas sRGBOffscreen(bitmap);
     sRGBOffscreen.drawRect(SkRect::MakeWH(width, height), gradPaint);
-    canvas->drawBitmap(bitmap, 0, 48);
+    canvas->drawImage(bitmap.asImage(), 0, 48);
     SkBitmap noColorSpaceBitmap;
     noColorSpaceBitmap.setInfo(SkImageInfo::MakeN32(width, height, kPremul_SkAlphaType));
     noColorSpaceBitmap.setPixels(bitmap.getAddr(0, 0));
-    canvas->drawBitmap(noColorSpaceBitmap, 0, 96);
+    canvas->drawImage(noColorSpaceBitmap.asImage(), 0, 96);
 }
 }  // END FIDDLE
diff --git a/docs/examples/ImageInfo_bounds.cpp b/docs/examples/ImageInfo_bounds.cpp
index 8355b15..ee500c7 100644
--- a/docs/examples/ImageInfo_bounds.cpp
+++ b/docs/examples/ImageInfo_bounds.cpp
@@ -9,7 +9,7 @@
     SkIRect bounds = imageInfo.bounds();
     for (int x : { 0, bounds.width() } ) {
         for (int y : { 0, bounds.height() } ) {
-            canvas->drawBitmap(source, x, y);
+            canvas->drawImage(source.asImage(), x, y);
         }
     }
 }
