diff --git a/gyp/SampleApp.gyp b/gyp/SampleApp.gyp
index d5a3479..6f39f71 100644
--- a/gyp/SampleApp.gyp
+++ b/gyp/SampleApp.gyp
@@ -72,6 +72,7 @@
         '../samplecode/SampleHairCurves.cpp',
         '../samplecode/SampleHairline.cpp',
         '../samplecode/SampleHairModes.cpp',
+        '../samplecode/SampleIdentityScale.cpp',
         '../samplecode/SampleLayerMask.cpp',
         '../samplecode/SampleLayers.cpp',
         '../samplecode/SampleLCD.cpp',
diff --git a/samplecode/SampleIdentityScale.cpp b/samplecode/SampleIdentityScale.cpp
new file mode 100644
index 0000000..a6b5c5c
--- /dev/null
+++ b/samplecode/SampleIdentityScale.cpp
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "gm.h"
+
+#include "Resources.h"
+#include "SampleCode.h"
+#include "SkBlurMaskFilter.h"
+#include "SkCanvas.h"
+#include "SkColorPriv.h"
+#include "SkImageDecoder.h"
+#include "SkRandom.h"
+#include "SkStream.h"
+#include "SkTime.h"
+
+// Intended to exercise pixel snapping observed with scaled images (and
+// with non-scaled images, but for a different reason):  Bug 1145
+
+class IdentityScaleView : public SampleView {
+public:
+    IdentityScaleView(const char imageFilename[]) {
+      SkString resourcePath = GetResourcePath(imageFilename);
+      SkImageDecoder* codec = NULL;
+      SkFILEStream stream(resourcePath.c_str());
+      if (stream.isValid()) {
+          codec = SkImageDecoder::Factory(&stream);
+      }
+      if (codec) {
+          stream.rewind();
+          codec->decode(&stream, &fBM, kN32_SkColorType, SkImageDecoder::kDecodePixels_Mode);
+          SkDELETE(codec);
+      } else {
+          fBM.allocN32Pixels(1, 1);
+          *(fBM.getAddr32(0,0)) = 0xFF0000FF; // red == bad
+      }
+    }
+
+protected:
+    SkBitmap fBM;
+
+    // overrides from SkEventSink
+    virtual bool onQuery(SkEvent* evt) SK_OVERRIDE {
+        if (SampleCode::TitleQ(*evt)) {
+            SampleCode::TitleR(evt, "IdentityScale");
+            return true;
+        }
+        return this->INHERITED::onQuery(evt);
+    }
+
+    virtual void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
+
+        SkPaint paint;
+
+        paint.setAntiAlias(true);
+        paint.setTextSize(48);
+        paint.setFilterLevel(SkPaint::kHigh_FilterLevel);
+
+        SkTime::DateTime time;
+        SkTime::GetDateTime(&time);
+
+        bool use_scale = (time.fSecond % 2 == 1);
+        const char *text;
+
+        canvas->save();
+        if (use_scale) {
+          text = "Scaled = 1";
+        } else {
+
+          SkRect r = { 100, 100, 356, 356 };
+          SkPath clipPath;
+          clipPath.addRoundRect(r, SkIntToScalar(5), SkIntToScalar(5));
+          canvas->clipPath(clipPath, SkRegion::kIntersect_Op, SkToBool(1));
+          text = "Scaled = 0";
+        }
+        canvas->drawBitmap( fBM, 100, 100, &paint );
+        canvas->restore();
+        canvas->drawText( text, strlen(text), 100, 400, paint );
+        this->inval(NULL);
+    }
+
+private:
+    typedef SampleView INHERITED;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+static SkView* MyFactory() { return new IdentityScaleView("mandrill_256.png"); }
+static SkViewRegister reg(MyFactory);
