ImageFilter.java revision 6205c8100d7c0ec2a2db0baf9f043ae472a8da29
1/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.gallery3d.filtershow.filters;
18
19import android.graphics.Bitmap;
20
21import com.android.gallery3d.R;
22import com.android.gallery3d.filtershow.editors.BasicEditor;
23import com.android.gallery3d.filtershow.presets.ImagePreset;
24
25public class ImageFilter implements Cloneable {
26
27    public static int DEFAULT_MAX_PARAMETER = 100;
28    public static int DEFAULT_MIN_PARAMETER = -100;
29    public static int DEFAULT_INITIAL_PARAMETER = 0;
30
31    protected int mMaxParameter = DEFAULT_MAX_PARAMETER;
32    protected int mMinParameter = DEFAULT_MIN_PARAMETER;
33    protected int mPreviewParameter = mMaxParameter;
34    protected int mDefaultParameter = DEFAULT_INITIAL_PARAMETER;
35    protected int mParameter = DEFAULT_INITIAL_PARAMETER;
36    private ImagePreset mImagePreset;
37
38    protected String mName = "Original";
39    private final String LOGTAG = "ImageFilter";
40    public static final byte TYPE_BORDER = 1;
41    public static final byte TYPE_FX = 2;
42    public static final byte TYPE_WBALANCE = 3;
43    public static final byte TYPE_VIGNETTE = 4;
44    public static final byte TYPE_NORMAL = 5;
45    public static final byte TYPE_TINYPLANET = 6;
46    private byte filterType = TYPE_NORMAL;
47
48    public byte getFilterType() {
49        return filterType;
50    }
51
52    protected void setFilterType(byte type) {
53        filterType = type;
54    }
55
56    public int getButtonId() {
57        return 0;
58    }
59
60    public int getTextId() {
61        return 0;
62    }
63
64    public int getOverlayBitmaps() {
65        return 0;
66    }
67
68    public int getEditingViewId() {
69        return BasicEditor.ID;
70    }
71
72    public boolean showEditingControls() {
73        return true;
74    }
75
76    public boolean showParameterValue() {
77        return true;
78    }
79
80    public boolean showUtilityPanel() {
81        return true;
82    }
83
84    @Override
85    public ImageFilter clone() throws CloneNotSupportedException {
86        ImageFilter filter = (ImageFilter) super.clone();
87        filter.setName(getName());
88        filter.setParameter(getParameter());
89        filter.setFilterType(filterType);
90        filter.mMaxParameter = mMaxParameter;
91        filter.mMinParameter = mMinParameter;
92        filter.mImagePreset = mImagePreset;
93        filter.mDefaultParameter = mDefaultParameter;
94        filter.mPreviewParameter = mPreviewParameter;
95        return filter;
96    }
97
98    public void reset() {
99        setParameter(mDefaultParameter);
100    }
101
102    public boolean isNil() {
103        if (mParameter == mDefaultParameter) {
104            return true;
105        }
106        return false;
107    }
108
109    public void setName(String name) {
110        mName = name;
111    }
112
113    public String getName() {
114        return mName;
115    }
116
117    public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) {
118        // do nothing here, subclasses will implement filtering here
119        return bitmap;
120    }
121
122    /**
123     * Called on small bitmaps to create button icons for each filter.
124     * Override this to provide filter-specific button icons.
125     */
126    public Bitmap iconApply(Bitmap bitmap, float scaleFactor, boolean highQuality) {
127        int param = getParameter();
128        setParameter(getPreviewParameter());
129        bitmap = apply(bitmap, scaleFactor, highQuality);
130        setParameter(param);
131        return bitmap;
132    }
133
134    public int getParameter() {
135        return mParameter;
136    }
137
138    public void setParameter(int value) {
139        mParameter = value;
140    }
141
142    /**
143     * The maximum allowed value (inclusive)
144     * @return maximum value allowed as input to this filter
145     */
146    public int getMaxParameter() {
147        return mMaxParameter;
148    }
149
150    /**
151     * The parameter value to be used in previews.
152     * @return parameter value to be used to preview the filter
153     */
154    public int getPreviewParameter() {
155        return mPreviewParameter;
156    }
157
158    /**
159     * The minimum allowed value (inclusive)
160     * @return minimum value allowed as input to this filter
161     */
162    public int getMinParameter() {
163        return mMinParameter;
164    }
165
166    /**
167     * Returns the default value returned by this filter.
168     * @return default value
169     */
170    public int getDefaultParameter() {
171        return mDefaultParameter;
172    }
173
174    public ImagePreset getImagePreset() {
175        return mImagePreset;
176    }
177
178    public void setImagePreset(ImagePreset mPreset) {
179        this.mImagePreset = mPreset;
180    }
181
182    public boolean equals(ImageFilter filter) {
183        if (!same(filter)) {
184            return false;
185        }
186        if (mParameter != filter.mParameter) {
187            return false;
188        }
189        return true;
190    }
191
192    public boolean same(ImageFilter filter) {
193        if (filter == null) {
194            return false;
195        }
196        if (!filter.getName().equalsIgnoreCase(getName())) {
197            return false;
198        }
199        return true;
200    }
201
202    native protected void nativeApplyGradientFilter(Bitmap bitmap, int w, int h,
203            int[] redGradient, int[] greenGradient, int[] blueGradient);
204
205    public void useFilter(ImageFilter a) {
206        setParameter(a.getParameter());
207    }
208}
209