diff --git a/gm/aaclip.cpp b/gm/aaclip.cpp
index 8f0e93f..1f7886c 100644
--- a/gm/aaclip.cpp
+++ b/gm/aaclip.cpp
@@ -283,7 +283,7 @@
         SkPaint paint;
         paint.setAntiAlias(true);
 
-        paint.setColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
+        paint.setColor(0xFFCCCCCC);
         canvas->drawPath(path, paint);
 
         paint.setColor(SK_ColorRED);
diff --git a/gm/androidblendmodes.cpp b/gm/androidblendmodes.cpp
index d14ae30..75811ee 100644
--- a/gm/androidblendmodes.cpp
+++ b/gm/androidblendmodes.cpp
@@ -70,8 +70,8 @@
         textPaint.setTextAlign(SkPaint::kCenter_Align);
 
         sk_tool_utils::draw_checkerboard(canvas,
-                                         sk_tool_utils::color_to_565(kWhite),
-                                         sk_tool_utils::color_to_565(kGrey),
+                                         kWhite,
+                                         kGrey,
                                          32);
 
         int xOffset = 0, yOffset = 0;
diff --git a/gm/animatedimageblurs.cpp b/gm/animatedimageblurs.cpp
index 02c2bc4..1c2d173 100644
--- a/gm/animatedimageblurs.cpp
+++ b/gm/animatedimageblurs.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkAnimTimer.h"
 #include "SkBlurImageFilter.h"
 #include "SkRandom.h"
