package com.marshalchen.common.demoofui.imageprocessingexample; import java.util.ArrayList; import java.util.List; import com.marshalchen.common.demoofui.R; import com.marshalchen.common.uimodule.imageprocessing.FastImageProcessingPipeline; import com.marshalchen.common.uimodule.imageprocessing.FastImageProcessingView; import com.marshalchen.common.uimodule.imageprocessing.filter.MultiInputFilter; import com.marshalchen.common.uimodule.imageprocessing.filter.blend.*; import com.marshalchen.common.uimodule.imageprocessing.input.CameraPreviewInput; import com.marshalchen.common.uimodule.imageprocessing.input.GLTextureOutputRenderer; import com.marshalchen.common.uimodule.imageprocessing.input.ImageResourceInput; import com.marshalchen.common.uimodule.imageprocessing.outputs.ScreenEndpoint; import android.os.Build; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.view.MotionEvent; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Toast; public class ImageProcessingTwoInputfilterActivity extends Activity { private FastImageProcessingView view; private List<MultiInputFilter> filters; private int curFilter; private GLTextureOutputRenderer input; private GLTextureOutputRenderer input2; private long touchTime; private FastImageProcessingPipeline pipeline; private ScreenEndpoint screen; private boolean usingCamera; private void addFilter(MultiInputFilter filter) { filters.add(filter); filter.addTarget(screen); filter.registerFilterLocation(input); filter.registerFilterLocation(input2); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); view = new FastImageProcessingView(this); pipeline = new FastImageProcessingPipeline(); view.setPipeline(pipeline); setContentView(view); usingCamera = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH); if (usingCamera) { input = new CameraPreviewInput(view); } else { input = new ImageResourceInput(view, this, R.drawable.image_processing_kukulkan); } input2 = new ImageResourceInput(view, this, R.drawable.test_back1); filters = new ArrayList<MultiInputFilter>(); screen = new ScreenEndpoint(pipeline); addFilter(new MaskFilter()); addFilter(new LinearBurnBlendFilter()); addFilter(new LuminosityBlendFilter()); //TODO fix android 2.2 addFilter(new SaturationBlendFilter()); //TODO fix android 2.2 addFilter(new HueBlendFilter()); addFilter(new ColourBlendFilter()); //TODO fix android 2.2 addFilter(new NormalBlendFilter()); addFilter(new SourceOverBlendFilter()); addFilter(new SoftLightBlendFilter()); addFilter(new HardLightBlendFilter()); addFilter(new DifferenceBlendFilter()); addFilter(new ExclusionBlendFilter()); addFilter(new ScreenBlendFilter()); addFilter(new ColourDodgeBlendFilter()); addFilter(new ColourBurnBlendFilter()); addFilter(new LightenBlendFilter()); addFilter(new DarkenBlendFilter()); addFilter(new OverlayBlendFilter()); addFilter(new DivideBlendFilter()); addFilter(new SubtractBlendFilter()); addFilter(new AddBlendFilter()); //TODO fix addFilter(new MultiplyBlendFilter()); addFilter(new DissolveBlendFilter(0.7f)); addFilter(new ChromaKeyBlendFilter(new float[]{1.0f, 0.3f, 0.0f}, 0.4f, 0.1f)); addFilter(new AlphaBlendFilter(0.9f)); input.addTarget(filters.get(0)); input2.addTarget(filters.get(0)); pipeline.addRootRenderer(input); pipeline.addRootRenderer(input2); pipeline.startRendering(); final Context context = this; view.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent e) { if (System.currentTimeMillis() - touchTime > 100) { pipeline.pauseRendering(); touchTime = System.currentTimeMillis(); input.removeTarget(filters.get(curFilter)); input2.removeTarget(filters.get(curFilter)); curFilter = (curFilter + 1) % filters.size(); input.addTarget(filters.get(curFilter)); input2.addTarget(filters.get(curFilter)); Toast.makeText(context, filters.get(curFilter).getClass().getSimpleName(), Toast.LENGTH_SHORT).show(); pipeline.startRendering(); view.requestRender(); } return false; } }); Toast.makeText(this, "Tap the screen to change filter.", Toast.LENGTH_LONG).show(); } @Override public void onPause() { super.onPause(); if (usingCamera) { ((CameraPreviewInput) input).onPause(); } } @Override public void onResume() { super.onResume(); if (usingCamera) { ((CameraPreviewInput) input).onResume(); } } }