ImageFilterBorder.java revision 08458dc637d92ee5f12e34d49c34cc10f4e19c7d
1
2package com.android.gallery3d.filtershow.filters;
3
4import android.graphics.Bitmap;
5import android.graphics.Canvas;
6import android.graphics.Rect;
7import android.graphics.drawable.Drawable;
8
9public class ImageFilterBorder extends ImageFilter {
10    Drawable mNinePatch = null;
11
12    @Override
13    public ImageFilter clone() throws CloneNotSupportedException {
14        ImageFilterBorder filter = (ImageFilterBorder) super.clone();
15        filter.setDrawable(mNinePatch);
16        return filter;
17    }
18
19    public ImageFilterBorder(Drawable ninePatch) {
20        mName = "Border";
21        mNinePatch = ninePatch;
22    }
23
24    @Override
25    public boolean same(ImageFilter filter) {
26        boolean isBorderFilter = super.same(filter);
27        if (!isBorderFilter) {
28            return false;
29        }
30        ImageFilterBorder borderFilter = (ImageFilterBorder) filter;
31        if (mNinePatch != borderFilter.mNinePatch) {
32            return false;
33        }
34        return true;
35    }
36
37    public void setDrawable(Drawable ninePatch) {
38        // TODO: for now we only use nine patch
39        mNinePatch = ninePatch;
40    }
41
42    @Override
43    public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) {
44        if (mNinePatch == null) {
45            return bitmap;
46        }
47
48        int w = bitmap.getWidth();
49        int h = bitmap.getHeight();
50
51        float scale = scaleFactor * 2.0f;
52        Rect bounds = new Rect(0, 0, (int) (w / scale), (int) (h / scale));
53        Canvas canvas = new Canvas(bitmap);
54        canvas.scale(scale, scale);
55        mNinePatch.setBounds(bounds);
56        mNinePatch.draw(canvas);
57        return bitmap;
58    }
59}
60