package com.android.gallery3d.filtershow.filters; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; public class ImageFilterParametricBorder extends ImageFilter { private int mBorderColor = Color.WHITE; private int mBorderSize = 10; private int mBorderCornerRadius = 10; public ImageFilterParametricBorder() { mName = "Border"; } public ImageFilterParametricBorder(int color, int size, int radius) { setBorder(color, size, radius); } @Override public ImageFilter clone() throws CloneNotSupportedException { ImageFilterParametricBorder filter = (ImageFilterParametricBorder) super.clone(); filter.setBorder(mBorderColor, mBorderSize, mBorderCornerRadius); return filter; } @Override public boolean same(ImageFilter filter) { boolean isBorderFilter = super.same(filter); if (!isBorderFilter) { return false; } ImageFilterParametricBorder borderFilter = (ImageFilterParametricBorder) filter; if (borderFilter.mBorderColor != mBorderColor) { return false; } if (borderFilter.mBorderSize != mBorderSize) { return false; } if (borderFilter.mBorderCornerRadius != mBorderCornerRadius) { return false; } return true; } public void setBorder(int color, int size, int radius) { mBorderColor = color; mBorderSize = size; mBorderCornerRadius = radius; } @Override public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) { Canvas canvas = new Canvas(bitmap); Path border = new Path(); border.moveTo(0, 0); int w = bitmap.getWidth(); int h = bitmap.getHeight(); float bs = mBorderSize * scaleFactor; float r = mBorderCornerRadius * scaleFactor; border.lineTo(0, h); border.lineTo(w, h); border.lineTo(w, 0); border.lineTo(0, 0); border.addRoundRect(new RectF(bs, bs, w - bs, h - bs), r, r, Path.Direction.CW); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(mBorderColor); canvas.drawPath(border, paint); return bitmap; } }