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.filtershow.presets.ImagePreset; 22 23public class ImageFilter implements Cloneable { 24 25 protected int mMaxParameter = 100; 26 protected int mMinParameter = -100; 27 protected int mPreviewParameter = mMaxParameter; 28 protected int mDefaultParameter = 0; 29 protected int mParameter = 0; 30 private ImagePreset mImagePreset; 31 32 protected String mName = "Original"; 33 private final String LOGTAG = "ImageFilter"; 34 public static final byte TYPE_BORDER =1; 35 public static final byte TYPE_FX = 2; 36 public static final byte TYPE_WBALANCE = 3; 37 public static final byte TYPE_VIGNETTE = 4; 38 public static final byte TYPE_NORMAL = 5; 39 public static final byte TYPE_TINYPLANET = 6; 40 private byte filterType = TYPE_NORMAL; 41 42 public byte getFilterType(){ 43 return filterType; 44 } 45 46 protected void setFilterType(byte type){ 47 filterType = type; 48 } 49 50 @Override 51 public ImageFilter clone() throws CloneNotSupportedException { 52 ImageFilter filter = (ImageFilter) super.clone(); 53 filter.setName(getName()); 54 filter.setParameter(getParameter()); 55 filter.setFilterType(filterType); 56 filter.mMaxParameter = mMaxParameter; 57 filter.mMinParameter = mMinParameter; 58 filter.mImagePreset = mImagePreset; 59 filter.mDefaultParameter = mDefaultParameter; 60 filter.mPreviewParameter = mPreviewParameter; 61 return filter; 62 } 63 64 public boolean isNil() { 65 if (mParameter == mDefaultParameter) { 66 return true; 67 } 68 return false; 69 } 70 71 public void setName(String name) { 72 mName = name; 73 } 74 75 public String getName() { 76 return mName; 77 } 78 79 public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) { 80 // do nothing here, subclasses will implement filtering here 81 return bitmap; 82 } 83 84 public int getParameter() { 85 return mParameter; 86 } 87 88 public void setParameter(int value) { 89 mParameter = value; 90 } 91 92 /** 93 * The maximum allowed value (inclusive) 94 * @return maximum value allowed as input to this filter 95 */ 96 public int getMaxParameter(){ 97 return mMaxParameter; 98 } 99 100 /** 101 * The parameter value to be used in previews. 102 * @return parameter value to be used to preview the filter 103 */ 104 public int getPreviewParameter(){ 105 return mPreviewParameter; 106 } 107 108 /** 109 * The minimum allowed value (inclusive) 110 * @return minimum value allowed as input to this filter 111 */ 112 public int getMinParameter(){ 113 return mMinParameter; 114 } 115 116 /** 117 * Returns the default value returned by this filter. 118 * @return default value 119 */ 120 public int getDefaultParameter(){ 121 return mDefaultParameter; 122 } 123 124 public ImagePreset getImagePreset() { 125 return mImagePreset; 126 } 127 128 public void setImagePreset(ImagePreset mPreset) { 129 this.mImagePreset = mPreset; 130 } 131 132 public boolean same(ImageFilter filter) { 133 if (filter == null) { 134 return false; 135 } 136 if (!filter.getName().equalsIgnoreCase(getName())) { 137 return false; 138 } 139 return true; 140 } 141 142 native protected void nativeApplyGradientFilter(Bitmap bitmap, int w, int h, 143 int[] redGradient, int[] greenGradient, int[] blueGradient); 144 145} 146