ImageFilter.java revision 2e1a644f97a81931bf9b53d8bdf089bb7d4b1048
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.presets.ImagePreset; 23 24public 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 public boolean showUtilityPanel() { 80 return true; 81 } 82 83 @Override 84 public ImageFilter clone() throws CloneNotSupportedException { 85 ImageFilter filter = (ImageFilter) super.clone(); 86 filter.setName(getName()); 87 filter.setParameter(getParameter()); 88 filter.setFilterType(filterType); 89 filter.mMaxParameter = mMaxParameter; 90 filter.mMinParameter = mMinParameter; 91 filter.mImagePreset = mImagePreset; 92 filter.mDefaultParameter = mDefaultParameter; 93 filter.mPreviewParameter = mPreviewParameter; 94 return filter; 95 } 96 97 public void reset() { 98 setParameter(mDefaultParameter); 99 } 100 101 public boolean isNil() { 102 if (mParameter == mDefaultParameter) { 103 return true; 104 } 105 return false; 106 } 107 108 public void setName(String name) { 109 mName = name; 110 } 111 112 public String getName() { 113 return mName; 114 } 115 116 public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) { 117 // do nothing here, subclasses will implement filtering here 118 return bitmap; 119 } 120 121 /** 122 * Called on small bitmaps to create button icons for each filter. 123 * Override this to provide filter-specific button icons. 124 */ 125 public Bitmap iconApply(Bitmap bitmap, float scaleFactor, boolean highQuality) { 126 int param = getParameter(); 127 setParameter(getPreviewParameter()); 128 bitmap = apply(bitmap, scaleFactor, highQuality); 129 setParameter(param); 130 return bitmap; 131 } 132 133 public int getParameter() { 134 return mParameter; 135 } 136 137 public void setParameter(int value) { 138 mParameter = value; 139 } 140 141 /** 142 * The maximum allowed value (inclusive) 143 * @return maximum value allowed as input to this filter 144 */ 145 public int getMaxParameter() { 146 return mMaxParameter; 147 } 148 149 /** 150 * The parameter value to be used in previews. 151 * @return parameter value to be used to preview the filter 152 */ 153 public int getPreviewParameter() { 154 return mPreviewParameter; 155 } 156 157 /** 158 * The minimum allowed value (inclusive) 159 * @return minimum value allowed as input to this filter 160 */ 161 public int getMinParameter() { 162 return mMinParameter; 163 } 164 165 /** 166 * Returns the default value returned by this filter. 167 * @return default value 168 */ 169 public int getDefaultParameter() { 170 return mDefaultParameter; 171 } 172 173 public ImagePreset getImagePreset() { 174 return mImagePreset; 175 } 176 177 public void setImagePreset(ImagePreset mPreset) { 178 this.mImagePreset = mPreset; 179 } 180 181 public boolean same(ImageFilter filter) { 182 if (filter == null) { 183 return false; 184 } 185 if (!filter.getName().equalsIgnoreCase(getName())) { 186 return false; 187 } 188 return true; 189 } 190 191 native protected void nativeApplyGradientFilter(Bitmap bitmap, int w, int h, 192 int[] redGradient, int[] greenGradient, int[] blueGradient); 193 194} 195