diff options
author | John Hoford <hoford@google.com> | 2012-10-02 18:12:03 -0700 |
---|---|---|
committer | John Hoford <hoford@google.com> | 2012-10-02 18:32:36 -0700 |
commit | 3cac6dd4d4c28ee7b0833715fae77ca5ddf4d77d (patch) | |
tree | 089561adae40510e0ee037096087b7d5cc5e4da9 | |
parent | 7325d6115b91be94e84503c578c5fe40a1ee99b4 (diff) | |
download | android_packages_apps_Snap-3cac6dd4d4c28ee7b0833715fae77ca5ddf4d77d.tar.gz android_packages_apps_Snap-3cac6dd4d4c28ee7b0833715fae77ca5ddf4d77d.tar.bz2 android_packages_apps_Snap-3cac6dd4d4c28ee7b0833715fae77ca5ddf4d77d.zip |
Add Shadow feature
bug:7234321
Change-Id: Ib0d4db773486e469ed818385b68b7b907070c297
3 files changed, 65 insertions, 4 deletions
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; |