OSDN Git Service

Merge "Apply ExifModifier for rotation" into gb-ub-photos-bryce
[android-x86/packages-apps-Camera2.git] / src / com / android / gallery3d / filtershow / filters / ImageFilter.java
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
17 package com.android.gallery3d.filtershow.filters;
18
19 import android.graphics.Bitmap;
20
21 import com.android.gallery3d.R;
22 import com.android.gallery3d.filtershow.presets.ImagePreset;
23
24 public class ImageFilter implements Cloneable {
25
26     public static int DEFAULT_MAX_PARAMETER = 100;
27     public static int DEFAULT_MIN_PARAMETER = -100;
28     public static int DEFAULT_INITIAL_PARAMETER = 0;
29
30     protected int mMaxParameter = DEFAULT_MAX_PARAMETER;
31     protected int mMinParameter = DEFAULT_MIN_PARAMETER;
32     protected int mPreviewParameter = mMaxParameter;
33     protected int mDefaultParameter = DEFAULT_INITIAL_PARAMETER;
34     protected int mParameter = DEFAULT_INITIAL_PARAMETER;
35     private ImagePreset mImagePreset;
36
37     protected String mName = "Original";
38     private final String LOGTAG = "ImageFilter";
39     public static final byte TYPE_BORDER = 1;
40     public static final byte TYPE_FX = 2;
41     public static final byte TYPE_WBALANCE = 3;
42     public static final byte TYPE_VIGNETTE = 4;
43     public static final byte TYPE_NORMAL = 5;
44     public static final byte TYPE_TINYPLANET = 6;
45     private byte filterType = TYPE_NORMAL;
46
47     public byte getFilterType() {
48         return filterType;
49     }
50
51     protected void setFilterType(byte type) {
52         filterType = type;
53     }
54
55     public int getButtonId() {
56         return 0;
57     }
58
59     public int getTextId() {
60         return 0;
61     }
62
63     public int getOverlayBitmaps() {
64         return 0;
65     }
66
67     public int getEditingViewId() {
68         return R.id.imageShow;
69     }
70
71     public boolean showEditingControls() {
72         return true;
73     }
74
75     public boolean showParameterValue() {
76         return true;
77     }
78
79     @Override
80     public ImageFilter clone() throws CloneNotSupportedException {
81         ImageFilter filter = (ImageFilter) super.clone();
82         filter.setName(getName());
83         filter.setParameter(getParameter());
84         filter.setFilterType(filterType);
85         filter.mMaxParameter = mMaxParameter;
86         filter.mMinParameter = mMinParameter;
87         filter.mImagePreset = mImagePreset;
88         filter.mDefaultParameter = mDefaultParameter;
89         filter.mPreviewParameter = mPreviewParameter;
90         return filter;
91     }
92
93     public void reset() {
94         setParameter(mDefaultParameter);
95     }
96
97     public boolean isNil() {
98         if (mParameter == mDefaultParameter) {
99             return true;
100         }
101         return false;
102     }
103
104     public void setName(String name) {
105         mName = name;
106     }
107
108     public String getName() {
109         return mName;
110     }
111
112     public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) {
113         // do nothing here, subclasses will implement filtering here
114         return bitmap;
115     }
116
117     public int getParameter() {
118         return mParameter;
119     }
120
121     public void setParameter(int value) {
122         mParameter = value;
123     }
124
125     /**
126      * The maximum allowed value (inclusive)
127      * @return maximum value allowed as input to this filter
128      */
129     public int getMaxParameter() {
130         return mMaxParameter;
131     }
132
133     /**
134      * The parameter value to be used in previews.
135      * @return parameter value to be used to preview the filter
136      */
137     public int getPreviewParameter() {
138         return mPreviewParameter;
139     }
140
141     /**
142      * The minimum allowed value (inclusive)
143      * @return minimum value allowed as input to this filter
144      */
145     public int getMinParameter() {
146         return mMinParameter;
147     }
148
149     /**
150      * Returns the default value returned by this filter.
151      * @return default value
152      */
153     public int getDefaultParameter() {
154         return mDefaultParameter;
155     }
156
157     public ImagePreset getImagePreset() {
158         return mImagePreset;
159     }
160
161     public void setImagePreset(ImagePreset mPreset) {
162         this.mImagePreset = mPreset;
163     }
164
165     public boolean same(ImageFilter filter) {
166         if (filter == null) {
167             return false;
168         }
169         if (!filter.getName().equalsIgnoreCase(getName())) {
170             return false;
171         }
172         return true;
173     }
174
175     native protected void nativeApplyGradientFilter(Bitmap bitmap, int w, int h,
176             int[] redGradient, int[] greenGradient, int[] blueGradient);
177
178 }