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