Skip to content

Commit 026510b

Browse files
committed
Added Gaussian blur, box blur, tone curve, soft elegance, sepia,
opacity, monochrome, miss etikate, luminance threshold, lookup, highlight/shadow, haze, false colour, colour invert, chroma key, amatorka, adaptive threshold and alpha blend. Fixed bugs with MultiInputRenderer and MultiTextureFilter.
1 parent bbf414d commit 026510b

File tree

52 files changed

+1889
-910
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1889
-910
lines changed
Lines changed: 83 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,83 @@
1-
/* AUTO-GENERATED FILE. DO NOT MODIFY.
2-
*
3-
* This class was automatically generated by the
4-
* aapt tool from the resource data it found. It
5-
* should not be modified by hand.
6-
*/
7-
8-
package project.android.allfiltersexample;
9-
10-
public final class R {
11-
public static final class attr {
12-
}
13-
public static final class drawable {
14-
public static final int ic_launcher=0x7f020000;
15-
public static final int tiger=0x7f020001;
16-
}
17-
public static final class id {
18-
public static final int menu_settings=0x7f060000;
19-
}
20-
public static final class menu {
21-
public static final int activity_image_processing=0x7f050000;
22-
}
23-
public static final class string {
24-
public static final int app_name=0x7f030000;
25-
public static final int hello_world=0x7f030001;
26-
public static final int menu_settings=0x7f030002;
27-
}
28-
public static final class style {
29-
/**
30-
Base application theme, dependent on API level. This theme is replaced
31-
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
32-
33-
34-
Theme customizations available in newer API levels can go in
35-
res/values-vXX/styles.xml, while customizations related to
36-
backward-compatibility can go here.
37-
38-
39-
Base application theme for API 11+. This theme completely replaces
40-
AppBaseTheme from res/values/styles.xml on API 11+ devices.
41-
42-
API 11 theme customizations can go here.
43-
44-
Base application theme for API 14+. This theme completely replaces
45-
AppBaseTheme from BOTH res/values/styles.xml and
46-
res/values-v11/styles.xml on API 14+ devices.
47-
48-
API 14 theme customizations can go here.
49-
50-
Base application theme, dependent on API level. This theme is replaced
51-
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
52-
53-
54-
Theme customizations available in newer API levels can go in
55-
res/values-vXX/styles.xml, while customizations related to
56-
backward-compatibility can go here.
57-
58-
59-
Base application theme for API 11+. This theme completely replaces
60-
AppBaseTheme from res/values/styles.xml on API 11+ devices.
61-
62-
API 11 theme customizations can go here.
63-
64-
Base application theme for API 14+. This theme completely replaces
65-
AppBaseTheme from BOTH res/values/styles.xml and
66-
res/values-v11/styles.xml on API 14+ devices.
67-
68-
API 14 theme customizations can go here.
69-
*/
70-
public static final int AppBaseTheme=0x7f040000;
71-
/** Application theme.
72-
All customizations that are NOT specific to a particular API-level can go here.
73-
Application theme.
74-
All customizations that are NOT specific to a particular API-level can go here.
75-
*/
76-
public static final int AppTheme=0x7f040001;
77-
}
78-
}
1+
/* AUTO-GENERATED FILE. DO NOT MODIFY.
2+
*
3+
* This class was automatically generated by the
4+
* aapt tool from the resource data it found. It
5+
* should not be modified by hand.
6+
*/
7+
8+
package project.android.allfiltersexample;
9+
10+
public final class R {
11+
public static final class attr {
12+
}
13+
public static final class drawable {
14+
public static final int ic_launcher=0x7f020000;
15+
public static final int lookup=0x7f020001;
16+
public static final int lookup_amatorka=0x7f020002;
17+
public static final int lookup_miss_etikate=0x7f020003;
18+
public static final int lookup_soft_elegance_1=0x7f020004;
19+
public static final int lookup_soft_elegance_2=0x7f020005;
20+
public static final int tiger=0x7f020006;
21+
}
22+
public static final class id {
23+
public static final int menu_settings=0x7f060000;
24+
}
25+
public static final class menu {
26+
public static final int activity_image_processing=0x7f050000;
27+
}
28+
public static final class string {
29+
public static final int app_name=0x7f030000;
30+
public static final int hello_world=0x7f030001;
31+
public static final int menu_settings=0x7f030002;
32+
}
33+
public static final class style {
34+
/**
35+
Base application theme, dependent on API level. This theme is replaced
36+
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
37+
38+
39+
Theme customizations available in newer API levels can go in
40+
res/values-vXX/styles.xml, while customizations related to
41+
backward-compatibility can go here.
42+
43+
44+
Base application theme for API 11+. This theme completely replaces
45+
AppBaseTheme from res/values/styles.xml on API 11+ devices.
46+
47+
API 11 theme customizations can go here.
48+
49+
Base application theme for API 14+. This theme completely replaces
50+
AppBaseTheme from BOTH res/values/styles.xml and
51+
res/values-v11/styles.xml on API 14+ devices.
52+
53+
API 14 theme customizations can go here.
54+
55+
Base application theme, dependent on API level. This theme is replaced
56+
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
57+
58+
59+
Theme customizations available in newer API levels can go in
60+
res/values-vXX/styles.xml, while customizations related to
61+
backward-compatibility can go here.
62+
63+
64+
Base application theme for API 11+. This theme completely replaces
65+
AppBaseTheme from res/values/styles.xml on API 11+ devices.
66+
67+
API 11 theme customizations can go here.
68+
69+
Base application theme for API 14+. This theme completely replaces
70+
AppBaseTheme from BOTH res/values/styles.xml and
71+
res/values-v11/styles.xml on API 14+ devices.
72+
73+
API 14 theme customizations can go here.
74+
*/
75+
public static final int AppBaseTheme=0x7f040000;
76+
/** Application theme.
77+
All customizations that are NOT specific to a particular API-level can go here.
78+
Application theme.
79+
All customizations that are NOT specific to a particular API-level can go here.
80+
*/
81+
public static final int AppTheme=0x7f040001;
82+
}
83+
}

