From 8f87def525800a584ea38bff209ceb1e80e95078 Mon Sep 17 00:00:00 2001 From: nicolasroard Date: Thu, 7 Mar 2013 15:16:59 -0800 Subject: Memory usage improvements, speed improvement - free filters resources agressively - implements multiple rendering pipelines - some cleanup Change-Id: Ib9ed268b0b2662d0bf5c049adcf046b556954c37 --- .../gallery3d/filtershow/presets/ImagePreset.java | 43 +++++++++++++++------- 1 file changed, 30 insertions(+), 13 deletions(-) (limited to 'src/com/android/gallery3d/filtershow/presets/ImagePreset.java') diff --git a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java index ca74a8729..87d9c8183 100644 --- a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java +++ b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java @@ -56,6 +56,8 @@ public class ImagePreset { private Rect mPartialRenderingBounds; private Bitmap mPreviewImage; + private FilterEnvironment mEnvironment = new FilterEnvironment(); + public ImagePreset() { setup(); } @@ -407,6 +409,17 @@ public class ImagePreset { // do nothing here } + public void setupEnvironment() { + setupEnvironment(FiltersManager.getManager()); + } + + public void setupEnvironment(FiltersManager filtersManager) { + getEnvironment().setImagePreset(this); + getEnvironment().setScaleFactor(mScaleFactor); + getEnvironment().setQuality(mQuality); + getEnvironment().setFiltersManager(filtersManager); + } + public Bitmap apply(Bitmap original) { Bitmap bitmap = original; bitmap = applyFilters(bitmap, -1, -1); @@ -417,28 +430,21 @@ public class ImagePreset { // Apply any transform -- 90 rotate, flip, straighten, crop // Returns a new bitmap. if (mDoApplyGeometry) { - ImageFilter filter = FiltersManager.getManager().getFilterForRepresentation(mGeoData); mGeoData.synchronizeRepresentation(); - filter.useRepresentation(mGeoData); - filter.setImagePreset(this); - bitmap = filter.apply(bitmap, mScaleFactor, mQuality); + bitmap = mEnvironment.applyRepresentation(mGeoData, bitmap); } return bitmap; } public Bitmap applyBorder(Bitmap bitmap) { if (mBorder != null && mDoApplyGeometry) { - ImageFilter filter = FiltersManager.getManager().getFilterForRepresentation(mBorder); mBorder.synchronizeRepresentation(); - filter.useRepresentation(mBorder); - filter.setImagePreset(this); - bitmap = filter.apply(bitmap, mScaleFactor, mQuality); + bitmap = mEnvironment.applyRepresentation(mBorder, bitmap); } return bitmap; } public Bitmap applyFilters(Bitmap bitmap, int from, int to) { - if (mDoApplyFilters) { if (from < 0) { from = 0; @@ -452,10 +458,7 @@ public class ImagePreset { representation = mFilters.elementAt(i); representation.synchronizeRepresentation(); } - ImageFilter filter = FiltersManager.getManager().getFilterForRepresentation(representation); - filter.useRepresentation(representation); - filter.setImagePreset(this); - bitmap = filter.apply(bitmap, mScaleFactor, mQuality); + bitmap = mEnvironment.applyRepresentation(representation, bitmap); } } @@ -531,4 +534,18 @@ public class ImagePreset { mPreviewImage = previewImage; } + public Vector getUsedFilters() { + Vector usedFilters = new Vector(); + for (int i = 0; i < mFilters.size(); i++) { + FilterRepresentation representation = mFilters.elementAt(i); + FiltersManager filtersManager = getEnvironment().getFiltersManager(); + ImageFilter filter = filtersManager.getFilterForRepresentation(representation); + usedFilters.add(filter); + } + return usedFilters; + } + + public FilterEnvironment getEnvironment() { + return mEnvironment; + } } -- cgit v1.2.3