diff --git a/samplecode/SampleAtlas.cpp b/samplecode/SampleAtlas.cpp
index a7d5cbe..1075f4d 100644
--- a/samplecode/SampleAtlas.cpp
+++ b/samplecode/SampleAtlas.cpp
@@ -39,7 +39,7 @@
     }
 }
 
-static SkImage* make_atlas(int atlasSize, int cellSize) {
+static sk_sp<SkImage> make_atlas(int atlasSize, int cellSize) {
     SkImageInfo info = SkImageInfo::MakeN32Premul(atlasSize, atlasSize);
     SkAutoTUnref<SkSurface> surface(SkSurface::NewRaster(info));
     SkCanvas* canvas = surface->getCanvas();
@@ -62,7 +62,7 @@
             i += 1;
         }
     }
-    return surface->newImageSnapshot();
+    return surface->makeImageSnapshot();
 }
 
 class DrawAtlasDrawable : public SkDrawable {
@@ -131,7 +131,7 @@
         N = 256,
     };
 
-    SkAutoTUnref<SkImage> fAtlas;
+    sk_sp<SkImage> fAtlas;
     Rec         fRec[N];
     SkRect      fTex[N];
     SkRect      fBounds;
@@ -142,7 +142,7 @@
         : fProc(proc), fBounds(r), fUseColors(false)
     {
         SkRandom rand;
-        fAtlas.reset(make_atlas(kAtlasSize, kCellSize));
+        fAtlas = make_atlas(kAtlasSize, kCellSize);
         const SkScalar kMaxSpeed = 5;
         const SkScalar cell = SkIntToScalar(kCellSize);
         int i = 0;
@@ -187,7 +187,7 @@
 
         const SkRect cull = this->getBounds();
         const SkColor* colorsPtr = fUseColors ? colors : nullptr;
-        fProc(canvas, fAtlas, xform, fTex, colorsPtr, N, &cull, &paint);
+        fProc(canvas, fAtlas.get(), xform, fTex, colorsPtr, N, &cull, &paint);
     }
     
     SkRect onGetBounds() override {
diff --git a/samplecode/SampleFilterFuzz.cpp b/samplecode/SampleFilterFuzz.cpp
index 28155f1..81ea2ea 100644
--- a/samplecode/SampleFilterFuzz.cpp
+++ b/samplecode/SampleFilterFuzz.cpp
@@ -688,11 +688,11 @@
         break;
     case BITMAP:
     {
-        SkAutoTUnref<SkImage> image(SkImage::NewFromBitmap(make_bitmap()));
+        sk_sp<SkImage> image(SkImage::MakeFromBitmap(make_bitmap()));
         if (R(2) == 1) {
-            filter = SkImageSource::Create(image, make_rect(), make_rect(), kHigh_SkFilterQuality);
+            filter = SkImageSource::Create(image.get(), make_rect(), make_rect(), kHigh_SkFilterQuality);
         } else {
-            filter = SkImageSource::Create(image);
+            filter = SkImageSource::Create(image.get());
         }
     }
         break;
diff --git a/samplecode/SampleFilterQuality.cpp b/samplecode/SampleFilterQuality.cpp
index 27c092f..9098901 100644
--- a/samplecode/SampleFilterQuality.cpp
+++ b/samplecode/SampleFilterQuality.cpp
@@ -28,32 +28,18 @@
 }
 
 static sk_sp<SkShader> make_shader(const SkRect& bounds) {
-#if 0
-    const SkPoint pts[] = {
-        { bounds.left(), bounds.top() },
-        { bounds.right(), bounds.bottom() },
-    };
-    const SkColor colors[] = {
-        SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorBLACK,
-        SK_ColorCYAN, SK_ColorMAGENTA, SK_ColorYELLOW,
-    };
-    return SkGradientShader::CreateLinear(pts,
-                                          colors, nullptr, SK_ARRAY_COUNT(colors),
-                                          SkShader::kClamp_TileMode);
-#else
-    SkAutoTUnref<SkImage> image(GetResourceAsImage("mandrill_128.png"));
-    if (nullptr == image) {
+    sk_sp<SkImage> image(GetResourceAsImage("mandrill_128.png"));
+    if (!image) {
         return nullptr;
     }
     return image->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);
-#endif
 }
 
 #define N   128
 #define ANGLE_DELTA 3
 #define SCALE_DELTA (SK_Scalar1 / 32)
 
