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