aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/colormatrix.cpp
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-10-16 17:50:48 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-10-16 17:50:48 +0000
commit1282009256618521f8dd10dd7343df31d336b7c3 (patch)
tree5f6e7621ef661ba6cbc696c4477c45a8b22083ec /gm/colormatrix.cpp
parent3fe16908349ba6b8240a3ba0febf1088f476df73 (diff)
Add transparent source bitmap to colormatrix GM.
R=robertphillips@google.com Review URL: https://codereview.appspot.com/6727043 git-svn-id: http://skia.googlecode.com/svn/trunk@5969 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm/colormatrix.cpp')
-rw-r--r--gm/colormatrix.cpp139
1 files changed, 84 insertions, 55 deletions
diff --git a/gm/colormatrix.cpp b/gm/colormatrix.cpp
index af305ee04f..16086f0346 100644
--- a/gm/colormatrix.cpp
+++ b/gm/colormatrix.cpp
@@ -7,6 +7,7 @@
#include "gm.h"
#include "SkColorMatrixFilter.h"
+#include "SkGradientShader.h"
#define WIDTH 500
#define HEIGHT 500
@@ -41,7 +42,8 @@ class ColorMatrixGM : public GM {
SkOnce fOnce;
void init() {
if (fOnce.once()) {
- fBitmap = createBitmap(64, 64);
+ fSolidBitmap = this->createSolidBitmap(64, 64);
+ fTransparentBitmap = this->createTransparentBitmap(64, 64);
}
}
@@ -59,7 +61,7 @@ protected:
return make_isize(WIDTH, HEIGHT);
}
- SkBitmap createBitmap(int width, int height) {
+ SkBitmap createSolidBitmap(int width, int height) {
SkBitmap bm;
bm.setConfig(SkBitmap::kARGB_8888_Config, width, height);
bm.allocPixels();
@@ -75,68 +77,95 @@ protected:
}
return bm;
}
+
+ // creates a bitmap with shades of transparent gray.
+ SkBitmap createTransparentBitmap(int width, int height) {
+ SkBitmap bm;
+ bm.setConfig(SkBitmap::kARGB_8888_Config, width, height);
+ bm.allocPixels();
+ SkCanvas canvas(bm);
+ canvas.clear(0x0);
+
+ SkPoint pts[] = {{0, 0}, {SkIntToScalar(width), SkIntToScalar(height)}};
+ SkColor colors[] = {0x00000000, 0xFFFFFFFF};
+ SkPaint paint;
+ paint.setShader(SkGradientShader::CreateLinear(pts, colors, NULL, 2,
+ SkShader::kClamp_TileMode))->unref();
+ canvas.drawRect(SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(height)), paint);
+ return bm;
+ }
+
virtual void onDraw(SkCanvas* canvas) {
this->init();
SkPaint paint;
SkColorMatrix matrix;
- matrix.setIdentity();
- setColorMatrix(&paint, matrix);
- canvas->drawBitmap(fBitmap, 0, 0, &paint);
-
- matrix.setRotate(SkColorMatrix::kR_Axis, 90);
- setColorMatrix(&paint, matrix);
- canvas->drawBitmap(fBitmap, 80, 0, &paint);
-
- matrix.setRotate(SkColorMatrix::kG_Axis, 90);
- setColorMatrix(&paint, matrix);
- canvas->drawBitmap(fBitmap, 160, 0, &paint);
-
- matrix.setRotate(SkColorMatrix::kB_Axis, 90);
- setColorMatrix(&paint, matrix);
- canvas->drawBitmap(fBitmap, 240, 0, &paint);
-
- matrix.setSaturation(SkFloatToScalar(0.0f));
- setColorMatrix(&paint, matrix);
- canvas->drawBitmap(fBitmap, 0, 80, &paint);
-
- matrix.setSaturation(SkFloatToScalar(0.5f));
- setColorMatrix(&paint, matrix);
- canvas->drawBitmap(fBitmap, 80, 80, &paint);
-
- matrix.setSaturation(SkFloatToScalar(1.0f));
- setColorMatrix(&paint, matrix);
- canvas->drawBitmap(fBitmap, 160, 80, &paint);
-
- matrix.setSaturation(SkFloatToScalar(2.0f));
- setColorMatrix(&paint, matrix);
- canvas->drawBitmap(fBitmap, 240, 80, &paint);
-
- matrix.setRGB2YUV();
- setColorMatrix(&paint, matrix);
- canvas->drawBitmap(fBitmap, 0, 160, &paint);
-
- matrix.setYUV2RGB();
- setColorMatrix(&paint, matrix);
- canvas->drawBitmap(fBitmap, 80, 160, &paint);
-
- SkScalar s1 = SK_Scalar1;
- SkScalar s255 = SkIntToScalar(255);
- // Move red into alpha, set color to white
- SkScalar data[20] = {
- 0, 0, 0, 0, s255,
- 0, 0, 0, 0, s255,
- 0, 0, 0, 0, s255,
- s1, 0, 0, 0, 0,
- };
-
- setArray(&paint, data);
- canvas->drawBitmap(fBitmap, 160, 160, &paint);
+ paint.setXfermodeMode(SkXfermode::kSrc_Mode);
+ const SkBitmap bmps[] = { fSolidBitmap, fTransparentBitmap };
+
+ for (size_t i = 0; i < SK_ARRAY_COUNT(bmps); ++i) {
+
+ matrix.setIdentity();
+ setColorMatrix(&paint, matrix);
+ canvas->drawBitmap(bmps[i], 0, 0, &paint);
+
+ matrix.setRotate(SkColorMatrix::kR_Axis, 90);
+ setColorMatrix(&paint, matrix);
+ canvas->drawBitmap(bmps[i], 80, 0, &paint);
+
+ matrix.setRotate(SkColorMatrix::kG_Axis, 90);
+ setColorMatrix(&paint, matrix);
+ canvas->drawBitmap(bmps[i], 160, 0, &paint);
+
+ matrix.setRotate(SkColorMatrix::kB_Axis, 90);
+ setColorMatrix(&paint, matrix);
+ canvas->drawBitmap(bmps[i], 240, 0, &paint);
+
+ matrix.setSaturation(SkFloatToScalar(0.0f));
+ setColorMatrix(&paint, matrix);
+ canvas->drawBitmap(bmps[i], 0, 80, &paint);
+
+ matrix.setSaturation(SkFloatToScalar(0.5f));
+ setColorMatrix(&paint, matrix);
+ canvas->drawBitmap(bmps[i], 80, 80, &paint);
+
+ matrix.setSaturation(SkFloatToScalar(1.0f));
+ setColorMatrix(&paint, matrix);
+ canvas->drawBitmap(bmps[i], 160, 80, &paint);
+
+ matrix.setSaturation(SkFloatToScalar(2.0f));
+ setColorMatrix(&paint, matrix);
+ canvas->drawBitmap(bmps[i], 240, 80, &paint);
+
+ matrix.setRGB2YUV();
+ setColorMatrix(&paint, matrix);
+ canvas->drawBitmap(bmps[i], 0, 160, &paint);
+
+ matrix.setYUV2RGB();
+ setColorMatrix(&paint, matrix);
+ canvas->drawBitmap(bmps[i], 80, 160, &paint);
+
+ SkScalar s1 = SK_Scalar1;
+ SkScalar s255 = SkIntToScalar(255);
+ // Move red into alpha, set color to white
+ SkScalar data[20] = {
+ 0, 0, 0, 0, s255,
+ 0, 0, 0, 0, s255,
+ 0, 0, 0, 0, s255,
+ s1, 0, 0, 0, 0,
+ };
+
+ setArray(&paint, data);
+ canvas->drawBitmap(bmps[i], 160, 160, &paint);
+
+ canvas->translate(0, 240);
+ }
}
private:
- SkBitmap fBitmap;
+ SkBitmap fSolidBitmap;
+ SkBitmap fTransparentBitmap;
typedef GM INHERITED;
};