diff options
author | Ruben Brunk <rubenbrunk@google.com> | 2012-12-17 11:56:30 -0800 |
---|---|---|
committer | Ruben Brunk <rubenbrunk@google.com> | 2012-12-17 12:03:53 -0800 |
commit | 7b2f1faec6055175884a5d2dbf317bea2c602b96 (patch) | |
tree | 18a3c8ee35758f5ef087cbf0157ba43b65c6b8a4 | |
parent | 3b0ed25fd416934fabb7003c1d2981b3a311186d (diff) | |
download | android_packages_apps_Snap-7b2f1faec6055175884a5d2dbf317bea2c602b96.tar.gz android_packages_apps_Snap-7b2f1faec6055175884a5d2dbf317bea2c602b96.tar.bz2 android_packages_apps_Snap-7b2f1faec6055175884a5d2dbf317bea2c602b96.zip |
Improved performance for Kmeans filter.
Bug: 7739334
Change-Id: I5ab1eb429d65f84449a61deca962a47f2b6dbc8b
-rw-r--r-- | src/com/android/gallery3d/filtershow/filters/ImageFilterKMeans.java | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterKMeans.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterKMeans.java index 3c725ac81..f03baca39 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterKMeans.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterKMeans.java @@ -13,13 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package com.android.gallery3d.filtershow.filters; import android.graphics.Bitmap; +import android.text.format.Time; import com.android.gallery3d.R; public class ImageFilterKMeans extends ImageFilter { + private int mSeed = 0; + public ImageFilterKMeans() { mName = "KMeans"; mMaxParameter = 20; @@ -27,9 +31,16 @@ public class ImageFilterKMeans extends ImageFilter { mPreviewParameter = 4; mDefaultParameter = 4; mParameter = 4; + + // set random seed for session + Time t = new Time(); + t.setToNow(); + mSeed = (int) t.toMillis(false); } - native protected void nativeApplyFilter(Bitmap bitmap, int w, int h, int p); + native protected void nativeApplyFilter(Bitmap bitmap, int width, int height, + Bitmap large_ds_bm, int lwidth, int lheight, Bitmap small_ds_bm, + int swidth, int sheight, int p, int seed); @Override public int getButtonId() { @@ -50,8 +61,34 @@ public class ImageFilterKMeans extends ImageFilter { public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) { int w = bitmap.getWidth(); int h = bitmap.getHeight(); + + Bitmap large_bm_ds = bitmap; + Bitmap small_bm_ds = bitmap; + + // find width/height for larger downsampled bitmap + int lw = w; + int lh = h; + while (lw > 256 && lh > 256) { + lw /= 2; + lh /= 2; + } + if (lw != w) { + large_bm_ds = Bitmap.createScaledBitmap(bitmap, lw, lh, true); + } + + // find width/height for smaller downsampled bitmap + int sw = lw; + int sh = lh; + while (sw > 64 && sh > 64) { + sw /= 2; + sh /= 2; + } + if (sw != lw) { + small_bm_ds = Bitmap.createScaledBitmap(large_bm_ds, sw, sh, true); + } + int p = Math.max(mParameter, mMinParameter) % (mMaxParameter + 1); - nativeApplyFilter(bitmap, w, h, p); + nativeApplyFilter(bitmap, w, h, large_bm_ds, lw, lh, small_bm_ds, sw, sh, p, mSeed); return bitmap; } } |