From 3cac6dd4d4c28ee7b0833715fae77ca5ddf4d77d Mon Sep 17 00:00:00 2001 From: John Hoford Date: Tue, 2 Oct 2012 18:12:03 -0700 Subject: Add Shadow feature bug:7234321 Change-Id: Ib0d4db773486e469ed818385b68b7b907070c297 --- .../gallery3d/filtershow/FilterShowActivity.java | 6 +-- .../filtershow/filters/ImageFilterShadows.java | 61 ++++++++++++++++++++++ .../gallery3d/filtershow/ui/ControlPoint.java | 2 +- 3 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 src/com/android/gallery3d/filtershow/filters/ImageFilterShadows.java diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java index b50ab94d6..694f51290 100644 --- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java +++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java @@ -783,14 +783,14 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, mImageShow.setVisibility(View.VISIBLE); mImageShow.setShowControls(true); ImagePreset preset = mImageShow.getImagePreset(); - ImageFilter filter = preset.getFilter("Hue"); + ImageFilter filter = preset.getFilter("Shadows"); if (filter == null) { - ImageFilterHue contrast = new ImageFilterHue(); + ImageFilterShadows contrast = new ImageFilterShadows(); ImagePreset copy = new ImagePreset(preset); copy.add(contrast); copy.setHistoryName(contrast.getName()); copy.setIsFx(false); - filter = copy.getFilter("Hue"); + filter = copy.getFilter("Shadows"); mImageShow.setImagePreset(copy); } mImageShow.setCurrentFilter(filter); diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterShadows.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterShadows.java new file mode 100644 index 000000000..39c95064b --- /dev/null +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterShadows.java @@ -0,0 +1,61 @@ + +package com.android.gallery3d.filtershow.filters; + +import android.graphics.Bitmap; + +import com.android.gallery3d.filtershow.ui.ControlPoint; +import com.android.gallery3d.filtershow.ui.Spline; + +public class ImageFilterShadows extends ImageFilter { + private final float SHADOW = .1f; + private final float MID = .5f; + private final float HIGHLIGHT = .9f; + + private float []baseX = {0f,SHADOW,MID,HIGHLIGHT,1f}; + private float []baseY = {0f,SHADOW,MID,HIGHLIGHT,1f}; + + public ImageFilterShadows() { + mName = "Shadows"; + + } + short [] calcMap(){ + Spline sp = new Spline(); + for (int i = 0; i < baseX.length; i++) { + sp.addPoint(baseX[i], baseY[i]); + } + int max = 4080; + int w = 40800; + float []px = new float[w+1]; + float []py = new float[w+1]; + short []vlut = new short[4080+1]; + for (int i = 0; i < px.length; i++) { + float t = i/(float)(w); + + ControlPoint p = sp.getPoint(t); + px[i] = p.x; + py[i] = p.y; + } + for (int i = 0; i < py.length; i++) { + short x = (short)Math.min(4080,Math.max(0,((int)(px[i]*max)))); + short y = (short)Math.min(4082,Math.max(0,((int)(py[i]*max)))); + vlut[x] = y; + } + return vlut; + } + @Override + public ImageFilter clone() throws CloneNotSupportedException { + ImageFilterShadows filter = (ImageFilterShadows) super.clone(); + return filter; + } + + native protected void nativeApplyFilter(Bitmap bitmap, int w, int h, short []valMap); + + public void apply(Bitmap bitmap) { + int w = bitmap.getWidth(); + int h = bitmap.getHeight(); + float p = mParameter; + baseY[1] = (float)(SHADOW*Math.pow(4, mParameter/100.)); + + nativeApplyFilter(bitmap, w, h, calcMap()); + } +} diff --git a/src/com/android/gallery3d/filtershow/ui/ControlPoint.java b/src/com/android/gallery3d/filtershow/ui/ControlPoint.java index 6daa96182..68b799a9e 100644 --- a/src/com/android/gallery3d/filtershow/ui/ControlPoint.java +++ b/src/com/android/gallery3d/filtershow/ui/ControlPoint.java @@ -1,7 +1,7 @@ package com.android.gallery3d.filtershow.ui; -class ControlPoint implements Comparable { +public class ControlPoint implements Comparable { public ControlPoint(float px, float py) { x = px; y = py; -- cgit v1.2.3