aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/extractbitmap.cpp
diff options
context:
space:
mode:
authorGravatar scroggo@google.com <scroggo@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-02 13:35:09 +0000
committerGravatar scroggo@google.com <scroggo@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-02 13:35:09 +0000
commit4f1f6bf0505b80e14c2f3d7299d4ae565fdd1e3a (patch)
treecc68e896b04ef1cd29f4e587fe26ebd299ccfc22 /gm/extractbitmap.cpp
parent366f1c6a09f63c76e78145cb08028f66062f31fd (diff)
Properly handle extracted bitmaps in cross process/shared addr space SkGPipe.
Use the pixel ref which we have already copied and the appropriate pixel ref offset. Turn SampleDrawBitmap into a GM to test this functionality. Review URL: https://codereview.appspot.com/6348059 git-svn-id: http://skia.googlecode.com/svn/trunk@4417 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm/extractbitmap.cpp')
-rw-r--r--gm/extractbitmap.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/gm/extractbitmap.cpp b/gm/extractbitmap.cpp
new file mode 100644
index 0000000000..5002f1b22a
--- /dev/null
+++ b/gm/extractbitmap.cpp
@@ -0,0 +1,86 @@
+
+/*
+ * Copyright 2011 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 "SkBitmap.h"
+#include "SkCanvas.h"
+#include "SkDevice.h"
+#include "SkString.h"
+
+namespace skiagm {
+
+static void create_bitmap(SkBitmap* bitmap) {
+ const int W = 100;
+ const int H = 100;
+ bitmap->setConfig(SkBitmap::kARGB_8888_Config, W, H);
+ bitmap->allocPixels();
+
+ SkCanvas canvas(*bitmap);
+ canvas.drawColor(SK_ColorRED);
+ SkPaint paint;
+ paint.setColor(SK_ColorBLUE);
+ canvas.drawCircle(SkIntToScalar(W)/2, SkIntToScalar(H)/2, SkIntToScalar(W)/2, paint);
+}
+
+class ExtractBitmapGM : public GM {
+public:
+ ExtractBitmapGM() {}
+
+protected:
+ // overrides from SkEventSink
+ virtual SkString onShortName() SK_OVERRIDE {
+ return SkString("extractbitmap");
+ }
+
+ virtual SkISize onISize() SK_OVERRIDE {
+ return make_isize(600, 600);
+ }
+
+ virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
+ SkBitmap bitmap;
+ create_bitmap(&bitmap);
+ int x = bitmap.width() / 2;
+ int y = bitmap.height() / 2;
+ SkBitmap subset;
+ bitmap.extractSubset(&subset, SkIRect::MakeXYWH(x, y, x, y));
+
+ canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
+
+ canvas->drawBitmap(bitmap, 0, 0);
+ canvas->drawBitmap(subset, 0, 0);
+
+ // Now do the same but with a device bitmap as source image
+ SkRefPtr<SkDevice> primaryDevice(canvas->getDevice());
+ SkRefPtr<SkDevice> secondDevice(canvas->createCompatibleDevice(
+ SkBitmap::kARGB_8888_Config, bitmap.width(),
+ bitmap.height(), true));
+ secondDevice->unref();
+ SkCanvas secondCanvas(secondDevice.get());
+ secondCanvas.writePixels(bitmap, 0, 0);
+
+ SkBitmap deviceBitmap = secondDevice->accessBitmap(false);
+ SkBitmap deviceSubset;
+ deviceBitmap.extractSubset(&deviceSubset,
+ SkIRect::MakeXYWH(x, y, x, y));
+
+ canvas->translate(SkIntToScalar(120), SkIntToScalar(0));
+
+ canvas->drawBitmap(deviceBitmap, 0, 0);
+ canvas->drawBitmap(deviceSubset, 0, 0);
+
+ }
+
+private:
+ typedef GM INHERITED;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+static GM* MyFactory(void*) { return new ExtractBitmapGM; }
+static GMRegistry reg(MyFactory);
+
+}