examples/AllFiltersExample/gen/project/android/fastimageprocessing/R.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,10 @@ public static final class string {
1616
}
1717
public static final class drawable {
1818
public static final int ic_launcher = 0x7f020000;
19+
public static final int lookup = 0x7f020001;
20+
public static final int lookup_soft_elegance_1 = 0x7f020004;
21+
public static final int lookup_miss_etikate = 0x7f020003;
22+
public static final int lookup_amatorka = 0x7f020002;
23+
public static final int lookup_soft_elegance_2 = 0x7f020005;
1924
}
2025
}

examples/AllFiltersExample/src/project/android/allfiltersexample/ImageProcessingActivity.java

Lines changed: 60 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,45 @@
11
package project.android.allfiltersexample;
22

3+
import java.util.ArrayList;
4+
import java.util.List;
5+
36
import project.android.imageprocessing.FastImageProcessingPipeline;
47
import project.android.imageprocessing.FastImageProcessingView;
58
import project.android.imageprocessing.filter.BasicFilter;
9+
import project.android.imageprocessing.filter.colour.ColourInvertFilter;
610
import project.android.imageprocessing.filter.colour.ColourMatrixFilter;
711
import project.android.imageprocessing.filter.colour.GreyScaleFilter;
812
import project.android.imageprocessing.filter.colour.HueFilter;
9-
import project.android.imageprocessing.filter.colour.ImageBrightnessFilter;
10-
import project.android.imageprocessing.filter.colour.ImageContrastFilter;
11-
import project.android.imageprocessing.filter.colour.ImageExposureFilter;
12-
import project.android.imageprocessing.filter.colour.ImageGammaFilter;
13-
import project.android.imageprocessing.filter.colour.ImageLevelsFilter;
14-
import project.android.imageprocessing.filter.colour.ImageSaturationFilter;
13+
import project.android.imageprocessing.filter.colour.BrightnessFilter;
14+
import project.android.imageprocessing.filter.colour.MissEtikateFilter;
15+
import project.android.imageprocessing.filter.colour.MonochromeFilter;
16+
import project.android.imageprocessing.filter.colour.SoftEleganceFilter;
17+
import project.android.imageprocessing.filter.colour.ToneCurveFilter;
18+
import project.android.imageprocessing.filter.colour.HighlightShadowFilter;
19+
import project.android.imageprocessing.filter.colour.ContrastFilter;
20+
import project.android.imageprocessing.filter.colour.LookupFilter;
21+
import project.android.imageprocessing.filter.colour.AmatorkaFilter;
22+
import project.android.imageprocessing.filter.colour.ExposureFilter;
23+
import project.android.imageprocessing.filter.colour.GammaFilter;
24+
import project.android.imageprocessing.filter.colour.LevelsFilter;
25+
import project.android.imageprocessing.filter.colour.SaturationFilter;
26+
import project.android.imageprocessing.filter.colour.FalseColourFilter;
1527
import project.android.imageprocessing.filter.colour.RGBFilter;
28+
import project.android.imageprocessing.filter.colour.HazeFilter;
29+
import project.android.imageprocessing.filter.colour.SepiaFilter;
30+
import project.android.imageprocessing.filter.colour.OpacityFilter;
31+
import project.android.imageprocessing.filter.colour.LuminanceThresholdFilter;
32+
import project.android.imageprocessing.filter.colour.AdaptiveThresholdFilter;
33+
import project.android.imageprocessing.filter.colour.ChromaKeyFilter;
1634
import project.android.imageprocessing.filter.processing.ConvolutionFilter;
35+
import project.android.imageprocessing.filter.processing.GaussianBlurFilter;
36+
import project.android.imageprocessing.filter.processing.BoxBlurFilter;
1737
import project.android.imageprocessing.input.ImageResourceInput;
18-
import project.android.imageprocessing.output.Mp4VideoFileEndpoint;
1938
import project.android.imageprocessing.output.ScreenEndpoint;
2039
import android.os.Bundle;
21-
import android.os.Environment;
2240
import android.app.Activity;
41+
import android.graphics.Point;
2342
import android.util.Log;
24-
import android.view.Menu;
2543
import android.view.MotionEvent;
2644
import android.view.View;
2745
import android.view.Window;
@@ -30,18 +48,15 @@
3048
public class ImageProcessingActivity extends Activity {
3149

3250
private FastImageProcessingView view;
33-
private BasicFilter[] filters;
51+
private List<BasicFilter> filters;
3452
private int curFilter;
3553
private ImageResourceInput image;
3654
private long touchTime;
3755
private FastImageProcessingPipeline pipeline;
3856
private ScreenEndpoint screen;
39-
private int numOfFilters = 11;
40-
private int i;
4157

4258
private void addFilter(BasicFilter filter) {
43-
filters[i] = filter;
44-
i++;
59+
filters.add(filter);
4560
}
4661

4762
@Override
@@ -54,9 +69,28 @@ protected void onCreate(Bundle savedInstanceState) {
5469
view.setPipeline(pipeline);
5570
setContentView(view);
5671
image = new ImageResourceInput(view, this, R.drawable.tiger);
57-
filters = new BasicFilter[numOfFilters];
72+
filters = new ArrayList<BasicFilter>();
73+
Log.e("FilterTest","starting");
74+
addFilter(new ChromaKeyFilter(new float[] {1.0f, 0.3f, 0.0f}, 0.4f, 0.1f));
75+
addFilter(new AdaptiveThresholdFilter());
76+
addFilter(new BoxBlurFilter());
77+
addFilter(new LuminanceThresholdFilter(0.4f));
78+
addFilter(new OpacityFilter(0.5f));
79+
addFilter(new SepiaFilter());
80+
addFilter(new HazeFilter(0.3f,0.1f));
81+
addFilter(new FalseColourFilter(new float[]{0.0f,0.0f,0.5f}, new float[]{1.0f,0.0f,0.0f}));
82+
addFilter(new MonochromeFilter(new float[]{1.0f,0.8f,0.8f}, 1.0f));
83+
addFilter(new ColourInvertFilter());
84+
addFilter(new SoftEleganceFilter(this));
85+
addFilter(new GaussianBlurFilter(2.3f));
86+
addFilter(new MissEtikateFilter(this));
87+
addFilter(new AmatorkaFilter(this));
88+
addFilter(new LookupFilter(this, R.drawable.lookup_soft_elegance_1));
89+
addFilter(new HighlightShadowFilter(0f, 1f));
90+
Point[] defaultCurve = new Point[] {new Point(128,128), new Point(64,0), new Point(192,255)};
91+
addFilter(new ToneCurveFilter(defaultCurve,defaultCurve,defaultCurve,defaultCurve));
5892
addFilter(new HueFilter(3.14f/6f));
59-
addFilter(new ImageBrightnessFilter(0.5f));
93+
addFilter(new BrightnessFilter(0.5f));
6094
addFilter(new ColourMatrixFilter(new float[]{ 0.33f,0f,0f,0f,
6195
0f,0.67f,0f,0f,
6296
0f,0f,1.34f,0f,
@@ -69,17 +103,17 @@ protected void onCreate(Bundle savedInstanceState) {
69103
1/25f,1/25f,1/25f,1/25f,1/25f,
70104
1/25f,1/25f,1/25f,1/25f,1/25f,
71105
1/25f,1/25f,1/25f,1/25f,1/25f}, 5, 5));
72-
addFilter(new ImageExposureFilter(0.95f));
73-
addFilter(new ImageContrastFilter(1.5f));
74-
addFilter(new ImageSaturationFilter(0.5f));
75-
addFilter(new ImageGammaFilter(1.75f));
76-
addFilter(new ImageLevelsFilter(0.2f,0.8f,1f,0f,1f));
106+
addFilter(new ExposureFilter(0.95f));
107+
addFilter(new ContrastFilter(1.5f));
108+
addFilter(new SaturationFilter(0.5f));
109+
addFilter(new GammaFilter(1.75f));
110+
addFilter(new LevelsFilter(0.2f,0.8f,1f,0f,1f));
77111

78112
screen = new ScreenEndpoint(pipeline);
79113

80114
image.addTarget(screen);
81-
for(int i = 0; i < numOfFilters; i++) {
82-
filters[i].addTarget(screen);
115+
for(BasicFilter filter : filters) {
116+
filter.addTarget(screen);
83117
}
84118

85119
pipeline.setRootRenderer(image);
@@ -92,13 +126,13 @@ public boolean onTouch(View v, MotionEvent e) {
92126
if(curFilter == 0) {
93127
image.removeTarget(screen);
94128
} else {
95-
image.removeTarget(filters[curFilter-1]);
129+
image.removeTarget(filters.get(curFilter-1));
96130
}
97-
curFilter=(curFilter+1)%(numOfFilters+1);
131+
curFilter=(curFilter+1)%(filters.size()+1);
98132
if(curFilter == 0) {
99133
image.addTarget(screen);
100134
} else {
101-
image.addTarget(filters[curFilter-1]);
135+
image.addTarget(filters.get(curFilter-1));
102136
}
103137
pipeline.startRendering();
104138
view.requestRender();

0 commit comments

Comments
 (0)