summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow/filters/ImageFilterCurves.java
blob: 5de8ff483dde60616d012f8fdef5176eafa26039 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101

package com.android.gallery3d.filtershow.filters;

import com.android.gallery3d.filtershow.ui.Spline;

import android.graphics.Bitmap;
import android.util.Log;

public class ImageFilterCurves extends ImageFilter {

    private static final String LOGTAG = "ImageFilterCurves";

    private float[] mCurve = new float[256];

    private boolean mUseRed = true;
    private boolean mUseGreen = true;
    private boolean mUseBlue = true;
    private Spline mSpline = null;

    public ImageFilterCurves() {
        mName = "Curves";
    }

    @Override
    public ImageFilter clone() throws CloneNotSupportedException {
        ImageFilterCurves filter = (ImageFilterCurves) super.clone();
        filter.setCurve(mCurve);
        filter.setSpline(new Spline(mSpline));
        return filter;
    }

    public void setUseRed(boolean value) {
        mUseRed = value;
    }

    public void setUseGreen(boolean value) {
        mUseGreen = value;
    }

    public void setUseBlue(boolean value) {
        mUseBlue = value;
    }

    public void setCurve(float[] curve) {
        for (int i = 0; i < curve.length; i++) {
            if (i < 256) {
                mCurve[i] = curve[i];
            }
        }
    }

    public boolean same(ImageFilter filter) {
        boolean isCurveFilter = super.same(filter);
        if (!isCurveFilter) {
            return false;
        }
        ImageFilterCurves curve = (ImageFilterCurves) filter;
        for (int i = 0; i < 256; i++) {
            if (curve.mCurve[i] != mCurve[i]) {
                return false;
            }
        }
        return true;
    }

    public void populateArray(int[] array) {
        for (int i = 0; i < 256; i++) {
            array[i] = (int) (mCurve[i]);
        }
    }

    public void apply(Bitmap bitmap) {

        int[] redGradient = null;
        if (mUseRed) {
            redGradient = new int[256];
            populateArray(redGradient);
        }
        int[] greenGradient = null;
        if (mUseGreen) {
            greenGradient = new int[256];
            populateArray(greenGradient);
        }
        int[] blueGradient = null;
        if (mUseBlue) {
            blueGradient = new int[256];
            populateArray(blueGradient);
        }

        nativeApplyGradientFilter(bitmap, bitmap.getWidth(), bitmap.getHeight(),
                redGradient, greenGradient, blueGradient);
    }

    public void setSpline(Spline spline) {
        mSpline = spline;
    }

    public Spline getSpline() {
        return mSpline;
    }
}