blob: 2ead0476455bed8c1a875aff8780eea92d3d9d00 [file] [log] [blame]
nicolasroard93dfe7a2012-10-08 21:04:48 -07001
2package com.android.gallery3d.filtershow.filters;
3
4import android.graphics.Bitmap;
5import android.graphics.Canvas;
6import android.graphics.Color;
7import android.graphics.Paint;
8import android.graphics.Path;
9import android.graphics.RectF;
10
11public class ImageFilterParametricBorder extends ImageFilter {
12 private int mBorderColor = Color.WHITE;
13 private int mBorderSize = 10;
14 private int mBorderCornerRadius = 10;
15
16 public ImageFilterParametricBorder() {
17 mName = "Border";
18 }
19
20 public ImageFilterParametricBorder(int color, int size, int radius) {
21 setBorder(color, size, radius);
22 }
23
24 @Override
25 public ImageFilter clone() throws CloneNotSupportedException {
26 ImageFilterParametricBorder filter = (ImageFilterParametricBorder) super.clone();
27 filter.setBorder(mBorderColor, mBorderSize, mBorderCornerRadius);
28 return filter;
29 }
30
31 @Override
32 public boolean same(ImageFilter filter) {
33 boolean isBorderFilter = super.same(filter);
34 if (!isBorderFilter) {
35 return false;
36 }
37 ImageFilterParametricBorder borderFilter = (ImageFilterParametricBorder) filter;
38 if (borderFilter.mBorderColor != mBorderColor) {
39 return false;
40 }
41 if (borderFilter.mBorderSize != mBorderSize) {
42 return false;
43 }
44 if (borderFilter.mBorderCornerRadius != mBorderCornerRadius) {
45 return false;
46 }
47 return true;
48 }
49
50 public void setBorder(int color, int size, int radius) {
51 mBorderColor = color;
52 mBorderSize = size;
53 mBorderCornerRadius = radius;
54 }
55
56 @Override
57 public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) {
58 Canvas canvas = new Canvas(bitmap);
59 Path border = new Path();
60 border.moveTo(0, 0);
61 int w = bitmap.getWidth();
62 int h = bitmap.getHeight();
63 float bs = mBorderSize * scaleFactor;
64 float r = mBorderCornerRadius * scaleFactor;
65 border.lineTo(0, h);
66 border.lineTo(w, h);
67 border.lineTo(w, 0);
68 border.lineTo(0, 0);
69 border.addRoundRect(new RectF(bs, bs, w - bs, h - bs),
70 r, r, Path.Direction.CW);
71
72 Paint paint = new Paint();
73 paint.setAntiAlias(true);
74 paint.setColor(mBorderColor);
75 canvas.drawPath(border, paint);
76 return bitmap;
77 }
78
79}