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