summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRuben Brunk <rubenbrunk@google.com>2012-12-17 11:56:30 -0800
committerRuben Brunk <rubenbrunk@google.com>2012-12-17 12:03:53 -0800
commit7b2f1faec6055175884a5d2dbf317bea2c602b96 (patch)
tree18a3c8ee35758f5ef087cbf0157ba43b65c6b8a4
parent3b0ed25fd416934fabb7003c1d2981b3a311186d (diff)
downloadandroid_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.java41
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;
}
}