Skip to content

Commit

Permalink
Add android gpu-image
Browse files Browse the repository at this point in the history
  • Loading branch information
esafirm committed Jun 16, 2016
1 parent c137498 commit 32fd078
Show file tree
Hide file tree
Showing 14 changed files with 408 additions and 0 deletions.
2 changes: 2 additions & 0 deletions app/build.gradle
Expand Up @@ -20,6 +20,7 @@ android {
}

repositories{
jcenter()
maven {
url 'http://dl.bintray.com/amulyakhare/maven'
}
Expand All @@ -32,4 +33,5 @@ dependencies {
compile 'com.android.support:recyclerview-v7:23.0.+'
compile 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
compile 'de.hdodenhof:circleimageview:1.3.0'
compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
}
Expand Up @@ -14,6 +14,7 @@
import android.view.MenuItem;

import com.inagata.imageeffects.Fragment.EffectsFilterFragment;
import com.inagata.imageeffects.Fragment.GpuFilterFragment;
import com.inagata.imageeffects.Fragment.LayerDrawableFragment;
import com.inagata.imageeffects.R;

Expand Down Expand Up @@ -61,6 +62,9 @@ public boolean onNavigationItemSelected(MenuItem menuItem) {
case R.id.bt_layerd:
changeFragment(new LayerDrawableFragment());
break;
case R.id.bt_gpu:
changeFragment(new GpuFilterFragment());
break;
}

return true;
Expand Down
@@ -0,0 +1,98 @@
package com.inagata.imageeffects.Adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.amulyakhare.textdrawable.TextDrawable;
import com.amulyakhare.textdrawable.util.ColorGenerator;
import com.inagata.imageeffects.R;
import com.inagata.imageeffects.Utilities.FilterType;

import java.util.LinkedList;
import java.util.List;

/**
* Created by mnafian on 6/16/15.
*/
public class FilterAdapterGPU extends RecyclerView.Adapter<FilterAdapterGPU.FilterHolder> {

private FilterList filterList;
private Context mContext;

public FilterAdapterGPU(Context mContext) {
super();
this.mContext = mContext;
populateData();
}

public FilterType getItem(int position) {
return filterList.filters.get(position);
}

private void populateData() {
filterList = new FilterList();
filterList.addFilter("No Filter", null);
filterList.addFilter("Toon", FilterType.TOON);
filterList.addFilter("Sketch", FilterType.SKETCH);
filterList.addFilter("Vignette", FilterType.VIGNETTE);
filterList.addFilter("Invert", FilterType.INVERT);
filterList.addFilter("Grayscale", FilterType.GRAYSCALE);
}

@Override
public FilterHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.
from(parent.getContext()).
inflate(R.layout.imf_filter_item, parent, false);
FilterHolder viewHolder = new FilterHolder(itemView);
return viewHolder;
}

@Override
public void onBindViewHolder(FilterHolder holder, int position) {
String val = filterList.names.get(position);

ColorGenerator generator = ColorGenerator.MATERIAL;
// generate random color
int color1 = generator.getRandomColor();

TextDrawable.IBuilder builder = TextDrawable.builder()
.beginConfig()
.withBorder(2)
.fontSize(23)
.endConfig()
.rect();

TextDrawable drawable = builder.build(val.substring(0, Math.min(5, val.length() - 1)), color1);

holder.imFilter.setImageDrawable(drawable);
}

@Override
public int getItemCount() {
return filterList.names.size();
}

public class FilterHolder extends RecyclerView.ViewHolder {
public ImageView imFilter;

public FilterHolder(View itemView) {
super(itemView);
imFilter = (ImageView) itemView.findViewById(R.id.effectsviewimage_item);
}
}

private static class FilterList {
public List<String> names = new LinkedList<>();
public List<FilterType> filters = new LinkedList<FilterType>();

public void addFilter(final String name, final FilterType filter) {
names.add(name);
filters.add(filter);
}
}
}
@@ -0,0 +1,106 @@
package com.inagata.imageeffects.Fragment;

import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.inagata.imageeffects.Adapter.FilterAdapterGPU;
import com.inagata.imageeffects.R;
import com.inagata.imageeffects.Utilities.FilterType;
import com.inagata.imageeffects.Utilities.RecyclerItemClickListener;

import jp.co.cyberagent.android.gpuimage.GPUImageColorInvertFilter;
import jp.co.cyberagent.android.gpuimage.GPUImageFilter;
import jp.co.cyberagent.android.gpuimage.GPUImageGrayscaleFilter;
import jp.co.cyberagent.android.gpuimage.GPUImageSketchFilter;
import jp.co.cyberagent.android.gpuimage.GPUImageToonFilter;
import jp.co.cyberagent.android.gpuimage.GPUImageView;
import jp.co.cyberagent.android.gpuimage.GPUImageVignetteFilter;

