ImageFilterCurves.java revision bf93da72576b28f4e9dfb27f8f3fef702c8ae82d
1 2package com.android.gallery3d.filtershow.filters; 3 4import com.android.gallery3d.filtershow.ui.Spline; 5 6import android.graphics.Bitmap; 7import android.util.Log; 8 9public class ImageFilterCurves extends ImageFilter { 10 11 private static final String LOGTAG = "ImageFilterCurves"; 12 13 private float[] mCurve = new float[256]; 14 15 private boolean mUseRed = true; 16 private boolean mUseGreen = true; 17 private boolean mUseBlue = true; 18 private Spline mSpline = null; 19 20 public ImageFilterCurves() { 21 mName = "Curves"; 22 } 23 24 @Override 25 public ImageFilter clone() throws CloneNotSupportedException { 26 ImageFilterCurves filter = (ImageFilterCurves) super.clone(); 27 filter.setCurve(mCurve); 28 filter.setSpline(new Spline(mSpline)); 29 return filter; 30 } 31 32 public void setUseRed(boolean value) { 33 mUseRed = value; 34 } 35 36 public void setUseGreen(boolean value) { 37 mUseGreen = value; 38 } 39 40 public void setUseBlue(boolean value) { 41 mUseBlue = value; 42 } 43 44 public void setCurve(float[] curve) { 45 for (int i = 0; i < curve.length; i++) { 46 if (i < 256) { 47 mCurve[i] = curve[i]; 48 } 49 } 50 } 51 52 public boolean same(ImageFilter filter) { 53 boolean isCurveFilter = super.same(filter); 54 if (!isCurveFilter) { 55 return false; 56 } 57 ImageFilterCurves curve = (ImageFilterCurves) filter; 58 for (int i = 0; i < 256; i++) { 59 if (curve.mCurve[i] != mCurve[i]) { 60 return false; 61 } 62 } 63 return true; 64 } 65 66 public void populateArray(int[] array) { 67 for (int i = 0; i < 256; i++) { 68 array[i] = (int) (mCurve[i]); 69 } 70 } 71 72 public void apply(Bitmap bitmap) { 73 74 int[] redGradient = null; 75 if (mUseRed) { 76 redGradient = new int[256]; 77 populateArray(redGradient); 78 } 79 int[] greenGradient = null; 80 if (mUseGreen) { 81 greenGradient = new int[256]; 82 populateArray(greenGradient); 83 } 84 int[] blueGradient = null; 85 if (mUseBlue) { 86 blueGradient = new int[256]; 87 populateArray(blueGradient); 88 } 89 90 nativeApplyGradientFilter(bitmap, bitmap.getWidth(), bitmap.getHeight(), 91 redGradient, greenGradient, blueGradient); 92 } 93 94 public void setSpline(Spline spline) { 95 mSpline = spline; 96 } 97 98 public Spline getSpline() { 99 return mSpline; 100 } 101} 102