drawBitmap is deprecated

Bug: skia:11216
Change-Id: I15f7723e70cb6b252bf313530fd6d783a7635a00
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/360777
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
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);
         }
     }
 }