ImagePreset.java revision 31529940021b9a18611b1a3fb4a0317ab8c89618
10d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
20d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardpackage com.android.gallery3d.filtershow.presets;
30d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
40d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.graphics.Bitmap;
50d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport android.util.Log;
60d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
7bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroardimport com.android.gallery3d.filtershow.ImageStateAdapter;
8e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hofordimport com.android.gallery3d.filtershow.cache.ImageLoader;
90d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport com.android.gallery3d.filtershow.filters.ImageFilter;
108537d097f8827caedc8c39564de54d36eae8b16fRuben Brunkimport com.android.gallery3d.filtershow.imageshow.GeometryMetadata;
110d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardimport com.android.gallery3d.filtershow.imageshow.ImageShow;
120d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
1392e2341248e99c691f38820503984bc5e2f18811nicolasroardimport java.util.Vector;
1492e2341248e99c691f38820503984bc5e2f18811nicolasroard
150d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroardpublic class ImagePreset {
160d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
170d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    private static final String LOGTAG = "ImagePreset";
1893dfe7a1df07a64701369b480578410efb740a27nicolasroard
1993dfe7a1df07a64701369b480578410efb740a27nicolasroard    private ImageShow mEndPoint = null;
2093dfe7a1df07a64701369b480578410efb740a27nicolasroard    private ImageFilter mImageBorder = null;
2193dfe7a1df07a64701369b480578410efb740a27nicolasroard    private float mScaleFactor = 1.0f;
2293dfe7a1df07a64701369b480578410efb740a27nicolasroard    private boolean mIsHighQuality = false;
23e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford    private ImageLoader mImageLoader = null;
2493dfe7a1df07a64701369b480578410efb740a27nicolasroard
250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    protected Vector<ImageFilter> mFilters = new Vector<ImageFilter>();
260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    protected String mName = "Original";
270a32b7afc5286a5c7aa334b9338591d61a49731fRuben Brunk    private String mHistoryName = "Original";
280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    protected boolean mIsFxPreset = false;
290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
3031529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard    private boolean mDoApplyGeometry = true;
3131529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard    private boolean mDoApplyFilters = true;
3231529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard
338537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk    public final GeometryMetadata mGeoData = new GeometryMetadata();
348537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk
3593dfe7a1df07a64701369b480578410efb740a27nicolasroard    enum FullRotate {
3693dfe7a1df07a64701369b480578410efb740a27nicolasroard        ZERO, NINETY, HUNDRED_EIGHTY, TWO_HUNDRED_SEVENTY
378537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk    }
380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    public ImagePreset() {
400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        setup();
410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
430a32b7afc5286a5c7aa334b9338591d61a49731fRuben Brunk    public ImagePreset(String historyName) {
440a32b7afc5286a5c7aa334b9338591d61a49731fRuben Brunk        setHistoryName(historyName);
450a32b7afc5286a5c7aa334b9338591d61a49731fRuben Brunk        setup();
460a32b7afc5286a5c7aa334b9338591d61a49731fRuben Brunk    }
470a32b7afc5286a5c7aa334b9338591d61a49731fRuben Brunk
48a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford    public ImagePreset(ImagePreset source, String historyName) {
49a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford        this(source);
5055550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard        if (historyName != null) {
5155550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard            setHistoryName(historyName);
5255550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard        }
53a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford    }
54a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford
550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    public ImagePreset(ImagePreset source) {
56bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard        try {
5793dfe7a1df07a64701369b480578410efb740a27nicolasroard            if (source.mImageBorder != null) {
5893dfe7a1df07a64701369b480578410efb740a27nicolasroard                mImageBorder = source.mImageBorder.clone();
5993dfe7a1df07a64701369b480578410efb740a27nicolasroard            }
60bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard            for (int i = 0; i < source.mFilters.size(); i++) {
61e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford                ImageFilter filter = source.mFilters.elementAt(i).clone();
62e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford                filter.setImagePreset(this);
63e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford                add(filter);
64bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard            }
65bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard        } catch (java.lang.CloneNotSupportedException e) {
66bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard            Log.v(LOGTAG, "Exception trying to clone: " + e);
670d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        }
680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        mName = source.name();
690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        mHistoryName = source.name();
700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        mIsFxPreset = source.isFx();
71e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford        mImageLoader = source.getImageLoader();
720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
738537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk        mGeoData.set(source.mGeoData);
740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
7631529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard    public void setDoApplyGeometry(boolean value) {
7731529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard        mDoApplyGeometry = value;
7831529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard    }
7931529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard
8031529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard    public void setDoApplyFilters(boolean value) {
8131529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard        mDoApplyFilters = value;
8231529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard    }
8331529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard
8455550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard    public boolean hasModifications() {
8555550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard        if (mImageBorder != null && !mImageBorder.isNil()) {
8655550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard            return true;
8755550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard        }
8855550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard        if (mGeoData.hasModifications()) {
8955550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard            return true;
9055550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard        }
9155550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard        for (int i = 0; i < mFilters.size(); i++) {
9255550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard            ImageFilter filter = mFilters.elementAt(i);
9355550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard            if (!filter.isNil()) {
9455550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard                return true;
9555550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard            }
9655550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard        }
9755550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard        return false;
9855550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard    }
9955550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard
100014a111f10a7523415ca210bc6fe1e4f00183d31John Reck    public boolean isPanoramaSafe() {
101014a111f10a7523415ca210bc6fe1e4f00183d31John Reck        if (mImageBorder != null && !mImageBorder.isNil()) {
102014a111f10a7523415ca210bc6fe1e4f00183d31John Reck            return false;
103014a111f10a7523415ca210bc6fe1e4f00183d31John Reck        }
104014a111f10a7523415ca210bc6fe1e4f00183d31John Reck        if (mGeoData.hasModifications()) {
105014a111f10a7523415ca210bc6fe1e4f00183d31John Reck            return false;
106014a111f10a7523415ca210bc6fe1e4f00183d31John Reck        }
107014a111f10a7523415ca210bc6fe1e4f00183d31John Reck        for (ImageFilter filter : mFilters) {
108014a111f10a7523415ca210bc6fe1e4f00183d31John Reck            if (filter.getFilterType() == ImageFilter.TYPE_VIGNETTE
109014a111f10a7523415ca210bc6fe1e4f00183d31John Reck                    && !filter.isNil()) {
110014a111f10a7523415ca210bc6fe1e4f00183d31John Reck                return false;
111014a111f10a7523415ca210bc6fe1e4f00183d31John Reck            }
112014a111f10a7523415ca210bc6fe1e4f00183d31John Reck        }
113014a111f10a7523415ca210bc6fe1e4f00183d31John Reck        return true;
114014a111f10a7523415ca210bc6fe1e4f00183d31John Reck    }
115014a111f10a7523415ca210bc6fe1e4f00183d31John Reck
11693dfe7a1df07a64701369b480578410efb740a27nicolasroard    public void setGeometry(GeometryMetadata m) {
11793dfe7a1df07a64701369b480578410efb740a27nicolasroard        mGeoData.set(m);
11893dfe7a1df07a64701369b480578410efb740a27nicolasroard    }
11993dfe7a1df07a64701369b480578410efb740a27nicolasroard
120a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford    private void setBorder(ImageFilter filter) {
12193dfe7a1df07a64701369b480578410efb740a27nicolasroard        mImageBorder = filter;
12293dfe7a1df07a64701369b480578410efb740a27nicolasroard    }
12393dfe7a1df07a64701369b480578410efb740a27nicolasroard
1240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    public boolean isFx() {
1250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        return mIsFxPreset;
1260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
1270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
1280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    public void setIsFx(boolean value) {
1290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        mIsFxPreset = value;
1300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
1310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
1320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    public void setName(String name) {
1330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        mName = name;
1340d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        mHistoryName = name;
1350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
1360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
137e533f65961ed601ded1803caeab6cef0a778d2f2nicolasroard    public void setHistoryName(String name) {
1380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        mHistoryName = name;
1390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
1400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
141e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford    public ImageLoader getImageLoader() {
142e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford        return mImageLoader;
143e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford    }
144e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford
145e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford    public void setImageLoader(ImageLoader mImageLoader) {
146e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford        this.mImageLoader = mImageLoader;
147e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford    }
148e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford
1490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    public boolean same(ImagePreset preset) {
1500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        if (preset.mFilters.size() != mFilters.size()) {
1510d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard            return false;
1520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        }
1530d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        if (!mName.equalsIgnoreCase(preset.name())) {
1540d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard            return false;
1550d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        }
1568537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk
1578537d097f8827caedc8c39564de54d36eae8b16fRuben Brunk        if (!mGeoData.equals(preset.mGeoData)) {
1580d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard            return false;
1590d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        }
16093dfe7a1df07a64701369b480578410efb740a27nicolasroard
16193dfe7a1df07a64701369b480578410efb740a27nicolasroard        if (mImageBorder != preset.mImageBorder) {
16293dfe7a1df07a64701369b480578410efb740a27nicolasroard            return false;
16393dfe7a1df07a64701369b480578410efb740a27nicolasroard        }
16493dfe7a1df07a64701369b480578410efb740a27nicolasroard
16593dfe7a1df07a64701369b480578410efb740a27nicolasroard        if (mImageBorder != null && !mImageBorder.same(preset.mImageBorder)) {
16693dfe7a1df07a64701369b480578410efb740a27nicolasroard            return false;
16793dfe7a1df07a64701369b480578410efb740a27nicolasroard        }
16893dfe7a1df07a64701369b480578410efb740a27nicolasroard
1690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        for (int i = 0; i < preset.mFilters.size(); i++) {
1700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard            ImageFilter a = preset.mFilters.elementAt(i);
1710d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard            ImageFilter b = mFilters.elementAt(i);
1720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard            if (!a.same(b)) {
1730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard                return false;
1740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard            }
1750d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        }
1760d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        return true;
1770d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
1780d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
1790d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    public String name() {
1800d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        return mName;
1810d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
1820d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
1830d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    public String historyName() {
1840d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        return mHistoryName;
1850d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
1860d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
187bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard    public void add(ImageFilter filter) {
188fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford
18955550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard        if (filter.getFilterType() == ImageFilter.TYPE_BORDER) {
1900a32b7afc5286a5c7aa334b9338591d61a49731fRuben Brunk            setHistoryName(filter.getName());
191a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford            setBorder(filter);
19255550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard        } else if (filter.getFilterType() == ImageFilter.TYPE_FX) {
193a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford            boolean found = false;
194a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford            for (int i = 0; i < mFilters.size(); i++) {
195fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford                byte type = mFilters.get(i).getFilterType();
196a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford                if (found) {
19755550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard                    if (type != ImageFilter.TYPE_VIGNETTE) {
198fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford                        mFilters.remove(i);
199fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford                        continue;
200a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford                    }
201fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford                }
20255550694a3f40fbf5dfc95c35a8e253aedab931enicolasroard                if (type == ImageFilter.TYPE_FX) {
203fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford                    mFilters.remove(i);
204fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford                    mFilters.add(i, filter);
205a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford                    setHistoryName(filter.getName());
206a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford                    found = true;
207a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford                }
208a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford            }
209fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford            if (!found) {
210fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford                mFilters.add(filter);
211fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford                setHistoryName(filter.getName());
212fafb2edbb9928039b887f59685d82593bd79e06aJohn Hoford            }
213a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford        } else {
214a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford            mFilters.add(filter);
215a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford            setHistoryName(filter.getName());
216a19830b4fd9050b48386cd904d99cfd2566cc515John Hoford        }
217e9c55b28a4a155c2e1c1f5aec615a0c56e38ade4John Hoford        filter.setImagePreset(this);
2180d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
2190d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
2200d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    public void remove(String filterName) {
2210d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        ImageFilter filter = getFilter(filterName);
2220d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        if (filter != null) {
2230d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard            mFilters.remove(filter);
2240d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        }
2250d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
2260d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
2270d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    public int getCount() {
2280d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        return mFilters.size();
2290d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
2300d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
2310d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    public ImageFilter getFilter(String name) {
2320d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        for (int i = 0; i < mFilters.size(); i++) {
2330d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard            ImageFilter filter = mFilters.elementAt(i);
234bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard            if (filter.getName().equalsIgnoreCase(name)) {
2350d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard                return filter;
2360d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard            }
2370d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        }
2380d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        return null;
2390d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
2400d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
2410d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    public void setup() {
2420d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        // do nothing here
2430d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
2440d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
2450d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    public void setEndpoint(ImageShow image) {
2460d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        mEndPoint = image;
2470d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
2480d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
2490d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    public Bitmap apply(Bitmap original) {
2500d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        // First we apply any transform -- 90 rotate, flip, straighten, crop
25131529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard        Bitmap bitmap = original;
2520d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
25331529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard        if (mDoApplyGeometry) {
25431529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard            bitmap = mGeoData.apply(original, mScaleFactor, mIsHighQuality);
25531529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard        }
25631529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard
25731529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard        if (mDoApplyFilters) {
25831529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard            for (int i = 0; i < mFilters.size(); i++) {
25931529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard                ImageFilter filter = mFilters.elementAt(i);
26031529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard                bitmap = filter.apply(bitmap, mScaleFactor, mIsHighQuality);
26131529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard            }
2620d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        }
26393dfe7a1df07a64701369b480578410efb740a27nicolasroard
26408458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard        if (mImageBorder != null) {
26508458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard            bitmap = mImageBorder.apply(bitmap, mScaleFactor, mIsHighQuality);
26608458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard        }
26708458dc637d92ee5f12e34d49c34cc10f4e19c7dnicolasroard
2680d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        if (mEndPoint != null) {
2690d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard            mEndPoint.updateFilteredImage(bitmap);
2700d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        }
27131529940021b9a18611b1a3fb4a0317ab8c89618nicolasroard
2720d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard        return bitmap;
2730d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard    }
2740d7cdf8e763fb65c32bfad65245b3753deb75737nicolasroard
275bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard    public void fillImageStateAdapter(ImageStateAdapter imageStateAdapter) {
276bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard        if (imageStateAdapter == null) {
277bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard            return;
278bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard        }
279bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard        imageStateAdapter.clear();
280bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard        imageStateAdapter.addAll(mFilters);
281bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard        imageStateAdapter.notifyDataSetChanged();
282bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard    }
283bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard
28481eb9976f967d9b3faa1749a8ab29d1743cf347dnicolasroard    public float getScaleFactor() {
28581eb9976f967d9b3faa1749a8ab29d1743cf347dnicolasroard        return mScaleFactor;
28681eb9976f967d9b3faa1749a8ab29d1743cf347dnicolasroard    }
28781eb9976f967d9b3faa1749a8ab29d1743cf347dnicolasroard
28881eb9976f967d9b3faa1749a8ab29d1743cf347dnicolasroard    public boolean isHighQuality() {
28981eb9976f967d9b3faa1749a8ab29d1743cf347dnicolasroard        return mIsHighQuality;
29081eb9976f967d9b3faa1749a8ab29d1743cf347dnicolasroard    }
29181eb9976f967d9b3faa1749a8ab29d1743cf347dnicolasroard
29281eb9976f967d9b3faa1749a8ab29d1743cf347dnicolasroard    public void setIsHighQuality(boolean value) {
29381eb9976f967d9b3faa1749a8ab29d1743cf347dnicolasroard        mIsHighQuality = value;
29481eb9976f967d9b3faa1749a8ab29d1743cf347dnicolasroard    }
29581eb9976f967d9b3faa1749a8ab29d1743cf347dnicolasroard
29681eb9976f967d9b3faa1749a8ab29d1743cf347dnicolasroard    public void setScaleFactor(float value) {
29781eb9976f967d9b3faa1749a8ab29d1743cf347dnicolasroard        mScaleFactor = value;
29881eb9976f967d9b3faa1749a8ab29d1743cf347dnicolasroard    }
299bf93da72576b28f4e9dfb27f8f3fef702c8ae82dnicolasroard}
300