diff options
Diffstat (limited to 'src/com/android/gallery3d/filtershow/presets/ImagePreset.java')
-rw-r--r-- | src/com/android/gallery3d/filtershow/presets/ImagePreset.java | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java new file mode 100644 index 000000000..302b94bed --- /dev/null +++ b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java @@ -0,0 +1,193 @@ + +package com.android.gallery3d.filtershow.presets; + +import java.util.Vector; + +import android.graphics.Bitmap; +import android.graphics.RectF; +import android.util.Log; + +import com.android.gallery3d.filtershow.filters.ImageFilter; +import com.android.gallery3d.filtershow.filters.ImageFilterStraighten; +import com.android.gallery3d.filtershow.imageshow.ImageShow; + +public class ImagePreset { + + private static final String LOGTAG = "ImagePreset"; + ImageShow mEndPoint = null; + protected int mParameter = 50; + protected Vector<ImageFilter> mFilters = new Vector<ImageFilter>(); + protected String mName = "Original"; + protected String mHistoryName = "Original"; + protected boolean mIsFxPreset = false; + + enum FullRotate { + ZERO, NINETY, HUNDRED_HEIGHTY, TWO_HUNDRED_SEVENTY + } + + protected FullRotate mFullRotate = FullRotate.ZERO; + protected float mStraightenRotate = 0; + protected float mStraightenZoom = 0; + protected boolean mHorizontalFlip = false; + protected boolean mVerticalFlip = false; + protected RectF mCrop = null; + + public ImagePreset() { + setup(); + } + + public ImagePreset(ImagePreset source) { + for (int i = 0; i < source.mFilters.size(); i++) { + add(source.mFilters.elementAt(i).copy()); + } + mName = source.name(); + mHistoryName = source.name(); + mIsFxPreset = source.isFx(); + + mStraightenRotate = source.mStraightenRotate; + mStraightenZoom = source.mStraightenZoom; + } + + public void setStraightenRotation(float rotate, float zoom) { + mStraightenRotate = rotate; + mStraightenZoom = zoom; + } + + private Bitmap applyGeometry(Bitmap original) { + Bitmap bitmap = original; + + if (mFullRotate != FullRotate.ZERO) { + // TODO + } + +// Log.v(LOGTAG, "applyGeometry with rotate " + mStraightenRotate + " and zoom " + // + mStraightenZoom); + + if (mStraightenRotate != 0) { + // TODO: keep the instances around + ImageFilter straighten = new ImageFilterStraighten(mStraightenRotate, mStraightenZoom); + straighten.apply(bitmap); + straighten = null; + } + + return bitmap; + } + + public boolean isFx() { + return mIsFxPreset; + } + + public void setIsFx(boolean value) { + mIsFxPreset = value; + } + + public void setName(String name) { + mName = name; + mHistoryName = name; + } + + public void setHistoryName(String name) { + mHistoryName = name; + } + + public boolean same(ImagePreset preset) { + if (preset.mFilters.size() != mFilters.size()) { + return false; + } + if (!mName.equalsIgnoreCase(preset.name())) { + return false; + } + if (mStraightenRotate != preset.mStraightenRotate) { + return false; + } + for (int i = 0; i < preset.mFilters.size(); i++) { + ImageFilter a = preset.mFilters.elementAt(i); + ImageFilter b = mFilters.elementAt(i); + if (!a.same(b)) { + return false; + } + } + return true; + } + + public String name() { + return mName; + } + + public String historyName() { + return mHistoryName; + } + + public void add(ImageFilter preset) { + mFilters.add(preset); + } + + 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) { + for (int i = 0; i < mFilters.size(); i++) { + ImageFilter filter = mFilters.elementAt(i); + if (filter.name().equalsIgnoreCase(name)) { + return filter; + } + } + return null; + } + + public void setup() { + // do nothing here + } + + public void setEndpoint(ImageShow image) { + mEndPoint = image; + } + + public Bitmap apply(Bitmap original) { + // First we apply any transform -- 90 rotate, flip, straighten, crop + Bitmap bitmap = applyGeometry(original); + + // TODO -- apply borders separately + ImageFilter borderFilter = null; + for (int i = 0; i < mFilters.size(); i++) { + ImageFilter filter = mFilters.elementAt(i); + if (filter.name().equalsIgnoreCase("Border")) { + // TODO don't use the name as an id + borderFilter = filter; + } else { + filter.apply(bitmap); + } + } + if (borderFilter != null) { + borderFilter.apply(bitmap); + } + if (mEndPoint != null) { + mEndPoint.updateFilteredImage(bitmap); + } + return bitmap; + } + + /* + * public void applyFilter(Bitmap bitmap) { // do nothing here, subclasses + * will implement filtering here } native protected void + * nativeApplyGradientFilter(Bitmap bitmap, int w, int h, int[] redGradient, + * int[] greenGradient, int[] blueGradient); + */ + + public void setParameter(int value) { + mParameter = value; + for (int i = 0; i < mFilters.size(); i++) { + ImageFilter filter = mFilters.elementAt(i); + filter.setParameter(value); + } + } + +} |