From ed9c2b629cc43e5c61c1d016a5bcf21e086720c9 Mon Sep 17 00:00:00 2001 From: Sascha Haeberling Date: Fri, 19 Oct 2012 15:43:03 -0700 Subject: Adds a tiny planet (stereographic projection) image filter. Bug: 7293391 Also fixes an issue where the preview value was statically set to 100. This adds a preview parameter value that can be set for this purpose. Change-Id: I68c4ec04e86ab8a29ef7f561e5f21a298003677e --- .../gallery3d/filtershow/FilterShowActivity.java | 5 +- .../gallery3d/filtershow/filters/ImageFilter.java | 10 ++++ .../filtershow/filters/ImageFilterTinyPlanet.java | 54 ++++++++++++---------- 3 files changed, 40 insertions(+), 29 deletions(-) (limited to 'src/com/android/gallery3d/filtershow') diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java index 760532a8b..2cdc22e94 100644 --- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java +++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java @@ -238,7 +238,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, R.id.vibranceButton, R.id.contrastButton, R.id.saturationButton, - R.id.shadowRecoveryButton, R.id.wbalanceButton, R.id.hueButton, R.id.exposureButton, @@ -257,13 +256,12 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, }; for (int i = 0; i < filters.length; i++) { - ImageSmallFilter fView = new ImageSmallFilter(this); View v = listColors.findViewById(recastIDs[i]); int pos = listColors.indexOfChild(v); listColors.removeView(v); - filters[i].setParameter(filters[i].getMaxParameter()); + filters[i].setParameter(filters[i].getPreviewParameter()); if(v instanceof ImageButtonTitle) filters[i].setName(((ImageButtonTitle) v).getText()); fView.setImageFilter(filters[i]); @@ -353,7 +351,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, } else if (action.equalsIgnoreCase(TINY_PLANET_ACTION)) { mPanelController.showComponent(findViewById(R.id.tinyplanetButton)); } - } private int getScreenImageSize() { diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilter.java b/src/com/android/gallery3d/filtershow/filters/ImageFilter.java index f63286cd7..21a1dffb5 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilter.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilter.java @@ -9,6 +9,7 @@ public class ImageFilter implements Cloneable { protected int mMaxParameter = 100; protected int mMinParameter = -100; + protected int mPreviewParameter = mMaxParameter; protected int mDefaultParameter = 0; protected int mParameter = 0; private ImagePreset mImagePreset; @@ -41,6 +42,7 @@ public class ImageFilter implements Cloneable { filter.mMinParameter = mMinParameter; filter.mImagePreset = mImagePreset; filter.mDefaultParameter = mDefaultParameter; + filter.mPreviewParameter = mPreviewParameter; return filter; } @@ -80,6 +82,14 @@ public class ImageFilter implements Cloneable { return mMaxParameter; } + /** + * The parameter value to be used in previews. + * @return parameter value to be used to preview the filter + */ + public int getPreviewParameter(){ + return mPreviewParameter; + } + /** * The minimum allowed value (inclusive) * @return minimum value allowed as input to this filter diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java index e742bb2ea..cba1cd231 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterTinyPlanet.java @@ -2,47 +2,51 @@ package com.android.gallery3d.filtershow.filters; import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Paint.Align; -import android.util.Log; import com.android.gallery3d.filtershow.presets.ImagePreset; +/** + * An image filter which creates a tiny planet projection. + */ public class ImageFilterTinyPlanet extends ImageFilter { private static final String TAG = ImageFilterTinyPlanet.class.getSimpleName(); public ImageFilterTinyPlanet() { setFilterType(TYPE_TINYPLANET); mName = "TinyPlanet"; + + mMinParameter = 10; + mMaxParameter = 60; + mDefaultParameter = 20; + mPreviewParameter = 20; + mParameter = 20; } + native protected void nativeApplyFilter( + Bitmap bitmapIn, int width, int height, Bitmap bitmapOut, int outSize, float scale); + @Override - public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) { - Log.d(TAG, "Applying tiny planet."); - String str = "TinyPlanet"; + public Bitmap apply(Bitmap bitmapIn, float scaleFactor, boolean highQuality) { ImagePreset preset = getImagePreset(); if (preset != null) { - if (!preset.isPanoramaSafe()) { - str = "NO TP"; - - } else { + if (preset.isPanoramaSafe()) { + // TODO(haeberling): Get XMPMeta object. Object xmp = preset.getImageLoader().getXmpObject(); - str = "TP got Xmp"; + } else { + // TODO(haeberling): What should we do for: + // !preset.isPanoramaSafe()? } } - int w = bitmap.getWidth(); - int h = bitmap.getHeight(); - - // Print TinyPlanet as text on the image as a placeholder - // TODO(haeberling): Implement the real deal. - Canvas canvas = new Canvas(bitmap); - Paint paint = new Paint(); - paint.setColor(Color.RED); - paint.setTextSize((int) (((mParameter + 100) / 200f) * 100)); - paint.setTextAlign(Align.CENTER); - canvas.drawText(str, w / 2, h / 2, paint); - return super.apply(bitmap, scaleFactor, highQuality); + + int w = bitmapIn.getWidth(); + int h = bitmapIn.getHeight(); + int outputSize = Math.min(w, h); + + Bitmap mBitmapOut = Bitmap.createBitmap( + outputSize, outputSize, Bitmap.Config.ARGB_8888); + + // TODO(haeberling): Add the padding back in based on the meta-data. + nativeApplyFilter(bitmapIn, w, h, mBitmapOut, outputSize, mParameter / 100f); + return mBitmapOut; } } -- cgit v1.2.3