added control to filter

pull/527/head
Suneet Agrawal 6 years ago
parent 230ba97702
commit 935a5e1461
  1. 81
      demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java
  2. 6
      demo/src/main/res/drawable/ic_filters.xml
  3. 22
      demo/src/main/res/layout/activity_camera.xml

@ -34,6 +34,8 @@ import com.otaliastudios.cameraview.VideoResult;
import com.otaliastudios.cameraview.controls.Preview; import com.otaliastudios.cameraview.controls.Preview;
import com.otaliastudios.cameraview.frame.Frame; import com.otaliastudios.cameraview.frame.Frame;
import com.otaliastudios.cameraview.frame.FrameProcessor; import com.otaliastudios.cameraview.frame.FrameProcessor;
import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect;
import com.otaliastudios.cameraview.shadereffects.ShaderEffectFactory;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
@ -51,6 +53,8 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis
private ViewGroup controlPanel; private ViewGroup controlPanel;
private long mCaptureTime; private long mCaptureTime;
private ShaderEffectFactory.ShaderEffects mCurrentEffect = ShaderEffectFactory.ShaderEffects.NO_EFFECT;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -95,6 +99,7 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis
findViewById(R.id.captureVideo).setOnClickListener(this); findViewById(R.id.captureVideo).setOnClickListener(this);
findViewById(R.id.captureVideoSnapshot).setOnClickListener(this); findViewById(R.id.captureVideoSnapshot).setOnClickListener(this);
findViewById(R.id.toggleCamera).setOnClickListener(this); findViewById(R.id.toggleCamera).setOnClickListener(this);
findViewById(R.id.changeFilter).setOnClickListener(this);
controlPanel = findViewById(R.id.controls); controlPanel = findViewById(R.id.controls);
ViewGroup group = (ViewGroup) controlPanel.getChildAt(0); ViewGroup group = (ViewGroup) controlPanel.getChildAt(0);
@ -236,6 +241,7 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis
case R.id.captureVideo: captureVideo(); break; case R.id.captureVideo: captureVideo(); break;
case R.id.captureVideoSnapshot: captureVideoSnapshot(); break; case R.id.captureVideoSnapshot: captureVideoSnapshot(); break;
case R.id.toggleCamera: toggleCamera(); break; case R.id.toggleCamera: toggleCamera(); break;
case R.id.changeFilter: changeCurrentFilter(); break;
} }
} }
@ -312,6 +318,81 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis
} }
} }
private void changeCurrentFilter(){
switch (mCurrentEffect){
case NO_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.AUTO_FIX_EFFECT;
break;
case AUTO_FIX_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.BLACK_AND_WHITE_EFFECT;
break;
case BLACK_AND_WHITE_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.BRIGHTNESS_EFFECT;
break;
case BRIGHTNESS_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.CONTRAST_EFFECT;
break;
case CONTRAST_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.CROSS_PROCESS_EFFECT;
break;
case CROSS_PROCESS_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.DOCUMENTARY_EFFECT;
break;
case DOCUMENTARY_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.DUO_TONE_COLOR_EFFECT;
break;
case DUO_TONE_COLOR_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.FILL_LIGHT_EFFECT;
break;
case FILL_LIGHT_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.GAMMA_EFFECT;
break;
case GAMMA_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.GRAIN_EFFECT;
break;
case GRAIN_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.GREY_SCALE_EFFECT;
break;
case GREY_SCALE_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.HUE_EFFECT;
break;
case HUE_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.INVERT_COLOR_EFFECT;
break;
case INVERT_COLOR_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.LAMOISH_EFFECT;
break;
case LAMOISH_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.POSTERIZE_EFFECT;
break;
case POSTERIZE_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.SATURATION_EFFECT;
break;
case SATURATION_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.SEPIA_EFFECT;
break;
case SEPIA_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.SHARPNESS_EFFECT;
break;
case SHARPNESS_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.TEMPERATURE_EFFECT;
break;
case TEMPERATURE_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.TINT_EFFECT;
break;
case TINT_EFFECT:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.VIGNETTE_EFFECT;
break;
case VIGNETTE_EFFECT:
default:
mCurrentEffect = ShaderEffectFactory.ShaderEffects.NO_EFFECT;
break;
}
camera.changeEffect(mCurrentEffect);
}
@Override @Override
public <T> boolean onValueChanged(@NonNull Option<T> option, @NonNull T value, @NonNull String name) { public <T> boolean onValueChanged(@NonNull Option<T> option, @NonNull T value, @NonNull String name) {
if ((option instanceof Option.Width || option instanceof Option.Height)) { if ((option instanceof Option.Width || option instanceof Option.Height)) {

@ -0,0 +1,6 @@
<vector android:height="24dp" android:viewportHeight="480.3"
android:viewportWidth="480.3" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFFFFF" android:pathData="M254.15,234.1V13.5c0,-7.5 -6,-13.5 -13.5,-13.5s-13.5,6 -13.5,13.5v220.6c-31.3,6.3 -55,34 -55,67.2s23.7,60.9 55,67.2v98.2c0,7.5 6,13.5 13.5,13.5s13.5,-6 13.5,-13.5v-98.2c31.3,-6.3 55,-34 55,-67.2C309.15,268.2 285.55,240.4 254.15,234.1zM240.65,342.8c-22.9,0 -41.5,-18.6 -41.5,-41.5s18.6,-41.5 41.5,-41.5s41.5,18.6 41.5,41.5S263.55,342.8 240.65,342.8z"/>
<path android:fillColor="#FFFFFF" android:pathData="M88.85,120.9V13.5c0,-7.5 -6,-13.5 -13.5,-13.5s-13.5,6 -13.5,13.5v107.4c-31.3,6.3 -55,34 -55,67.2s23.7,60.9 55,67.2v211.4c0,7.5 6,13.5 13.5,13.5s13.5,-6 13.5,-13.5V255.2c31.3,-6.3 55,-34 55,-67.2S120.15,127.2 88.85,120.9zM75.35,229.6c-22.9,0 -41.5,-18.6 -41.5,-41.5s18.6,-41.5 41.5,-41.5s41.5,18.6 41.5,41.5S98.15,229.6 75.35,229.6z"/>
<path android:fillColor="#FFFFFF" android:pathData="M418.45,120.9V13.5c0,-7.5 -6,-13.5 -13.5,-13.5s-13.5,6 -13.5,13.5v107.4c-31.3,6.3 -55,34 -55,67.2s23.7,60.9 55,67.2v211.5c0,7.5 6,13.5 13.5,13.5s13.5,-6 13.5,-13.5V255.2c31.3,-6.3 55,-34 55,-67.2S449.85,127.2 418.45,120.9zM404.95,229.6c-22.9,0 -41.5,-18.6 -41.5,-41.5s18.6,-41.5 41.5,-41.5s41.5,18.6 41.5,41.5S427.85,229.6 404.95,229.6z"/>
</vector>

@ -46,15 +46,35 @@
</com.otaliastudios.cameraview.CameraView> </com.otaliastudios.cameraview.CameraView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="top|end">
<ImageButton <ImageButton
android:id="@+id/toggleCamera" android:id="@+id/toggleCamera"
android:layout_width="56dp" android:layout_width="56dp"
android:layout_height="56dp" android:layout_height="56dp"
android:layout_margin="16dp" android:layout_margin="16dp"
android:layout_gravity="top|end"
android:background="@drawable/background" android:background="@drawable/background"
app:srcCompat="@drawable/ic_switch" /> app:srcCompat="@drawable/ic_switch" />
<ImageButton
android:id="@+id/changeFilter"
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_margin="16dp"
android:background="@drawable/background"
app:srcCompat="@drawable/ic_filters" />
</LinearLayout>
<!-- Controls --> <!-- Controls -->
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"

Loading…
Cancel
Save