blob: 9c70770d4694deb2838603898a42c99018622c8b [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"
senorblanco@chromium.org985fa792012-10-24 15:14:26 +000011#include "SkBlendImageFilter.h"
senorblanco@chromium.orgf1369ce2012-08-20 14:53:21 +000012#include "SkBlurImageFilter.h"
senorblanco@chromium.org44888c62012-08-20 19:23:24 +000013#include "SkColorFilter.h"
senorblanco@chromium.org985fa792012-10-24 15:14:26 +000014#include "SkColorMatrixFilter.h"
senorblanco@chromium.org44888c62012-08-20 19:23:24 +000015#include "SkColorFilterImageFilter.h"
senorblanco@chromium.org4a9a6122012-12-04 14:18:50 +000016#include "SkMergeImageFilter.h"
senorblanco@chromium.orgf1369ce2012-08-20 14:53:21 +000017#include "SkMorphologyImageFilter.h"
18
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();
35 SkDevice device(fBitmap);
36 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.org985fa792012-10-24 15:14:26 +000077 SkAutoTUnref<SkImageFilter> blendColor(new SkBlendImageFilter(SkBlendImageFilter::kNormal_Mode, colorMorph));
78
79 SkPaint paint;
80 paint.setImageFilter(blendColor);
81 canvas->drawBitmap(fBitmap, 100, 0, &paint);
82 }
senorblanco@chromium.orgf1369ce2012-08-20 14:53:21 +000083 }
84
85private:
86 typedef GM INHERITED;
87 SkBitmap fBitmap;
88 bool fInitialized;
89};
90
91///////////////////////////////////////////////////////////////////////////////
92
93static skiagm::GM* MyFactory(void*) { return new ImageFiltersGraphGM; }
94static skiagm::GMRegistry reg(MyFactory);
95
96