blob: 38df075bd8a9c207360e252d2f086bf86a029906 [file] [log] [blame]
senorblanco@chromium.orgf1369ce2012-08-20 14:53:21 +00001/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "gm.h"
9
10#include "SkBitmapSource.h"
11#include "SkBlurImageFilter.h"
senorblanco@chromium.org44888c62012-08-20 19:23:24 +000012#include "SkColorFilter.h"
senorblanco@chromium.org985fa792012-10-24 15:14:26 +000013#include "SkColorMatrixFilter.h"
senorblanco@chromium.org44888c62012-08-20 19:23:24 +000014#include "SkColorFilterImageFilter.h"
senorblanco@chromium.org4a9a6122012-12-04 14:18:50 +000015#include "SkMergeImageFilter.h"
senorblanco@chromium.orgf1369ce2012-08-20 14:53:21 +000016#include "SkMorphologyImageFilter.h"
senorblanco@chromium.org350b4d52013-08-01 14:59:05 +000017#include "SkXfermodeImageFilter.h"
senorblanco@chromium.orgf1369ce2012-08-20 14:53:21 +000018
19#include "SkTestImageFilters.h"
20
21///////////////////////////////////////////////////////////////////////////////
22
23class ImageFiltersGraphGM : public skiagm::GM {
24public:
25 ImageFiltersGraphGM() : fInitialized(false) {}
26
27protected:
senorblanco@chromium.orgf1369ce2012-08-20 14:53:21 +000028 virtual SkString onShortName() {
29 return SkString("imagefiltersgraph");
30 }
31
32 void make_bitmap() {
33 fBitmap.setConfig(SkBitmap::kARGB_8888_Config, 100, 100);
34 fBitmap.allocPixels();
robertphillips@google.com9b051a32013-08-20 20:06:40 +000035 SkDevice device(fBitmap);
senorblanco@chromium.orgf1369ce2012-08-20 14:53:21 +000036 SkCanvas canvas(&device);
37 canvas.clear(0x00000000);
38 SkPaint paint;
39 paint.setAntiAlias(true);
40 paint.setColor(0xFFFFFFFF);
41 paint.setTextSize(SkIntToScalar(96));
42 const char* str = "e";
43 canvas.drawText(str, strlen(str), SkIntToScalar(20), SkIntToScalar(70), paint);
44 }
45
senorblanco@chromium.org985fa792012-10-24 15:14:26 +000046 virtual SkISize onISize() { return SkISize::Make(200, 100); }
senorblanco@chromium.orgf1369ce2012-08-20 14:53:21 +000047
48 virtual void onDraw(SkCanvas* canvas) {
49 if (!fInitialized) {
50 this->make_bitmap();
51 fInitialized = true;
52 }
53 canvas->clear(0x00000000);
senorblanco@chromium.org985fa792012-10-24 15:14:26 +000054 {
55 SkAutoTUnref<SkImageFilter> bitmapSource(new SkBitmapSource(fBitmap));
56 SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateModeFilter(SK_ColorRED,
57 SkXfermode::kSrcIn_Mode));
58 SkAutoTUnref<SkImageFilter> blur(new SkBlurImageFilter(4.0f, 4.0f, bitmapSource));
59 SkAutoTUnref<SkImageFilter> erode(new SkErodeImageFilter(4, 4, blur));
senorblanco@chromium.orgcd9f5592012-10-26 19:37:00 +000060 SkAutoTUnref<SkImageFilter> color(SkColorFilterImageFilter::Create(cf, erode));
senorblanco@chromium.org985fa792012-10-24 15:14:26 +000061 SkAutoTUnref<SkImageFilter> merge(new SkMergeImageFilter(blur, color));
rmistry@google.comae933ce2012-08-23 18:19:56 +000062
senorblanco@chromium.org985fa792012-10-24 15:14:26 +000063 SkPaint paint;
64 paint.setImageFilter(merge);
65 canvas->drawPaint(paint);
66 }
67 {
68 SkAutoTUnref<SkImageFilter> morph(new SkDilateImageFilter(5, 5));
senorblanco@chromium.orgf1369ce2012-08-20 14:53:21 +000069
senorblanco@chromium.org985fa792012-10-24 15:14:26 +000070 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0,
71 0, SK_Scalar1, 0, 0, 0,
72 0, 0, SK_Scalar1, 0, 0,
73 0, 0, 0, SkFloatToScalar(0.5f), 0 };
senorblanco@chromium.orgf1369ce2012-08-20 14:53:21 +000074
senorblanco@chromium.org985fa792012-10-24 15:14:26 +000075 SkAutoTUnref<SkColorFilter> matrixFilter(new SkColorMatrixFilter(matrix));
senorblanco@chromium.orgcd9f5592012-10-26 19:37:00 +000076 SkAutoTUnref<SkImageFilter> colorMorph(SkColorFilterImageFilter::Create(matrixFilter, morph));
senorblanco@chromium.org350b4d52013-08-01 14:59:05 +000077 SkAutoTUnref<SkXfermode> mode(SkXfermode::Create(SkXfermode::kSrcOver_Mode));
78 SkAutoTUnref<SkImageFilter> blendColor(new SkXfermodeImageFilter(mode, colorMorph));
senorblanco@chromium.org985fa792012-10-24 15:14:26 +000079
80 SkPaint paint;
81 paint.setImageFilter(blendColor);
82 canvas->drawBitmap(fBitmap, 100, 0, &paint);
83 }
senorblanco@chromium.orgf1369ce2012-08-20 14:53:21 +000084 }
85
86private:
87 typedef GM INHERITED;
88 SkBitmap fBitmap;
89 bool fInitialized;
90};
91
92///////////////////////////////////////////////////////////////////////////////
93
94static skiagm::GM* MyFactory(void*) { return new ImageFiltersGraphGM; }
95static skiagm::GMRegistry reg(MyFactory);