Skip to content

Commit e112ecd

Browse files
author
xufuji456
committed
Feature: add filter of blur
1 parent 9d0cb83 commit e112ecd

8 files changed

Lines changed: 65 additions & 0 deletions

File tree

CameraFilter/src/main/java/com/frank/camerafilter/factory/BeautyFilterFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.content.Context;
44

5+
import com.frank.camerafilter.filter.advance.BeautyBlurFilter;
56
import com.frank.camerafilter.filter.advance.BeautyHueFilter;
67
import com.frank.camerafilter.filter.advance.BeautySketchFilter;
78
import com.frank.camerafilter.filter.BaseFilter;
@@ -16,6 +17,8 @@ public static BaseFilter getFilter(BeautyFilterType type, Context context) {
1617
switch (type) {
1718
case SKETCH:
1819
return new BeautySketchFilter(context);
20+
case BLUR:
21+
return new BeautyBlurFilter(context);
1922
case HUE:
2023
return new BeautyHueFilter(context);
2124
case WHITE_BALANCE:

CameraFilter/src/main/java/com/frank/camerafilter/factory/BeautyFilterType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
public enum BeautyFilterType {
44
NONE,
5+
BLUR,
56
HUE,
67
WHITE_BALANCE,
78
SKETCH
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.frank.camerafilter.filter.advance;
2+
3+
import android.content.Context;
4+
import android.opengl.GLES30;
5+
6+
import com.frank.camerafilter.R;
7+
import com.frank.camerafilter.filter.BaseFilter;
8+
import com.frank.camerafilter.util.OpenGLUtil;
9+
10+
public class BeautyBlurFilter extends BaseFilter {
11+
12+
private int blurSize;
13+
14+
public BeautyBlurFilter(Context context) {
15+
super(NORMAL_VERTEX_SHADER, OpenGLUtil.readShaderFromSource(context, R.raw.zoomblur));
16+
}
17+
18+
protected void onInit() {
19+
super.onInit();
20+
blurSize = GLES30.glGetUniformLocation(getProgramId(), "blurSize");
21+
}
22+
23+
protected void onInitialized() {
24+
super.onInitialized();
25+
setFloat(blurSize, 0.3f);
26+
}
27+
28+
@Override
29+
public void onInputSizeChanged(int width, int height) {
30+
super.onInputSizeChanged(width, height);
31+
}
32+
33+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
varying highp vec2 textureCoordinate;
2+
3+
uniform sampler2D inputImageTexture;
4+
5+
uniform highp vec2 blurCenter;
6+
uniform highp float blurSize;
7+
8+
void main()
9+
{
10+
// TODO: Do a more intelligent scaling based on resolution here
11+
highp vec2 samplingOffset = 1.0/100.0 * (blurCenter - textureCoordinate) * blurSize;
12+
13+
lowp vec4 fragmentColor = texture2D(inputImageTexture, textureCoordinate) * 0.18;
14+
fragmentColor += texture2D(inputImageTexture, textureCoordinate + samplingOffset) * 0.15;
15+
fragmentColor += texture2D(inputImageTexture, textureCoordinate + (2.0 * samplingOffset)) * 0.12;
16+
fragmentColor += texture2D(inputImageTexture, textureCoordinate + (3.0 * samplingOffset)) * 0.09;
17+
fragmentColor += texture2D(inputImageTexture, textureCoordinate + (4.0 * samplingOffset)) * 0.05;
18+
fragmentColor += texture2D(inputImageTexture, textureCoordinate - samplingOffset) * 0.15;
19+
fragmentColor += texture2D(inputImageTexture, textureCoordinate - (2.0 * samplingOffset)) * 0.12;
20+
fragmentColor += texture2D(inputImageTexture, textureCoordinate - (3.0 * samplingOffset)) * 0.09;
21+
fragmentColor += texture2D(inputImageTexture, textureCoordinate - (4.0 * samplingOffset)) * 0.05;
22+
23+
gl_FragColor = fragmentColor;
24+
}

app/src/main/java/com/frank/ffmpeg/activity/CameraFilterActivity.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class CameraFilterActivity : BaseActivity() {
1515

1616
private val filterType: Array<BeautyFilterType> = arrayOf(
1717
BeautyFilterType.NONE,
18+
BeautyFilterType.BLUR,
1819
BeautyFilterType.HUE,
1920
BeautyFilterType.WHITE_BALANCE,
2021
BeautyFilterType.SKETCH

app/src/main/java/com/frank/ffmpeg/util/FilterTypeUtil.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ object FilterTypeUtil {
1313
fun filterTypeToNameId(type: BeautyFilterType): Int {
1414
return when (type) {
1515
BeautyFilterType.NONE -> R.string.camera_filter_none
16+
BeautyFilterType.BLUR -> R.string.camera_filter_blur
1617
BeautyFilterType.HUE -> R.string.camera_filter_hue
1718
BeautyFilterType.WHITE_BALANCE -> R.string.camera_filter_balance
1819
BeautyFilterType.SKETCH -> R.string.camera_filter_sketch

app/src/main/res/values-en/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,5 +116,6 @@
116116
<string name="camera_filter_hue">Hue</string>
117117
<string name="camera_filter_balance">White balance</string>
118118
<string name="camera_filter_sketch">Sketch</string>
119+
<string name="camera_filter_blur">Blur</string>
119120

120121
</resources>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,5 +116,6 @@
116116
<string name="camera_filter_hue">Hue</string>
117117
<string name="camera_filter_balance">白平衡</string>
118118
<string name="camera_filter_sketch">素描</string>
119+
<string name="camera_filter_blur">模糊</string>
119120

120121
</resources>

0 commit comments

Comments
 (0)