diff options
Diffstat (limited to 'src/com/android/gallery3d/filtershow/presets/ImagePreset.java')
-rw-r--r-- | src/com/android/gallery3d/filtershow/presets/ImagePreset.java | 226 |
1 files changed, 135 insertions, 91 deletions
diff --git a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java index d6a69af3e..84266c55d 100644 --- a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java +++ b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java @@ -21,10 +21,12 @@ import android.util.Log; import com.android.gallery3d.filtershow.ImageStateAdapter; import com.android.gallery3d.filtershow.cache.ImageLoader; +import com.android.gallery3d.filtershow.filters.BaseFiltersManager; +import com.android.gallery3d.filtershow.filters.FilterRepresentation; +import com.android.gallery3d.filtershow.filters.FiltersManager; import com.android.gallery3d.filtershow.filters.ImageFilter; -import com.android.gallery3d.filtershow.filters.ImageFilterRS; import com.android.gallery3d.filtershow.imageshow.GeometryMetadata; -import com.android.gallery3d.filtershow.imageshow.ImageShow; +import com.android.gallery3d.filtershow.imageshow.MasterImage; import java.util.Vector; @@ -32,13 +34,16 @@ public class ImagePreset { private static final String LOGTAG = "ImagePreset"; - private ImageShow mEndPoint = null; - private ImageFilter mImageBorder = null; + private FilterRepresentation mBorder = null; private float mScaleFactor = 1.0f; - private boolean mIsHighQuality = false; + public static final int QUALITY_ICON = 0; + public static final int QUALITY_PREVIEW = 1; + public static final int QUALITY_FINAL = 2; + private int mQuality = QUALITY_PREVIEW; private ImageLoader mImageLoader = null; - protected Vector<ImageFilter> mFilters = new Vector<ImageFilter>(); + private Vector<FilterRepresentation> mFilters = new Vector<FilterRepresentation>(); + protected String mName = "Original"; private String mHistoryName = "Original"; protected boolean mIsFxPreset = false; @@ -48,10 +53,6 @@ public class ImagePreset { public final GeometryMetadata mGeoData = new GeometryMetadata(); - enum FullRotate { - ZERO, NINETY, HUNDRED_EIGHTY, TWO_HUNDRED_SEVENTY - } - public ImagePreset() { setup(); } @@ -70,13 +71,12 @@ public class ImagePreset { public ImagePreset(ImagePreset source) { try { - if (source.mImageBorder != null) { - mImageBorder = source.mImageBorder.clone(); + if (source.mBorder != null) { + mBorder = source.mBorder.clone(); } for (int i = 0; i < source.mFilters.size(); i++) { - ImageFilter filter = source.mFilters.elementAt(i).clone(); - filter.setImagePreset(this); - add(filter); + FilterRepresentation representation = source.mFilters.elementAt(i).clone(); + addFilter(representation); } } catch (java.lang.CloneNotSupportedException e) { Log.v(LOGTAG, "Exception trying to clone: " + e); @@ -89,6 +89,52 @@ public class ImagePreset { mGeoData.set(source.mGeoData); } + public FilterRepresentation getFilterRepresentation(int position) { + FilterRepresentation representation = null; + try { + representation = mFilters.elementAt(position).clone(); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + return representation; + } + + public int getPositionForRepresentation(FilterRepresentation representation) { + for (int i = 0; i < mFilters.size(); i++) { + if (mFilters.elementAt(i).getFilterClass() == representation.getFilterClass()) { + return i; + } + } + return -1; + } + + public FilterRepresentation getFilterRepresentationCopyFrom(FilterRepresentation filterRepresentation) { + // TODO: add concept of position in the filters (to allow multiple instances) + if (filterRepresentation == null) { + return null; + } + int position = getPositionForRepresentation(filterRepresentation); + if (position == -1) { + return null; + } + FilterRepresentation representation = null; + try { + representation = mFilters.elementAt(position).clone(); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + return representation; + } + + public void updateFilterRepresentation(FilterRepresentation representation) { + synchronized (mFilters) { + int position = getPositionForRepresentation(representation); + FilterRepresentation old = mFilters.elementAt(position); + old.updateTempParametersFrom(representation); + } + MasterImage.getImage().invalidatePreview(); + } + public void setDoApplyGeometry(boolean value) { mDoApplyGeometry = value; } @@ -101,19 +147,19 @@ public class ImagePreset { return mDoApplyFilters; } - public GeometryMetadata getGeometry() { + public synchronized GeometryMetadata getGeometry() { return mGeoData; } public boolean hasModifications() { - if (mImageBorder != null && !mImageBorder.isNil()) { + if (mBorder != null && !mBorder.isNil()) { return true; } if (mGeoData.hasModifications()) { return true; } for (int i = 0; i < mFilters.size(); i++) { - ImageFilter filter = mFilters.elementAt(i); + FilterRepresentation filter = mFilters.elementAt(i); if (!filter.isNil()) { return true; } @@ -122,31 +168,31 @@ public class ImagePreset { } public boolean isPanoramaSafe() { - if (mImageBorder != null && !mImageBorder.isNil()) { + if (mBorder != null && !mBorder.isNil()) { return false; } if (mGeoData.hasModifications()) { return false; } - for (ImageFilter filter : mFilters) { - if (filter.getFilterType() == ImageFilter.TYPE_VIGNETTE - && !filter.isNil()) { + for (FilterRepresentation representation : mFilters) { + if (representation.getPriority() == FilterRepresentation.TYPE_VIGNETTE + && !representation.isNil()) { return false; } - if (filter.getFilterType() == ImageFilter.TYPE_TINYPLANET - && !filter.isNil()) { + if (representation.getPriority() == FilterRepresentation.TYPE_TINYPLANET + && !representation.isNil()) { return false; } } return true; } - public void setGeometry(GeometryMetadata m) { + public synchronized void setGeometry(GeometryMetadata m) { mGeoData.set(m); } - private void setBorder(ImageFilter filter) { - mImageBorder = filter; + private void setBorder(FilterRepresentation filter) { + mBorder = filter; } public boolean isFx() { @@ -180,8 +226,8 @@ public class ImagePreset { } if (mDoApplyFilters && preset.mDoApplyFilters) { for (int i = 0; i < preset.mFilters.size(); i++) { - ImageFilter a = preset.mFilters.elementAt(i); - ImageFilter b = mFilters.elementAt(i); + FilterRepresentation a = preset.mFilters.elementAt(i); + FilterRepresentation b = mFilters.elementAt(i); if (!a.equals(b)) { return false; } @@ -190,14 +236,6 @@ public class ImagePreset { return true; } - public void usePreset(ImagePreset preset) { - for (int i = 0; i < preset.mFilters.size(); i++) { - ImageFilter a = preset.mFilters.elementAt(i); - ImageFilter b = mFilters.elementAt(i); - b.useFilter(a); - } - } - public boolean same(ImagePreset preset) { if (preset == null) { return false; @@ -219,11 +257,11 @@ public class ImagePreset { return false; } - if (mDoApplyGeometry && mImageBorder != preset.mImageBorder) { + if (mDoApplyGeometry && mBorder != preset.mBorder) { return false; } - if (mImageBorder != null && !mImageBorder.same(preset.mImageBorder)) { + if (mBorder != null && !mBorder.equals(preset.mBorder)) { return false; } @@ -235,18 +273,15 @@ public class ImagePreset { if (mDoApplyFilters && preset.mDoApplyFilters) { for (int i = 0; i < preset.mFilters.size(); i++) { - ImageFilter a = preset.mFilters.elementAt(i); - ImageFilter b = mFilters.elementAt(i); + FilterRepresentation a = preset.mFilters.elementAt(i); + FilterRepresentation b = mFilters.elementAt(i); if (!a.same(b)) { return false; } } } - return true; - } - public int nbFilters() { - return mFilters.size(); + return true; } public int similarUpTo(ImagePreset preset) { @@ -255,13 +290,13 @@ public class ImagePreset { } for (int i = 0; i < preset.mFilters.size(); i++) { - ImageFilter a = preset.mFilters.elementAt(i); + FilterRepresentation a = preset.mFilters.elementAt(i); if (i < mFilters.size()) { - ImageFilter b = mFilters.elementAt(i); + FilterRepresentation b = mFilters.elementAt(i); if (!a.same(b)) { return i; } - if (a.getParameter() != b.getParameter()) { + if (!a.equals(b)) { return i; } } else { @@ -279,57 +314,58 @@ public class ImagePreset { return mHistoryName; } - public void add(ImageFilter filter) { + public void showFilters() { + Log.v(LOGTAG, "\\\\\\ showFilters -- " + mFilters.size() + " filters"); + int n = 0; + for (FilterRepresentation representation : mFilters) { + Log.v(LOGTAG, " filter " + n + " : " + representation.toString()); + n++; + } + Log.v(LOGTAG, "/// showFilters -- " + mFilters.size() + " filters"); + } - if (filter.getFilterType() == ImageFilter.TYPE_BORDER) { - setHistoryName(filter.getName()); - setBorder(filter); - } else if (filter.getFilterType() == ImageFilter.TYPE_FX) { + public void addFilter(FilterRepresentation representation) { + Log.v(LOGTAG, "*** Add Filter *** " + representation); + if (representation.getPriority() == FilterRepresentation.TYPE_BORDER) { + setHistoryName(representation.getName()); + setBorder(representation); + } else if (representation.getPriority() == FilterRepresentation.TYPE_FX) { boolean found = false; for (int i = 0; i < mFilters.size(); i++) { - byte type = mFilters.get(i).getFilterType(); + int type = mFilters.elementAt(i).getPriority(); if (found) { - if (type != ImageFilter.TYPE_VIGNETTE) { + if (type != FilterRepresentation.TYPE_VIGNETTE) { mFilters.remove(i); continue; } } - if (type == ImageFilter.TYPE_FX) { + if (type == FilterRepresentation.TYPE_FX) { mFilters.remove(i); - mFilters.add(i, filter); - setHistoryName(filter.getName()); + mFilters.add(i, representation); + setHistoryName(representation.getName()); found = true; } } if (!found) { - mFilters.add(filter); - setHistoryName(filter.getName()); + mFilters.add(representation); + setHistoryName(representation.getName()); } } else { - mFilters.add(filter); - setHistoryName(filter.getName()); + mFilters.add(representation); + setHistoryName(representation.getName()); } - filter.setImagePreset(this); } - public void remove(String filterName) { - ImageFilter filter = getFilter(filterName); - if (filter != null) { - mFilters.remove(filter); - } - } - - public int getCount() { - return mFilters.size(); - } - - public ImageFilter getFilter(String name) { + public FilterRepresentation getRepresentation(FilterRepresentation filterRepresentation) { for (int i = 0; i < mFilters.size(); i++) { - ImageFilter filter = mFilters.elementAt(i); - if (filter.getName().equalsIgnoreCase(name)) { - return filter; + FilterRepresentation representation = mFilters.elementAt(i); + if (representation.getFilterClass() == filterRepresentation.getFilterClass()) { + return representation; } } + if (mBorder != null && mBorder.getFilterClass() == filterRepresentation.getFilterClass()) { + return mBorder; + } return null; } @@ -337,10 +373,6 @@ public class ImagePreset { // do nothing here } - public void setEndpoint(ImageShow image) { - mEndPoint = image; - } - public Bitmap apply(Bitmap original) { Bitmap bitmap = original; bitmap = applyFilters(bitmap, -1, -1); @@ -350,12 +382,16 @@ public class ImagePreset { public Bitmap applyGeometry(Bitmap bitmap) { // Apply any transform -- 90 rotate, flip, straighten, crop // Returns a new bitmap. - return mGeoData.apply(bitmap, mScaleFactor, mIsHighQuality); + return mGeoData.apply(bitmap, mScaleFactor, mQuality); } public Bitmap applyBorder(Bitmap bitmap) { - if (mImageBorder != null && mDoApplyGeometry) { - bitmap = mImageBorder.apply(bitmap, mScaleFactor, mIsHighQuality); + if (mBorder != null && mDoApplyGeometry) { + ImageFilter filter = FiltersManager.getManager().getFilterForRepresentation(mBorder); + mBorder.synchronizeRepresentation(); + filter.useRepresentation(mBorder); + filter.setImagePreset(this); + bitmap = filter.apply(bitmap, mScaleFactor, mQuality); } return bitmap; } @@ -370,8 +406,15 @@ public class ImagePreset { to = mFilters.size(); } for (int i = from; i < to; i++) { - ImageFilter filter = mFilters.elementAt(i); - bitmap = filter.apply(bitmap, mScaleFactor, mIsHighQuality); + FilterRepresentation representation = null; + synchronized (mFilters) { + representation = mFilters.elementAt(i); + representation.synchronizeRepresentation(); + } + ImageFilter filter = FiltersManager.getManager().getFilterForRepresentation(representation); + filter.useRepresentation(representation); + filter.setImagePreset(this); + bitmap = filter.apply(bitmap, mScaleFactor, mQuality); } } @@ -383,6 +426,7 @@ public class ImagePreset { return; } imageStateAdapter.clear(); + // TODO: re-enable the state panel imageStateAdapter.addAll(mFilters); imageStateAdapter.notifyDataSetChanged(); } @@ -391,12 +435,12 @@ public class ImagePreset { return mScaleFactor; } - public boolean isHighQuality() { - return mIsHighQuality; + public int getQuality() { + return mQuality; } - public void setIsHighQuality(boolean value) { - mIsHighQuality = value; + public void setQuality(int value) { + mQuality = value; } public void setScaleFactor(float value) { |