diff --git a/tests/ImageTest.cpp b/tests/ImageTest.cpp
index 57ce3fe..7bdf8dd6 100644
--- a/tests/ImageTest.cpp
+++ b/tests/ImageTest.cpp
@@ -314,7 +314,7 @@
         SkBitmap bm;
         rec[i].fMakeProc(&bm);
 
-        sk_sp<SkImage> image(SkImage::MakeFromBitmap(bm));
+        sk_sp<SkImage> image(bm.asImage());
         SkPixmap pmap;
 
         const bool sharedID = (image->uniqueID() == bm.getGenerationID());
@@ -511,7 +511,7 @@
         }
     }
     auto dContext = ctxInfo.directContext();
-    auto texImage = SkImage::MakeFromBitmap(bmp)->makeTextureImage(dContext);
+    auto texImage = bmp.asImage()->makeTextureImage(dContext);
     if (!texImage || texImage->alphaType() != kUnpremul_SkAlphaType) {
         ERRORF(reporter, "Failed to make unpremul texture image.");
         return;
@@ -746,7 +746,7 @@
     SkBitmap tmp;
     REPORTER_ASSERT(reporter, bitmap.extractSubset(&tmp, SkIRect::MakeWH(image->width() / 2,
                                                                          image->height() / 2)));
-    sk_sp<SkImage> subsetImage(SkImage::MakeFromBitmap(tmp));
+    sk_sp<SkImage> subsetImage(tmp.asImage());
     REPORTER_ASSERT(reporter, subsetImage.get());
 
     SkBitmap subsetBitmap;
@@ -1169,7 +1169,7 @@
     SkBitmap bitmap;
     SkImageInfo info = SkImageInfo::MakeN32(10, 10, kPremul_SkAlphaType, rec2020);
     bitmap.allocPixels(info);
-    image = SkImage::MakeFromBitmap(bitmap);
+    image = bitmap.asImage();
     REPORTER_ASSERT(r, SkColorSpace::Equals(rec2020.get(), image->colorSpace()));
 
     sk_sp<SkSurface> surface = SkSurface::MakeRaster(
@@ -1192,7 +1192,7 @@
     srgbBitmap.allocPixels(SkImageInfo::MakeS32(1, 1, kOpaque_SkAlphaType));
     *srgbBitmap.getAddr32(0, 0) = SkSwizzle_RGBA_to_PMColor(0xFF604020);
     srgbBitmap.setImmutable();
-    sk_sp<SkImage> srgbImage = SkImage::MakeFromBitmap(srgbBitmap);
+    sk_sp<SkImage> srgbImage = srgbBitmap.asImage();
     sk_sp<SkImage> p3Image = srgbImage->makeColorSpace(p3, nullptr);
     SkBitmap p3Bitmap;
     bool success = p3Image->asLegacyBitmap(&p3Bitmap);
@@ -1253,7 +1253,7 @@
     SkBitmap bm0;
     make_all_premul(&bm0);
 
-    auto img0 = SkImage::MakeFromBitmap(bm0);
+    auto img0 = bm0.asImage();
     sk_sp<SkData> data = img0->encodeToData(SkEncodedImageFormat::kPNG, 100);
     auto img1 = SkImage::MakeFromEncoded(data);
 
