BaseFiltersManager.java revision 33de212ec780eaf2bc8d86908f07da33ea8dd7f2
1/* 2 * Copyright (C) 2013 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 */ 16package com.android.gallery3d.filtershow.filters; 17 18import android.content.Context; 19import android.content.res.Resources; 20 21import com.android.gallery3d.R; 22import com.android.gallery3d.filtershow.presets.ImagePreset; 23 24import java.util.HashMap; 25import java.util.Vector; 26 27public abstract class BaseFiltersManager { 28 protected HashMap<Class, ImageFilter> mFilters = null; 29 30 protected void init() { 31 mFilters = new HashMap<Class, ImageFilter>(); 32 Vector<Class> filters = new Vector<Class>(); 33 addFilterClasses(filters); 34 for (Class filterClass : filters) { 35 try { 36 Object filterInstance = filterClass.newInstance(); 37 if (filterInstance instanceof ImageFilter) { 38 mFilters.put(filterClass, (ImageFilter) filterInstance); 39 } 40 } catch (InstantiationException e) { 41 e.printStackTrace(); 42 } catch (IllegalAccessException e) { 43 e.printStackTrace(); 44 } 45 } 46 } 47 48 public ImageFilter getFilter(Class c) { 49 return mFilters.get(c); 50 } 51 52 public ImageFilter getFilterForRepresentation(FilterRepresentation representation) { 53 return mFilters.get(representation.getFilterClass()); 54 } 55 56 public void addFilter(Class filterClass, ImageFilter filter) { 57 mFilters.put(filterClass, filter); 58 } 59 60 public FilterRepresentation getRepresentation(Class c) { 61 ImageFilter filter = mFilters.get(c); 62 if (filter != null) { 63 return filter.getDefaultRepresentation(); 64 } 65 return null; 66 } 67 68 public void freeFilterResources(ImagePreset preset) { 69 if (preset == null) { 70 return; 71 } 72 Vector<ImageFilter> usedFilters = preset.getUsedFilters(this); 73 for (Class c : mFilters.keySet()) { 74 ImageFilter filter = mFilters.get(c); 75 if (!usedFilters.contains(filter)) { 76 filter.freeResources(); 77 } 78 } 79 } 80 81 public void freeRSFilterScripts() { 82 for (Class c : mFilters.keySet()) { 83 ImageFilter filter = mFilters.get(c); 84 if (filter != null && filter instanceof ImageFilterRS) { 85 ((ImageFilterRS) filter).resetScripts(); 86 } 87 } 88 } 89 90 protected void addFilterClasses(Vector<Class> filters) { 91 filters.add(ImageFilterTinyPlanet.class); 92 //filters.add(ImageFilterRedEye.class); 93 filters.add(ImageFilterWBalance.class); 94 filters.add(ImageFilterExposure.class); 95 filters.add(ImageFilterVignette.class); 96 filters.add(ImageFilterContrast.class); 97 filters.add(ImageFilterShadows.class); 98 filters.add(ImageFilterHighlights.class); 99 filters.add(ImageFilterVibrance.class); 100 filters.add(ImageFilterSharpen.class); 101 filters.add(ImageFilterCurves.class); 102 // filters.add(ImageFilterDraw.class); 103 filters.add(ImageFilterHue.class); 104 filters.add(ImageFilterSaturated.class); 105 filters.add(ImageFilterBwFilter.class); 106 filters.add(ImageFilterNegative.class); 107 filters.add(ImageFilterEdge.class); 108 filters.add(ImageFilterKMeans.class); 109 filters.add(ImageFilterFx.class); 110 filters.add(ImageFilterBorder.class); 111 filters.add(ImageFilterParametricBorder.class); 112 filters.add(ImageFilterGeometry.class); 113 } 114 115 public void addBorders(Context context, Vector<FilterRepresentation> representations) { 116 117 } 118 119 public void addLooks(Context context, Vector<FilterRepresentation> representations) { 120 int[] drawid = { 121 R.drawable.filtershow_fx_0005_punch, 122 R.drawable.filtershow_fx_0000_vintage, 123 R.drawable.filtershow_fx_0004_bw_contrast, 124 R.drawable.filtershow_fx_0002_bleach, 125 R.drawable.filtershow_fx_0001_instant, 126 R.drawable.filtershow_fx_0007_washout, 127 R.drawable.filtershow_fx_0003_blue_crush, 128 R.drawable.filtershow_fx_0008_washout_color, 129 R.drawable.filtershow_fx_0006_x_process 130 }; 131 132 int[] fxNameid = { 133 R.string.ffx_punch, 134 R.string.ffx_vintage, 135 R.string.ffx_bw_contrast, 136 R.string.ffx_bleach, 137 R.string.ffx_instant, 138 R.string.ffx_washout, 139 R.string.ffx_blue_crush, 140 R.string.ffx_washout_color, 141 R.string.ffx_x_process 142 }; 143 144 for (int i = 0; i < drawid.length; i++) { 145 FilterFxRepresentation fx = new FilterFxRepresentation( 146 context.getString(fxNameid[i]), drawid[i], fxNameid[i]); 147 representations.add(fx); 148 } 149 } 150 151 public void addEffects(Vector<FilterRepresentation> representations) { 152 representations.add(getRepresentation(ImageFilterTinyPlanet.class)); 153 representations.add(getRepresentation(ImageFilterWBalance.class)); 154 representations.add(getRepresentation(ImageFilterExposure.class)); 155 representations.add(getRepresentation(ImageFilterVignette.class)); 156 representations.add(getRepresentation(ImageFilterContrast.class)); 157 representations.add(getRepresentation(ImageFilterShadows.class)); 158 representations.add(getRepresentation(ImageFilterHighlights.class)); 159 representations.add(getRepresentation(ImageFilterVibrance.class)); 160 representations.add(getRepresentation(ImageFilterSharpen.class)); 161 representations.add(getRepresentation(ImageFilterCurves.class)); 162 representations.add(getRepresentation(ImageFilterHue.class)); 163 representations.add(getRepresentation(ImageFilterSaturated.class)); 164 representations.add(getRepresentation(ImageFilterBwFilter.class)); 165 representations.add(getRepresentation(ImageFilterNegative.class)); 166 representations.add(getRepresentation(ImageFilterEdge.class)); 167 representations.add(getRepresentation(ImageFilterKMeans.class)); 168 } 169 170 public void addTools(Vector<FilterRepresentation> representations) { 171 //representations.add(getRepresentation(ImageFilterRedEye.class)); 172 // representations.add(getRepresentation(ImageFilterDraw.class)); 173 } 174 175 public void setFilterResources(Resources resources) { 176 ImageFilterBorder filterBorder = (ImageFilterBorder) getFilter(ImageFilterBorder.class); 177 filterBorder.setResources(resources); 178 ImageFilterFx filterFx = (ImageFilterFx) getFilter(ImageFilterFx.class); 179 filterFx.setResources(resources); 180 } 181} 182