/**
* Created by esafirm on 6/15/16.
*/
public class GpuFilterFragment extends Fragment {

private RecyclerView recyclerView;
private GPUImageView effectView;
private Bitmap image;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.imf_gpu, container, false);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

effectView = (GPUImageView) view.findViewById(R.id.effectsview);

LinearLayoutManager linearLayoutManager =
new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);

recyclerView = (RecyclerView) view.findViewById(R.id.rc_filter);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(linearLayoutManager);

final FilterAdapterGPU adapter = new FilterAdapterGPU(getActivity());
recyclerView.setAdapter(adapter);

recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
applyEffect(adapter.getItem(position));
}
}));
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
init();
}

private void init(){
image = ((BitmapDrawable) ContextCompat.getDrawable(getActivity(), R.drawable.nabilah)).getBitmap();
effectView.setImage(image);
}

private void applyEffect(FilterType filterType) {
if (filterType == null) {
applyEffect(new GPUImageFilter());
return;
}

switch (filterType) {
case GRAYSCALE:
applyEffect(new GPUImageGrayscaleFilter());
break;
case TOON:
applyEffect(new GPUImageToonFilter());
break;
case VIGNETTE:
applyEffect(new GPUImageVignetteFilter());
break;
case INVERT:
applyEffect(new GPUImageColorInvertFilter());
break;
case SKETCH:
applyEffect(new GPUImageSketchFilter());
break;
}
}

private void applyEffect(final GPUImageFilter filter) {
effectView.setFilter(filter);
}
}
@@ -0,0 +1,116 @@
package com.inagata.imageeffects.Fragment;

import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.inagata.imageeffects.Adapter.FilterAdapterDrawable;
import com.inagata.imageeffects.R;
import com.inagata.imageeffects.Utilities.RecyclerItemClickListener;


public class LayerDrawableFragment extends Fragment {
private ImageView testimage;
private RecyclerView recList;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.imf_layer_drawable, container, false);
testimage = (ImageView) view.findViewById(R.id.testimage);

LinearLayoutManager layoutManager
= new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);

recList = (RecyclerView) view.findViewById(R.id.rc_filter);
recList.setHasFixedSize(true);
recList.setLayoutManager(layoutManager);

FilterAdapterDrawable filterAdapter = new FilterAdapterDrawable(getActivity());
recList.setAdapter(filterAdapter);

recList.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
updateImage(position);
}
}));

return view;
}
public void updateImage(int position){
Resources r = getResources();
Drawable[] layers = new Drawable[2];
layers[0] = r.getDrawable(R.drawable.nabilah);
switch (position) {
case 0:
layers[1] = r.getDrawable(R.drawable.wall1box);
layers[1].setAlpha(90);
break;

case 1:
layers[1] = r.getDrawable(R.drawable.wall2box);
layers[1].setAlpha(90);
break;

case 2:
layers[1] = r.getDrawable(R.drawable.wall3box);
layers[1].setAlpha(90);
break;

case 3:
layers[1] = r.getDrawable(R.drawable.wall4box);
layers[1].setAlpha(90);
break;

case 4:
layers[1] = r.getDrawable(R.drawable.wall5box);
layers[1].setAlpha(90);
break;

case 5:
layers[1] = r.getDrawable(R.drawable.wall6box);
layers[1].setAlpha(90);
break;

case 6:
layers[1] = r.getDrawable(R.drawable.wall7box);
layers[1].setAlpha(90);
break;

case 7:
layers[1] = r.getDrawable(R.drawable.wall8box);
layers[1].setAlpha(90);
break;

case 8:
layers[1] = r.getDrawable(R.drawable.wall9box);
layers[1].setAlpha(90);
break;

case 9:
layers[1] = r.getDrawable(R.drawable.wall10box);
layers[1].setAlpha(90);
break;

case 10:
layers[1] = r.getDrawable(R.drawable.wall11box);
layers[1].setAlpha(90);
break;

case 11:
layers[1] = r.getDrawable(R.drawable.wall12box);
layers[1].setAlpha(90);
break;
}
android.graphics.drawable.LayerDrawable layerDrawable = new android.graphics.drawable.LayerDrawable(layers);
testimage.setImageDrawable(layerDrawable);
testimage.destroyDrawingCache();
}
}
@@ -0,0 +1,5 @@
package com.inagata.imageeffects.Utilities;

public enum FilterType{
GRAYSCALE, TOON, VIGNETTE, INVERT, SKETCH
}
Binary file added app/src/main/res/drawable-hdpi/ic_graphic_eq.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added app/src/main/res/drawable-mdpi/ic_graphic_eq.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added app/src/main/res/drawable-xhdpi/ic_graphic_eq.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added app/src/main/res/drawable-xxhdpi/ic_graphic_eq.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added app/src/main/res/drawable-xxxhdpi/ic_graphic_eq.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 32fd078

Please sign in to comment.