@@ -22,7 +21,7 @@
 class AnimatedImageBlurs : public skiagm::GM {
 public:
     AnimatedImageBlurs() : fLastTime(0.0f) {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
+        this->setBGColor(0xFFCCCCCC);
     }
 
 protected:
diff --git a/gm/anisotropic.cpp b/gm/anisotropic.cpp
index b2916bf..7a874b2 100644
--- a/gm/anisotropic.cpp
+++ b/gm/anisotropic.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 
 namespace skiagm {
 
@@ -14,7 +13,7 @@
 class AnisotropicGM : public GM {
 public:
     AnisotropicGM() : fFilterQuality(kHigh_SkFilterQuality) {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
+        this->setBGColor(0xFFCCCCCC);
     }
 
 protected:
diff --git a/gm/arcofzorro.cpp b/gm/arcofzorro.cpp
index 4c9b53f..296d98b 100644
--- a/gm/arcofzorro.cpp
+++ b/gm/arcofzorro.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkRandom.h"
 
 namespace skiagm {
@@ -17,7 +16,7 @@
 class ArcOfZorroGM : public GM {
 public:
     ArcOfZorroGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
+        this->setBGColor(0xFFCCCCCC);
     }
 
 protected:
diff --git a/gm/arithmode.cpp b/gm/arithmode.cpp
index f1c0c0b..7ebce7e 100644
--- a/gm/arithmode.cpp
+++ b/gm/arithmode.cpp
@@ -43,7 +43,7 @@
     SkPoint pts[] = { {0, SkIntToScalar(HH)}, {SkIntToScalar(WW), 0} };
     SkColor colors[] = {
         SK_ColorBLUE, SK_ColorYELLOW, SK_ColorBLACK, SK_ColorGREEN,
-        sk_tool_utils::color_to_565(SK_ColorGRAY)
+        SK_ColorGRAY,
     };
     paint.setShader(SkGradientShader::MakeLinear(pts, colors, nullptr, SK_ARRAY_COUNT(colors),
                                                  SkShader::kClamp_TileMode));
diff --git a/gm/bigblurs.cpp b/gm/bigblurs.cpp
index 83f6bd4..0a753dd 100644
--- a/gm/bigblurs.cpp
+++ b/gm/bigblurs.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkBlurMask.h"
 #include "SkMaskFilter.h"
 #include "SkPath.h"
@@ -20,7 +19,7 @@
 class BigBlursGM : public GM {
 public:
     BigBlursGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
diff --git a/gm/bitmapcopy.cpp b/gm/bitmapcopy.cpp
index 5f9ae20..28c6e79 100644
--- a/gm/bitmapcopy.cpp
+++ b/gm/bitmapcopy.cpp
@@ -55,7 +55,7 @@
     SkBitmap    fDst[NUM_CONFIGS];
 
     BitmapCopyGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
@@ -82,7 +82,7 @@
             sk_tool_utils::copy_to(&fDst[i], gColorTypes[i], src);
         }
 
-        canvas->clear(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        canvas->clear(0xFFDDDDDD);
         paint.setAntiAlias(true);
         sk_tool_utils::set_portable_typeface(&paint);
 
diff --git a/gm/bitmapfilters.cpp b/gm/bitmapfilters.cpp
index 3d20e57..0551c02 100644
--- a/gm/bitmapfilters.cpp
+++ b/gm/bitmapfilters.cpp
@@ -74,7 +74,7 @@
     SkBitmap    fBM4444, fBM16, fBM32;
 
     FilterGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
diff --git a/gm/bitmaprect.cpp b/gm/bitmaprect.cpp
index ef32412..190fb0d 100644
--- a/gm/bitmaprect.cpp
+++ b/gm/bitmaprect.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkCanvas.h"
 #include "SkGradientShader.h"
 #include "SkGraphics.h"
@@ -47,7 +46,7 @@
     }
 
     void onDraw(SkCanvas* canvas) override {
-        canvas->drawColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
+        canvas->drawColor(0xFFCCCCCC);
 
         const SkIRect src[] = {
             { 0, 0, 32, 32 },
diff --git a/gm/bitmapshader.cpp b/gm/bitmapshader.cpp
index 2671b5a..dfe3a22 100644
--- a/gm/bitmapshader.cpp
+++ b/gm/bitmapshader.cpp
@@ -9,7 +9,6 @@
 #include "SkBitmap.h"
 #include "SkPaint.h"
 #include "SkShader.h"
-#include "sk_tool_utils.h"
 
 #include "GrCaps.h"
 #include "GrContext.h"
@@ -43,7 +42,7 @@
 
 protected:
     void onOnceBeforeDraw() override {
-        this->setBGColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
+        this->setBGColor(SK_ColorGRAY);
         draw_bm(&fBitmap);
         draw_mask(&fMask);
     }
diff --git a/gm/blurredclippedcircle.cpp b/gm/blurredclippedcircle.cpp
index 533555d..65e62b7 100644
--- a/gm/blurredclippedcircle.cpp
+++ b/gm/blurredclippedcircle.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkClipOpPriv.h"
 #include "SkColorFilter.h"
 #include "SkMaskFilter.h"
@@ -20,7 +19,7 @@
 class BlurredClippedCircleGM : public GM {
 public:
     BlurredClippedCircleGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
+        this->setBGColor(0xFFCCCCCC);
     }
 
 protected:
diff --git a/gm/blurroundrect.cpp b/gm/blurroundrect.cpp
index 289e156..b7d0800 100644
--- a/gm/blurroundrect.cpp
+++ b/gm/blurroundrect.cpp
@@ -6,7 +6,6 @@
 */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkBlurMask.h"
 #include "SkCanvas.h"
 #include "SkColorFilter.h"
@@ -59,9 +58,9 @@
                     kNormal_SkBlurStyle,
                     SkBlurMask::ConvertRadiusToSigma(SK_ScalarHalf)));
             paint->setColorFilter(SkColorFilter::MakeModeFilter(
-                    sk_tool_utils::color_to_565(SK_ColorLTGRAY),
+                    SK_ColorLTGRAY,
                     SkBlendMode::kSrcIn));
-            paint->setColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
+            paint->setColor(SK_ColorGRAY);
         }
         {
             SkLayerDrawLooper::LayerInfo info;
diff --git a/gm/blurs.cpp b/gm/blurs.cpp
index 1ba1369..bd666bb 100644
--- a/gm/blurs.cpp
+++ b/gm/blurs.cpp
@@ -13,7 +13,7 @@
 #include "SkMaskFilter.h"
 #include "SkPath.h"
 
-DEF_SIMPLE_GM_BG(blurs, canvas, 700, 500, sk_tool_utils::color_to_565(0xFFDDDDDD)) {
+DEF_SIMPLE_GM_BG(blurs, canvas, 700, 500, 0xFFDDDDDD) {
         SkBlurStyle NONE = SkBlurStyle(-999);
         const struct {
             SkBlurStyle fStyle;
diff --git a/gm/clipdrawdraw.cpp b/gm/clipdrawdraw.cpp
index ed795d2..38c3c4a 100644
--- a/gm/clipdrawdraw.cpp
+++ b/gm/clipdrawdraw.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkRegion.h"
 
 // This GM exercises the use case found in crbug.com/423834.
@@ -37,8 +36,7 @@
         canvas->restore();
 }
 
-DEF_SIMPLE_GM_BG(clipdrawdraw, canvas, 512, 512,
-                 sk_tool_utils::color_to_565(0xFFCCCCCC)) {
+DEF_SIMPLE_GM_BG(clipdrawdraw, canvas, 512, 512, 0xFFCCCCCC) {
         // Vertical remnant
         const SkRect rect1 = SkRect::MakeLTRB(136.5f, 137.5f, 338.5f, 293.5f);
 
diff --git a/gm/coloremoji.cpp b/gm/coloremoji.cpp
index f264e4e..58a39e7 100644
--- a/gm/coloremoji.cpp
+++ b/gm/coloremoji.cpp
@@ -74,7 +74,7 @@
 
     void onDraw(SkCanvas* canvas) override {
 
-        canvas->drawColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
+        canvas->drawColor(SK_ColorGRAY);
 
         SkPaint paint;
         paint.setTypeface(emojiFont.typeface);
diff --git a/gm/colormatrix.cpp b/gm/colormatrix.cpp
index 8f256bf..cd49168 100644
--- a/gm/colormatrix.cpp
+++ b/gm/colormatrix.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkColorMatrixFilter.h"
 #include "SkGradientShader.h"
 #include "SkImage.h"
@@ -25,7 +24,7 @@
 class ColorMatrixGM : public skiagm::GM {
 public:
     ColorMatrixGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFF808080));
+        this->setBGColor(0xFF808080);
     }
 
 protected:
diff --git a/gm/colorwheel.cpp b/gm/colorwheel.cpp
index c0b7cf4..e970af5 100644
--- a/gm/colorwheel.cpp
+++ b/gm/colorwheel.cpp
@@ -43,7 +43,7 @@
     sk_tool_utils::set_portable_typeface(&paint, "sans-serif", SkFontStyle::Bold());
     paint.setTextSize(18.0f);
 
-    canvas->clear(sk_tool_utils::color_to_565(SK_ColorLTGRAY));
+    canvas->clear(SK_ColorLTGRAY);
     paint.setColor(SK_ColorRED);
     canvas->drawString("R", 8.0f, 20.0f, paint);
     paint.setColor(SK_ColorGREEN);
diff --git a/gm/complexclip3.cpp b/gm/complexclip3.cpp
index 2415806..421b3d8 100644
--- a/gm/complexclip3.cpp
+++ b/gm/complexclip3.cpp
@@ -19,7 +19,7 @@
 public:
     ComplexClip3GM(bool doSimpleClipFirst)
         : fDoSimpleClipFirst(doSimpleClipFirst) {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
diff --git a/gm/constcolorprocessor.cpp b/gm/constcolorprocessor.cpp
index ffeecda..e5d303f 100644
--- a/gm/constcolorprocessor.cpp
+++ b/gm/constcolorprocessor.cpp
@@ -25,7 +25,7 @@
 class ConstColorProcessor : public GM {
 public:
     ConstColorProcessor() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
diff --git a/gm/convexpolyclip.cpp b/gm/convexpolyclip.cpp
index 2de071f..3cc64dc 100644
--- a/gm/convexpolyclip.cpp
+++ b/gm/convexpolyclip.cpp
@@ -25,7 +25,7 @@
 
     SkScalar    radius = 3 * SkMaxScalar(wScalar, hScalar);
 
-    SkColor     colors[] = { sk_tool_utils::color_to_565(SK_ColorDKGRAY),
+    SkColor     colors[] = { SK_ColorDKGRAY,
                              sk_tool_utils::color_to_565(0xFF222255),
                              sk_tool_utils::color_to_565(0xFF331133),
                              sk_tool_utils::color_to_565(0xFF884422),
@@ -60,7 +60,7 @@
     sk_tool_utils::set_portable_typeface(&paint);
     paint.setTextSize(wScalar / 2.2f);
     paint.setShader(nullptr);
-    paint.setColor(sk_tool_utils::color_to_565(SK_ColorLTGRAY));
+    paint.setColor(SK_ColorLTGRAY);
     constexpr char kTxt[] = "Skia";
     SkPoint texPos = { wScalar / 17, hScalar / 2 + paint.getTextSize() / 2.5f };
     canvas.drawText(kTxt, SK_ARRAY_COUNT(kTxt)-1, texPos.fX, texPos.fY, paint);
@@ -152,7 +152,7 @@
         txtPaint.setTextSize(23.f);
         txtPaint.setAntiAlias(true);
         sk_tool_utils::set_portable_typeface(&txtPaint);
-        txtPaint.setColor(sk_tool_utils::color_to_565(SK_ColorDKGRAY));
+        txtPaint.setColor(SK_ColorDKGRAY);
         SkScalar textW = txtPaint.measureText(kTxt, SK_ARRAY_COUNT(kTxt)-1);
 
         SkScalar startX = 0;
diff --git a/gm/downsamplebitmap.cpp b/gm/downsamplebitmap.cpp
index 207c01f..55b4dc1 100644
--- a/gm/downsamplebitmap.cpp
+++ b/gm/downsamplebitmap.cpp
@@ -44,7 +44,7 @@
     DownsampleBitmapGM(SkFilterQuality filterQuality)
         : fFilterQuality(filterQuality)
     {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
         fBitmapMade = false;
     }
 
diff --git a/gm/drawatlascolor.cpp b/gm/drawatlascolor.cpp
index 8d53e31..3122777 100644
--- a/gm/drawatlascolor.cpp
+++ b/gm/drawatlascolor.cpp
@@ -54,7 +54,7 @@
 class DrawAtlasColorsGM : public skiagm::GM {
 public:
     DrawAtlasColorsGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
+        this->setBGColor(0xFFCCCCCC);
     }
 
 protected:
diff --git a/gm/drawlooper.cpp b/gm/drawlooper.cpp
index 49f1f12..2bb69f2 100644
--- a/gm/drawlooper.cpp
+++ b/gm/drawlooper.cpp
@@ -20,7 +20,7 @@
 class DrawLooperGM : public skiagm::GM {
 public:
     DrawLooperGM() : fLooper(nullptr) {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
diff --git a/gm/filltypes.cpp b/gm/filltypes.cpp
index 30dcd27..cf6c26f 100644
--- a/gm/filltypes.cpp
+++ b/gm/filltypes.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkPath.h"
 
 namespace skiagm {
@@ -15,7 +14,7 @@
     SkPath fPath;
 public:
     FillTypeGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
     void makePath() {
diff --git a/gm/filterbitmap.cpp b/gm/filterbitmap.cpp
index a393893..10f6c59 100644
--- a/gm/filterbitmap.cpp
+++ b/gm/filterbitmap.cpp
@@ -66,7 +66,7 @@
 
     FilterBitmapGM()
     {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
diff --git a/gm/filterfastbounds.cpp b/gm/filterfastbounds.cpp
index ad042ac..908e00c 100644
--- a/gm/filterfastbounds.cpp
+++ b/gm/filterfastbounds.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkBlurImageFilter.h"
 #include "SkDropShadowImageFilter.h"
 #include "SkImageSource.h"
@@ -152,7 +151,7 @@
 class ImageFilterFastBoundGM : public GM {
 public:
     ImageFilterFastBoundGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
+        this->setBGColor(0xFFCCCCCC);
     }
 
 protected:
diff --git a/gm/flippity.cpp b/gm/flippity.cpp
index 853606e..1cdc500 100644
--- a/gm/flippity.cpp
+++ b/gm/flippity.cpp
@@ -139,7 +139,7 @@
 class FlippityGM : public skiagm::GM {
 public:
     FlippityGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
+        this->setBGColor(0xFFCCCCCC);
     }
 
 protected:
diff --git a/gm/gradientDirtyLaundry.cpp b/gm/gradientDirtyLaundry.cpp
index 9062fce..b43ce7e 100644
--- a/gm/gradientDirtyLaundry.cpp
+++ b/gm/gradientDirtyLaundry.cpp
@@ -5,7 +5,6 @@
  * found in the LICENSE file.
  */
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkGradientShader.h"
 
 using namespace skiagm;
@@ -61,7 +60,7 @@
 class GradientsGM : public GM {
 public:
     GradientsGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
diff --git a/gm/gradient_matrix.cpp b/gm/gradient_matrix.cpp
index 0a4f036..22cd316 100644
--- a/gm/gradient_matrix.cpp
+++ b/gm/gradient_matrix.cpp
@@ -18,7 +18,6 @@
 #include "SkString.h"
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 
 constexpr SkColor gColors[] = {
     SK_ColorRED, SK_ColorYELLOW
@@ -109,8 +108,7 @@
     canvas->restore();
 }
 
-DEF_SIMPLE_GM_BG(gradient_matrix, canvas, 800, 800,
-                 sk_tool_utils::color_to_565(0xFFDDDDDD)) {
+DEF_SIMPLE_GM_BG(gradient_matrix, canvas, 800, 800, 0xFFDDDDDD) {
         draw_gradients(canvas, &make_linear_gradient,
                       linearPts, SK_ARRAY_COUNT(linearPts));
 
diff --git a/gm/gradients.cpp b/gm/gradients.cpp
index 59f7695..28a9a83 100644
--- a/gm/gradients.cpp
+++ b/gm/gradients.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkGradientShader.h"
 
 namespace skiagm {
@@ -170,7 +169,7 @@
 class GradientsGM : public GM {
 public:
     GradientsGM(bool dither) : fDither(dither) {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
@@ -226,7 +225,7 @@
 class Gradients4fGM : public GM {
 public:
     Gradients4fGM(bool dither) : fDither(dither) {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
@@ -283,7 +282,7 @@
 class GradientsLocalPerspectiveGM : public GM {
 public:
     GradientsLocalPerspectiveGM(bool dither) : fDither(dither) {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
@@ -471,7 +470,7 @@
     virtual SkISize onISize() { return SkISize::Make(640, 510); }
 
     void drawBG(SkCanvas* canvas) {
-        canvas->drawColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        canvas->drawColor(0xFFDDDDDD);
     }
 
     virtual void onDraw(SkCanvas* canvas) {
diff --git a/gm/gradients_2pt_conical.cpp b/gm/gradients_2pt_conical.cpp
index f2e2d18..81549e3 100644
--- a/gm/gradients_2pt_conical.cpp
+++ b/gm/gradients_2pt_conical.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkGradientShader.h"
 
 namespace skiagm {
@@ -315,7 +314,7 @@
         : fGradCaseType(gradCaseType)
         , fDither(dither)
         , fMode(mode) {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
         fName.printf("gradients_2pt_conical_%s%s", gGradCases[gradCaseType].fName,
                      fDither ? "" : "_nodither");
         switch (mode) {
diff --git a/gm/gradients_no_texture.cpp b/gm/gradients_no_texture.cpp
index 9acd633..694642e 100644
--- a/gm/gradients_no_texture.cpp
+++ b/gm/gradients_no_texture.cpp
@@ -5,7 +5,6 @@
  * found in the LICENSE file.
  */
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkGradientShader.h"
 
 using namespace skiagm;
@@ -81,7 +80,7 @@
 class GradientsNoTextureGM : public GM {
 public:
     GradientsNoTextureGM(bool dither) : fDither(dither) {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
diff --git a/gm/imageblurclampmode.cpp b/gm/imageblurclampmode.cpp
index 74bed43..f16f01d 100644
--- a/gm/imageblurclampmode.cpp
+++ b/gm/imageblurclampmode.cpp
@@ -44,7 +44,7 @@
 class ImageBlurClampModeGM : public GM {
 public:
     ImageBlurClampModeGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
+        this->setBGColor(0xFFCCCCCC);
     }
 
 protected:
diff --git a/gm/imageblurrepeatmode.cpp b/gm/imageblurrepeatmode.cpp
index b7705be..27465aa 100644
--- a/gm/imageblurrepeatmode.cpp
+++ b/gm/imageblurrepeatmode.cpp
@@ -62,7 +62,7 @@
 class ImageBlurRepeatModeGM : public GM {
 public:
     ImageBlurRepeatModeGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
+        this->setBGColor(0xFFCCCCCC);
     }
 
 protected:
diff --git a/gm/imagefilterscropexpand.cpp b/gm/imagefilterscropexpand.cpp
index a2dbda6..6b1bac2 100644
--- a/gm/imagefilterscropexpand.cpp
+++ b/gm/imagefilterscropexpand.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkCanvas.h"
 #include "SkColorFilter.h"
 #include "SkColorPriv.h"
@@ -138,9 +137,9 @@
         SkCanvas canvas(*bitmap);
         canvas.clear(0xFFFF0000);
         SkPaint darkPaint;
-        darkPaint.setColor(sk_tool_utils::color_to_565(0xFF404040));
+        darkPaint.setColor(0xFF404040);
         SkPaint lightPaint;
-        lightPaint.setColor(sk_tool_utils::color_to_565(0xFFA0A0A0));
+        lightPaint.setColor(0xFFA0A0A0);
         for (int y = 8; y < 48; y += 16) {
             for (int x = 8; x < 48; x += 16) {
                 canvas.save();
diff --git a/gm/imagefilterscropped.cpp b/gm/imagefilterscropped.cpp
index 92b5fe0..7cd79da 100644
--- a/gm/imagefilterscropped.cpp
+++ b/gm/imagefilterscropped.cpp
@@ -83,9 +83,9 @@
         SkCanvas canvas(fCheckerboard);
         canvas.clear(SK_ColorTRANSPARENT);
         SkPaint darkPaint;
-        darkPaint.setColor(sk_tool_utils::color_to_565(0xFF404040));
+        darkPaint.setColor(0xFF404040);
         SkPaint lightPaint;
-        lightPaint.setColor(sk_tool_utils::color_to_565(0xFFA0A0A0));
+        lightPaint.setColor(0xFFA0A0A0);
         for (int y = 0; y < 80; y += 16) {
             for (int x = 0; x < 80; x += 16) {
                 canvas.save();
diff --git a/gm/internal_links.cpp b/gm/internal_links.cpp
index 664b411..29be22e 100644
--- a/gm/internal_links.cpp
+++ b/gm/internal_links.cpp
@@ -20,7 +20,7 @@
 class InternalLinksGM : public GM {
 public:
     InternalLinksGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
diff --git a/gm/lighting.cpp b/gm/lighting.cpp
index 0c45065..f4d83ba 100644
--- a/gm/lighting.cpp
+++ b/gm/lighting.cpp
@@ -48,9 +48,9 @@
     }
 
     void onDraw(SkCanvas* canvas) override {
-        canvas->clear(sk_tool_utils::color_to_565(0xFF101010));
+        canvas->clear(0xFF101010);
         SkPaint checkPaint;
-        checkPaint.setColor(sk_tool_utils::color_to_565(0xFF202020));
+        checkPaint.setColor(0xFF202020);
         for (int y = 0; y < HEIGHT; y += 16) {
           for (int x = 0; x < WIDTH; x += 16) {
             canvas->save();
diff --git a/gm/lightingshader.cpp b/gm/lightingshader.cpp
index 303a4e2..f7fbe34 100644
--- a/gm/lightingshader.cpp
+++ b/gm/lightingshader.cpp
@@ -46,7 +46,7 @@
 class LightingShaderGM : public GM {
 public:
     LightingShaderGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
+        this->setBGColor(0xFFCCCCCC);
     }
 
 protected:
@@ -80,7 +80,7 @@
 
         fDiffuse = sk_tool_utils::create_checkerboard_bitmap(
                                                         kTexSize, kTexSize,
-                                                        sk_tool_utils::color_to_565(0x0),
+                                                        0x00000000,
                                                         sk_tool_utils::color_to_565(0xFF804020),
                                                         8);
 
diff --git a/gm/lightingshader2.cpp b/gm/lightingshader2.cpp
index a3454de..982e46a 100644
--- a/gm/lightingshader2.cpp
+++ b/gm/lightingshader2.cpp
@@ -79,7 +79,7 @@
 
         SkBitmap opaqueDiffuseMap = sk_tool_utils::create_checkerboard_bitmap(
                 kTexSize, kTexSize, SK_ColorBLACK,
-                sk_tool_utils::color_to_565(0xFF808080),
+                0xFF808080,
                 8);
         fOpaqueDiffuse = SkShader::MakeBitmapShader(opaqueDiffuseMap, SkShader::kClamp_TileMode,
                                                     SkShader::kClamp_TileMode, &matrix);
diff --git a/gm/mandoline.cpp b/gm/mandoline.cpp
index 17dd02f..7ca24df 100644
--- a/gm/mandoline.cpp
+++ b/gm/mandoline.cpp
@@ -6,11 +6,11 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
+#include "SkGeometry.h"
 #include "SkPaint.h"
 #include "SkPath.h"
 #include "SkPoint.h"
-#include "SkGeometry.h"
+#include "SkRandom.h"
 #include <math.h>
 
 namespace skiagm {
@@ -139,7 +139,7 @@
 class SliverPathsGM : public GM {
 public:
     SliverPathsGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(SK_ColorBLACK));
+        this->setBGColor(SK_ColorBLACK);
     }
 
 protected:
diff --git a/gm/matriximagefilter.cpp b/gm/matriximagefilter.cpp
index 977112f..6439de7 100644
--- a/gm/matriximagefilter.cpp
+++ b/gm/matriximagefilter.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkColor.h"
 #include "SkImageFilter.h"
 
@@ -23,9 +22,9 @@
         bitmap->allocN32Pixels(64, 64);
         SkCanvas canvas(*bitmap);
         SkPaint darkPaint;
-        darkPaint.setColor(sk_tool_utils::color_to_565(0xFF404040));
+        darkPaint.setColor(0xFF404040);
         SkPaint lightPaint;
-        lightPaint.setColor(sk_tool_utils::color_to_565(0xFFA0A0A0));
+        lightPaint.setColor(0xFFA0A0A0);
         for (int y = 0; y < 64; y += 32) {
             for (int x = 0; x < 64; x += 32) {
                 canvas.save();
diff --git a/gm/mipmap.cpp b/gm/mipmap.cpp
index 9769cda..98b766c 100644
--- a/gm/mipmap.cpp
+++ b/gm/mipmap.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkCanvas.h"
 #include "SkImage.h"
 #include "SkRandom.h"
@@ -16,7 +15,7 @@
     const SkImageInfo info = SkImageInfo::MakeN32Premul(319, 52);
     auto surface(SkSurface::MakeRaster(info));
     SkCanvas* canvas = surface->getCanvas();
-    canvas->drawColor(sk_tool_utils::color_to_565(0xFFF8F8F8));
+    canvas->drawColor(0xFFF8F8F8);
 
     SkPaint paint;
     paint.setAntiAlias(true);
diff --git a/gm/mixedtextblobs.cpp b/gm/mixedtextblobs.cpp
index 9e8ff46..a7a9f81 100644
--- a/gm/mixedtextblobs.cpp
+++ b/gm/mixedtextblobs.cpp
@@ -109,7 +109,7 @@
 
     void onDraw(SkCanvas* canvas) override {
 
-        canvas->drawColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
+        canvas->drawColor(SK_ColorGRAY);
 
         SkPaint paint;
 
diff --git a/gm/modecolorfilters.cpp b/gm/modecolorfilters.cpp
index e0fd8ec..59a7805 100644
--- a/gm/modecolorfilters.cpp
+++ b/gm/modecolorfilters.cpp
@@ -55,7 +55,7 @@
 class ModeColorFilterGM : public GM {
 public:
     ModeColorFilterGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFF303030));
+        this->setBGColor(0xFF303030);
     }
 
 protected:
diff --git a/gm/multipicturedraw.cpp b/gm/multipicturedraw.cpp
index 4dd0139..3879fe7 100644
--- a/gm/multipicturedraw.cpp
+++ b/gm/multipicturedraw.cpp
@@ -99,7 +99,7 @@
 
     SkPaint greyFill;
     greyFill.setStyle(SkPaint::kFill_Style);
-    greyFill.setColor(sk_tool_utils::color_to_565(SK_ColorLTGRAY));
+    greyFill.setColor(SK_ColorLTGRAY);
 
     SkPaint stroke;
     stroke.setStyle(SkPaint::kStroke_Style);
@@ -154,7 +154,7 @@
 
     SkPaint fill;
     fill.setStyle(SkPaint::kFill_Style);
-    fill.setColor(sk_tool_utils::color_to_565(SK_ColorLTGRAY));
+    fill.setColor(SK_ColorLTGRAY);
 
     SkPaint stroke;
     stroke.setStyle(SkPaint::kStroke_Style);
@@ -480,7 +480,7 @@
 
         void onOnceBeforeDraw() override {
             fPictures[0] = make_hex_plane_picture(SK_ColorWHITE).release();
-            fPictures[1] = make_hex_plane_picture(sk_tool_utils::color_to_565(SK_ColorGRAY)).release();
+            fPictures[1] = make_hex_plane_picture(SK_ColorGRAY).release();
             fPictures[2] = make_sierpinski_picture().release();
             fPictures[3] = make_single_layer_hex_plane_picture().release();
         }
diff --git a/gm/nested.cpp b/gm/nested.cpp
index eb92d83..1b234f2 100644
--- a/gm/nested.cpp
+++ b/gm/nested.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkPath.h"
 #include "SkRandom.h"
 #include "SkRRect.h"
@@ -17,7 +16,7 @@
 class NestedGM : public GM {
 public:
     NestedGM(bool doAA, bool flipped) : fDoAA(doAA), fFlipped(flipped) {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
diff --git a/gm/occludedrrectblur.cpp b/gm/occludedrrectblur.cpp
index e72d292..9b9b7db 100644
--- a/gm/occludedrrectblur.cpp
+++ b/gm/occludedrrectblur.cpp
@@ -223,7 +223,7 @@
 class OccludedRRectBlurGM : public GM {
 public:
     OccludedRRectBlurGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
+        this->setBGColor(0xFFCCCCCC);
     }
 
 protected:
@@ -249,7 +249,7 @@
             // TODO: remove this. Until we actually start skipping the middle draw we need this
             // to provide contrast
             SkPaint temp;
-            temp.setColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
+            temp.setColor(0xFFCCCCCC);
             r.inset(32, 32);
             canvas->drawRect(offset_center_to(r, center.fX, center.fY), temp);
 #endif
diff --git a/gm/offsetimagefilter.cpp b/gm/offsetimagefilter.cpp
index 0ecca71..0c1d32c 100644
--- a/gm/offsetimagefilter.cpp
+++ b/gm/offsetimagefilter.cpp
@@ -37,8 +37,8 @@
 
         fCheckerboard = SkImage::MakeFromBitmap(
             sk_tool_utils::create_checkerboard_bitmap(80, 80,
-                                                      sk_tool_utils::color_to_565(0xFFA0A0A0),
-                                                      sk_tool_utils::color_to_565(0xFF404040),
+                                                      0xFFA0A0A0,
+                                                      0xFF404040,
                                                       8));
     }
 
diff --git a/gm/ovals.cpp b/gm/ovals.cpp
index d6afdcb..df8d49f 100644
--- a/gm/ovals.cpp
+++ b/gm/ovals.cpp
@@ -151,7 +151,7 @@
         rectPaint.setAntiAlias(true);
         rectPaint.setStyle(SkPaint::kStroke_Style);
         rectPaint.setStrokeWidth(SkIntToScalar(0));
-        rectPaint.setColor(sk_tool_utils::color_to_565(SK_ColorLTGRAY));
+        rectPaint.setColor(SK_ColorLTGRAY);
 
         int testCount = 0;
         for (int i = 0; i < fPaints.count(); ++i) {
diff --git a/gm/pathinterior.cpp b/gm/pathinterior.cpp
index 41c1a69..4ad18a6 100644
--- a/gm/pathinterior.cpp
+++ b/gm/pathinterior.cpp
@@ -23,7 +23,7 @@
 class PathInteriorGM : public skiagm::GM {
 public:
     PathInteriorGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
@@ -46,7 +46,7 @@
         bool hasInterior = false;
 #endif
 
-        paint.setColor(sk_tool_utils::color_to_565(hasInterior ? 0xFF8888FF : SK_ColorGRAY));
+        paint.setColor(hasInterior ? sk_tool_utils::color_to_565(0xFF8888FF) : SK_ColorGRAY);
         canvas->drawPath(path, paint);
         paint.setStyle(SkPaint::kStroke_Style);
         paint.setColor(SK_ColorRED);
diff --git a/gm/pictureshader.cpp b/gm/pictureshader.cpp
index df91a33..1f98d46 100644
--- a/gm/pictureshader.cpp
+++ b/gm/pictureshader.cpp
@@ -144,7 +144,7 @@
 
         SkPaint paint;
         paint.setStyle(SkPaint::kFill_Style);
-        paint.setColor(sk_tool_utils::color_to_565(SK_ColorLTGRAY));
+        paint.setColor(SK_ColorLTGRAY);
 
         canvas->save();
         canvas->concat(matrix);
@@ -211,7 +211,7 @@
     canvas->drawPaint(p);
 
     canvas->clipRect(SkRect::MakeXYWH(0, 0, 400, 350));
-    p.setColor(sk_tool_utils::color_to_565(0xFFB6B6B6));  // gray
+    p.setColor(0xFFB6B6B6);  // gray
     canvas->drawPaint(p);
 
     p.setShader(SkShader::MakePictureShader(std::move(picture), SkShader::kRepeat_TileMode,
diff --git a/gm/pixelsnap.cpp b/gm/pixelsnap.cpp
index f4e4582..88fa58a 100644
--- a/gm/pixelsnap.cpp
+++ b/gm/pixelsnap.cpp
@@ -36,9 +36,7 @@
     void onDraw(SkCanvas* canvas) override {
         SkPaint bgPaint;
         bgPaint.setShader(
-                sk_tool_utils::create_checkerboard_shader(
-                sk_tool_utils::color_to_565(0xFFAAAAAA),
-                sk_tool_utils::color_to_565(0xFF777777), 1));
+                sk_tool_utils::create_checkerboard_shader(0xFFAAAAAA, 0xFF777777, 1));
         canvas->drawPaint(bgPaint);
 
         SkString offset;
diff --git a/gm/poly2poly.cpp b/gm/poly2poly.cpp
index 6fb96df..895d956 100644
--- a/gm/poly2poly.cpp
+++ b/gm/poly2poly.cpp
@@ -205,7 +205,7 @@
         matrix.setPolyToPoly(src, dst, count);
         canvas->concat(matrix);
 
-        paint->setColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
+        paint->setColor(SK_ColorGRAY);
         paint->setStyle(SkPaint::kStroke_Style);
         const SkScalar D = 64;
         canvas->drawRect(SkRect::MakeWH(D, D), *paint);
diff --git a/gm/roundrects.cpp b/gm/roundrects.cpp
index 794393e..5079b70 100644
--- a/gm/roundrects.cpp
+++ b/gm/roundrects.cpp
@@ -154,7 +154,7 @@
         rectPaint.setAntiAlias(true);
         rectPaint.setStyle(SkPaint::kStroke_Style);
         rectPaint.setStrokeWidth(SkIntToScalar(0));
-        rectPaint.setColor(sk_tool_utils::color_to_565(SK_ColorLTGRAY));
+        rectPaint.setColor(SK_ColorLTGRAY);
 
         int testCount = 0;
         for (int i = 0; i < fPaints.count(); ++i) {
diff --git a/gm/rrects.cpp b/gm/rrects.cpp
index 143fde3..2fbd3b9 100644
--- a/gm/rrects.cpp
+++ b/gm/rrects.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "GrCaps.h"
 #include "GrContext.h"
 #include "GrRenderTargetContextPriv.h"
@@ -33,7 +32,7 @@
 protected:
 
     void onOnceBeforeDraw() override {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
         this->setUpRRects();
     }
 
diff --git a/gm/samplerstress.cpp b/gm/samplerstress.cpp
index 25ef76c..5f41f3d 100644
--- a/gm/samplerstress.cpp
+++ b/gm/samplerstress.cpp
@@ -130,7 +130,7 @@
                          SkIntToScalar(100), SkIntToScalar(100),
                          paint2);
 
-        paint2.setColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
+        paint2.setColor(SK_ColorGRAY);
 
         canvas->drawPath(path, paint2);
     }
diff --git a/gm/scaledemoji.cpp b/gm/scaledemoji.cpp
index b71c470..a639b01 100644
--- a/gm/scaledemoji.cpp
+++ b/gm/scaledemoji.cpp
@@ -41,7 +41,7 @@
 
     void onDraw(SkCanvas* canvas) override {
 
-        canvas->drawColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
+        canvas->drawColor(SK_ColorGRAY);
 
         SkPaint paint;
         paint.setTypeface(fEmojiFont.fTypeface);
@@ -91,7 +91,7 @@
 
     void onDraw(SkCanvas* canvas) override {
 
-        canvas->drawColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
+        canvas->drawColor(SK_ColorGRAY);
 
         SkPaint paint;
         paint.setTypeface(fEmojiFont.fTypeface);
diff --git a/gm/scaledemoji_rendering.cpp b/gm/scaledemoji_rendering.cpp
index 58dec4a..9ab8e55 100644
--- a/gm/scaledemoji_rendering.cpp
+++ b/gm/scaledemoji_rendering.cpp
@@ -39,7 +39,7 @@
 
     void onDraw(SkCanvas* canvas) override {
 
-        canvas->drawColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
+        canvas->drawColor(SK_ColorGRAY);
         SkScalar y = 0;
 
         for (const auto& typeface: typefaces) {
@@ -78,4 +78,4 @@
 //////////////////////////////////////////////////////////////////////////////
 
 DEF_GM(return new ScaledEmojiRenderingGM;)
-}
\ No newline at end of file
+}
diff --git a/gm/shadertext.cpp b/gm/shadertext.cpp
index 237a149..0158e9c 100644
--- a/gm/shadertext.cpp
+++ b/gm/shadertext.cpp
@@ -89,7 +89,7 @@
 class ShaderTextGM : public GM {
 public:
     ShaderTextGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
diff --git a/gm/shadertext2.cpp b/gm/shadertext2.cpp
index d23409a..cce6699 100644
--- a/gm/shadertext2.cpp
+++ b/gm/shadertext2.cpp
@@ -40,8 +40,7 @@
     const char* fLabel;
 };
 
-DEF_SIMPLE_GM_BG(shadertext2, canvas, 1800, 900,
-                 sk_tool_utils::color_to_565(0xFFDDDDDD)) {
+DEF_SIMPLE_GM_BG(shadertext2, canvas, 1800, 900, 0xFFDDDDDD) {
         constexpr char kText[] = "SKIA";
         constexpr int kTextLen = SK_ARRAY_COUNT(kText) - 1;
         constexpr int kPointSize = 55;
diff --git a/gm/shadertext3.cpp b/gm/shadertext3.cpp
index 010fe22..c3345f2 100644
--- a/gm/shadertext3.cpp
+++ b/gm/shadertext3.cpp
@@ -49,7 +49,7 @@
 class ShaderText3GM : public GM {
 public:
     ShaderText3GM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
diff --git a/gm/shadows.cpp b/gm/shadows.cpp
index 5dba270..0319984 100644
--- a/gm/shadows.cpp
+++ b/gm/shadows.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkBlurDrawLooper.h"
 #include "SkBlurMask.h"
 #include "SkColorFilter.h"
@@ -35,7 +34,7 @@
 
 protected:
     void onOnceBeforeDraw() override {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
         fCirclePath.addCircle(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(10) );
         fRect.set(SkIntToScalar(10), SkIntToScalar(10),
                   SkIntToScalar(30), SkIntToScalar(30));
diff --git a/gm/simple_magnification.cpp b/gm/simple_magnification.cpp
index ef5f9c6..d772ed9 100644
--- a/gm/simple_magnification.cpp
+++ b/gm/simple_magnification.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkColorPriv.h"
 #include "SkImageSource.h"
 #include "SkMagnifierImageFilter.h"
@@ -71,7 +70,7 @@
 class SimpleMagnificationGM : public skiagm::GM {
 public:
     SimpleMagnificationGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
+        this->setBGColor(0xFFCCCCCC);
     }
 
 protected:
diff --git a/gm/simpleaaclip.cpp b/gm/simpleaaclip.cpp
index 5e4067f..36eb5af 100644
--- a/gm/simpleaaclip.cpp
+++ b/gm/simpleaaclip.cpp
@@ -65,7 +65,7 @@
 
         fBasePath.addRoundRect(fBase, SkIntToScalar(5), SkIntToScalar(5));
         fRectPath.addRoundRect(fRect, SkIntToScalar(5), SkIntToScalar(5));
-        INHERITED::setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        INHERITED::setBGColor(0xFFDDDDDD);
     }
 
     void buildRgn(SkAAClip* clip, SkClipOp op) {
diff --git a/gm/skbug1719.cpp b/gm/skbug1719.cpp
index 8f16926..ca9e8bd 100644
--- a/gm/skbug1719.cpp
+++ b/gm/skbug1719.cpp
@@ -19,8 +19,7 @@
  *
  * The correct image should look like a thin stroked round rect.
  */
-DEF_SIMPLE_GM_BG(skbug1719, canvas, 300, 100,
-                 sk_tool_utils::color_to_565(0xFF303030)) {
+DEF_SIMPLE_GM_BG(skbug1719, canvas, 300, 100, 0xFF303030) {
         canvas->translate(SkIntToScalar(-800), SkIntToScalar(-650));
 
         // The data is lifted from an SKP that exhibited the bug.
diff --git a/gm/strokerect.cpp b/gm/strokerect.cpp
index 92b812c..7978f66 100644
--- a/gm/strokerect.cpp
+++ b/gm/strokerect.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkCanvas.h"
 #include "SkPath.h"
 
@@ -18,7 +17,7 @@
     paint.setAntiAlias(true);
     paint.setStyle(doFill ? SkPaint::kStrokeAndFill_Style : SkPaint::kStroke_Style);
 
-    paint.setColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
+    paint.setColor(SK_ColorGRAY);
     paint.setStrokeWidth(STROKE_WIDTH);
     paint.setStrokeJoin(join);
     canvas->drawRect(rect, paint);
diff --git a/gm/tablecolorfilter.cpp b/gm/tablecolorfilter.cpp
index 8902d59..44d690d 100644
--- a/gm/tablecolorfilter.cpp
+++ b/gm/tablecolorfilter.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "gm.h"
-#include "sk_tool_utils.h"
 #include "SkCanvas.h"
 #include "SkColorFilterImageFilter.h"
 #include "SkGradientShader.h"
@@ -111,7 +110,7 @@
     }
 
     virtual void onDraw(SkCanvas* canvas) {
-        canvas->drawColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        canvas->drawColor(0xFFDDDDDD);
         canvas->translate(20, 20);
 
 
@@ -224,7 +223,7 @@
         SkBitmap bm;
         make_bm1(&bm);
 
-        canvas->drawColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        canvas->drawColor(0xFFDDDDDD);
 
         const int MODES = MODE_COUNT * COLOR_COUNT;
         sk_sp<SkColorFilter> filters[MODES];
diff --git a/gm/textblobblockreordering.cpp b/gm/textblobblockreordering.cpp
index 8a1f36d..bed5d2f 100644
--- a/gm/textblobblockreordering.cpp
+++ b/gm/textblobblockreordering.cpp
@@ -51,7 +51,7 @@
     // GrDrawOp doesn't get combined with the first and third. Ultimately, they will be flushed in
     // the order first, third, and then second.
     void onDraw(SkCanvas* canvas) override {
-        canvas->drawColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
+        canvas->drawColor(SK_ColorGRAY);
 
         SkPaint paint;
         canvas->translate(10, 40);
diff --git a/gm/textblobcolortrans.cpp b/gm/textblobcolortrans.cpp
index 1362023..cba50a3 100644
--- a/gm/textblobcolortrans.cpp
+++ b/gm/textblobcolortrans.cpp
@@ -62,7 +62,7 @@
 
     void onDraw(SkCanvas* canvas) override {
 
-        canvas->drawColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
+        canvas->drawColor(SK_ColorGRAY);
 
         SkPaint paint;
         canvas->translate(10, 40);
@@ -72,8 +72,7 @@
         // Colors were chosen to map to pairs of canonical colors.  The GPU Backend will cache A8
         // Texture Blobs based on the canonical color they map to.  Canonical colors are used to
         // create masks.  For A8 there are 8 of them.
-        SkColor colors[] = {SK_ColorCYAN, sk_tool_utils::color_to_565(SK_ColorLTGRAY),
-                SK_ColorYELLOW, SK_ColorWHITE};
+        SkColor colors[] = {SK_ColorCYAN, SK_ColorLTGRAY, SK_ColorYELLOW, SK_ColorWHITE};
 
         size_t count = SK_ARRAY_COUNT(colors);
         size_t colorIndex = 0;
diff --git a/gm/textbloblooper.cpp b/gm/textbloblooper.cpp
index a6a7725..1faf754 100644
--- a/gm/textbloblooper.cpp
+++ b/gm/textbloblooper.cpp
@@ -225,7 +225,7 @@
 
     void onDraw(SkCanvas* canvas) override {
 
-        canvas->drawColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
+        canvas->drawColor(SK_ColorGRAY);
 
         SkPaint paint;
         canvas->translate(10, 40);
diff --git a/gm/textblobmixedsizes.cpp b/gm/textblobmixedsizes.cpp
index fcb1a59..4a56cf1 100644
--- a/gm/textblobmixedsizes.cpp
+++ b/gm/textblobmixedsizes.cpp
@@ -111,7 +111,7 @@
             // init our new canvas with the old canvas's matrix
             canvas->setMatrix(inputCanvas->getTotalMatrix());
         }
-        canvas->drawColor(sk_tool_utils::color_to_565(SK_ColorWHITE));
+        canvas->drawColor(SK_ColorWHITE);
 
         SkRect bounds = fBlob->bounds();
 
@@ -125,7 +125,7 @@
 
         SkPaint paint;
         if (!fUseDFT) {
-            paint.setColor(sk_tool_utils::color_to_565(SK_ColorWHITE));
+            paint.setColor(SK_ColorWHITE);
         }
         paint.setAntiAlias(false);
 
@@ -133,7 +133,7 @@
 
         // setup blur paint
         SkPaint blurPaint(paint);
-        blurPaint.setColor(sk_tool_utils::color_to_565(SK_ColorBLACK));
+        blurPaint.setColor(SK_ColorBLACK);
         blurPaint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, kSigma));
 
         for (int i = 0; i < 4; i++) {
diff --git a/gm/textblobrandomfont.cpp b/gm/textblobrandomfont.cpp
index 87dabf6..58749e9 100644
--- a/gm/textblobrandomfont.cpp
+++ b/gm/textblobrandomfont.cpp
@@ -100,7 +100,7 @@
             return;
         }
 
-        canvas->drawColor(sk_tool_utils::color_to_565(SK_ColorWHITE));
+        canvas->drawColor(SK_ColorWHITE);
 
         SkImageInfo info = SkImageInfo::Make(kWidth, kHeight, canvas->imageInfo().colorType(),
                                              kPremul_SkAlphaType,
diff --git a/gm/textblobtransforms.cpp b/gm/textblobtransforms.cpp
index 597227b..8bf24fd 100644
--- a/gm/textblobtransforms.cpp
+++ b/gm/textblobtransforms.cpp
@@ -63,7 +63,7 @@
 
     void onDraw(SkCanvas* canvas) override {
 
-        canvas->drawColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
+        canvas->drawColor(SK_ColorGRAY);
 
         SkPaint paint;
 
@@ -73,7 +73,7 @@
         // Colors were chosen to map to pairs of canonical colors.  The GPU Backend will cache A8
         // Texture Blobs based on the canonical color they map to.  Canonical colors are used to
         // create masks.  For A8 there are 8 of them.
-        //SkColor colors[] = {SK_ColorCYAN, sk_tool_utils::color_to_565(SK_ColorLTGRAY), SK_ColorYELLOW, SK_ColorWHITE};
+        //SkColor colors[] = {SK_ColorCYAN, SK_ColorLTGRAY, SK_ColorYELLOW, SK_ColorWHITE};
 
         SkScalar xOffset = SkScalarCeilToScalar(bounds.width());
         SkScalar yOffset = SkScalarCeilToScalar(bounds.height());
diff --git a/gm/tileimagefilter.cpp b/gm/tileimagefilter.cpp
index c057235..a2a731e 100644
--- a/gm/tileimagefilter.cpp
+++ b/gm/tileimagefilter.cpp
@@ -40,8 +40,8 @@
 
         fCheckerboard = SkImage::MakeFromBitmap(
             sk_tool_utils::create_checkerboard_bitmap(80, 80,
-                                                      sk_tool_utils::color_to_565(0xFFA0A0A0),
-                                                      sk_tool_utils::color_to_565(0xFF404040),
+                                                      0xFFA0A0A0,
+                                                      0xFF404040,
                                                       8));
     }
 
diff --git a/gm/tinybitmap.cpp b/gm/tinybitmap.cpp
index 0804e92..0f69afa 100644
--- a/gm/tinybitmap.cpp
+++ b/gm/tinybitmap.cpp
@@ -23,7 +23,7 @@
 class TinyBitmapGM : public GM {
 public:
     TinyBitmapGM() {
-        this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
+        this->setBGColor(0xFFDDDDDD);
     }
 
 protected:
diff --git a/gm/transparency.cpp b/gm/transparency.cpp
index a998c0b..1b008fe 100644
--- a/gm/transparency.cpp
+++ b/gm/transparency.cpp
@@ -8,7 +8,6 @@
 #include "SkGradientShader.h"
 #include "SkSurface.h"
 #include "gm.h"
-#include "sk_tool_utils.h"
 
 static void make_transparency(SkCanvas* canvas, SkScalar width, SkScalar height) {
     SkPoint pts[2];
@@ -59,8 +58,7 @@
  *  checkerboard pattern looks correct.
  */
 DEF_SIMPLE_GM(transparency_check, canvas, 1792, 1080) {
-    checkerboard(canvas, sk_tool_utils::color_to_565(0xFF999999),
-            sk_tool_utils::color_to_565(0xFF666666), 8);
+    checkerboard(canvas, 0xFF999999, 0xFF666666, 8);
     {
         SkAutoCanvasRestore autoCanvasRestore(canvas, true);
         auto surface(SkSurface::MakeRasterN32Premul(256, 9));
diff --git a/gm/xfermodeimagefilter.cpp b/gm/xfermodeimagefilter.cpp
index ea55fab..280400a 100644
--- a/gm/xfermodeimagefilter.cpp
+++ b/gm/xfermodeimagefilter.cpp
@@ -39,8 +39,8 @@
 
         fCheckerboard = SkImage::MakeFromBitmap(
             sk_tool_utils::create_checkerboard_bitmap(80, 80,
-                                                      sk_tool_utils::color_to_565(0xFFA0A0A0),
-                                                      sk_tool_utils::color_to_565(0xFF404040),
+                                                      0xFFA0A0A0,
+                                                      0xFF404040,
                                                       8));
     }
 