-static SkImage* make_image() {
+static sk_sp<SkImage> make_image() {
     SkImageInfo info = SkImageInfo::MakeN32(N, N, kOpaque_SkAlphaType);
     SkAutoTUnref<SkSurface> surface(SkSurface::NewRaster(info));
     SkCanvas* canvas = surface->getCanvas();
@@ -70,10 +56,10 @@
     paint.setShader(make_shader(SkRect::MakeWH(N, N)));
     
     canvas->drawPath(path, paint);
-    return surface->newImageSnapshot();
+    return surface->makeImageSnapshot();
 }
 
-static SkImage* zoom_up(SkSurface* origSurf, SkImage* orig) {
+static sk_sp<SkImage> zoom_up(SkSurface* origSurf, SkImage* orig) {
     const SkScalar S = 16;    // amount to scale up
     const int D = 2;    // dimension scaling for the offscreen
     // since we only view the center, don't need to produce the entire thing
@@ -100,7 +86,7 @@
             canvas->drawLine(x, 0, x, SkIntToScalar(orig->height()), paint);
         }
     }
-    return surface->newImageSnapshot();
+    return surface->makeImageSnapshot();
 }
 
 struct AnimValue {
@@ -156,12 +142,12 @@
 }
 
 class FilterQualityView : public SampleView {
-    SkAutoTUnref<SkImage> fImage;
-    AnimValue             fScale, fAngle;
-    SkSize              fCell;
-    SkInterpolator      fTrans;
-    SkMSec              fCurrTime;
-    bool                fShowFatBits;
+    sk_sp<SkImage>  fImage;
+    AnimValue       fScale, fAngle;
+    SkSize          fCell;
+    SkInterpolator  fTrans;
+    SkMSec          fCurrTime;
+    bool            fShowFatBits;
 
 public:
     FilterQualityView() : fImage(make_image()), fTrans(2, 2), fShowFatBits(true) {
@@ -216,7 +202,7 @@
         canvas->translate(SkScalarHalf(size.width()), SkScalarHalf(size.height()));
         canvas->scale(fScale, fScale);
         canvas->rotate(fAngle);
-        canvas->drawImage(fImage, -SkScalarHalf(fImage->width()), -SkScalarHalf(fImage->height()),
+        canvas->drawImage(fImage.get(), -SkScalarHalf(fImage->width()), -SkScalarHalf(fImage->height()),
                           &paint);
 
         if (false) {
@@ -247,9 +233,9 @@
         this->drawTheImage(canvas, size, filter, dx, dy);
 
         if (surface) {
-            SkAutoTUnref<SkImage> orig(surface->newImageSnapshot());
-            SkAutoTUnref<SkImage> zoomed(zoom_up(surface, orig));
-            origCanvas->drawImage(zoomed,
+            sk_sp<SkImage> orig(surface->makeImageSnapshot());
+            sk_sp<SkImage> zoomed(zoom_up(surface, orig.get()));
+            origCanvas->drawImage(zoomed.get(),
                                   SkScalarHalf(fCell.width() - zoomed->width()),
                                   SkScalarHalf(fCell.height() - zoomed->height()));
         }
diff --git a/samplecode/SampleLayers.cpp b/samplecode/SampleLayers.cpp
index beb7e4a..1183568 100644
--- a/samplecode/SampleLayers.cpp
+++ b/samplecode/SampleLayers.cpp
@@ -244,13 +244,13 @@
 class BackdropView : public SampleView {
     SkPoint fCenter;
     SkScalar fAngle;
-    SkAutoTUnref<SkImage> fImage;
+    sk_sp<SkImage> fImage;
     SkAutoTUnref<SkImageFilter> fFilter;
 public:
     BackdropView() {
         fCenter.set(200, 150);
         fAngle = 0;
-        fImage.reset(GetResourceAsImage("mandrill_512.png"));
+        fImage = GetResourceAsImage("mandrill_512.png");
         fFilter.reset(SkDilateImageFilter::Create(8, 8));
     }
 
@@ -265,7 +265,7 @@
     }
 
     void onDrawContent(SkCanvas* canvas) override {
-        canvas->drawImage(fImage, 0, 0, nullptr);
+        canvas->drawImage(fImage.get(), 0, 0, nullptr);
 
         const SkScalar w = 250;
         const SkScalar h = 150;
diff --git a/samplecode/SampleShip.cpp b/samplecode/SampleShip.cpp
index fddf023..daaf5e3 100644
--- a/samplecode/SampleShip.cpp
+++ b/samplecode/SampleShip.cpp
@@ -48,10 +48,10 @@
 class DrawShipView : public SampleView {
 public:
     DrawShipView(const char name[], DrawAtlasProc proc) : fName(name), fProc(proc) {
-        fAtlas.reset(GetResourceAsImage("ship.png"));
+        fAtlas = GetResourceAsImage("ship.png");
         if (!fAtlas) {
             SkDebugf("\nCould not decode file ship.png. Falling back to penguin mode.\n");
-            fAtlas.reset(GetResourceAsImage("baby_tux.png"));
+            fAtlas = GetResourceAsImage("baby_tux.png");
             if (!fAtlas) {
                 SkDebugf("\nCould not decode file baby_tux.png. Did you forget"
                          " to set the resourcePath?\n");
@@ -146,7 +146,7 @@
             fXform[i].fTy += dy;
         }
         
-        fProc(canvas, fAtlas, fXform, fTex, nullptr, kGrid*kGrid+1, nullptr, &paint);
+        fProc(canvas, fAtlas.get(), fXform, fTex, nullptr, kGrid*kGrid+1, nullptr, &paint);
         paint.setColor(SK_ColorBLACK);
         canvas->drawRect(SkRect::MakeXYWH(0, 0, 200, 24), paint);
         paint.setColor(SK_ColorWHITE);
@@ -168,7 +168,7 @@
     const char*         fName;
     DrawAtlasProc       fProc;
     
-    SkAutoTUnref<SkImage> fAtlas;
+    sk_sp<SkImage> fAtlas;
     SkRSXform   fXform[kGrid*kGrid+1];
     SkRect      fTex[kGrid*kGrid+1];
     WallTimer   fTimer;
diff --git a/samplecode/SampleTextureDomain.cpp b/samplecode/SampleTextureDomain.cpp
index 6557533..2c6dd64 100644
--- a/samplecode/SampleTextureDomain.cpp
+++ b/samplecode/SampleTextureDomain.cpp
@@ -67,7 +67,7 @@
         surface->getCanvas()->drawBitmapRect(fBM, srcRect, dstRect, &paint,
                                              SkCanvas::kStrict_SrcRectConstraint);
 
-        SkAutoTUnref<SkImage> image(surface->newImageSnapshot());
+        sk_sp<SkImage> image(surface->makeImageSnapshot());
 
         srcRect.setXYWH(1, 1, 3, 3);
         dstRect.setXYWH(405, 5, 305, 305);
