package com.kaixin.android.activity;
import java.io.File;
import java.io.FileOutputStream;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import com.kaixin.android.KXActivity;
import com.kaixin.android.R;
import com.kaixin.android.filter.EdgeFilter;
import com.kaixin.android.filter.FilmFilter;
import com.kaixin.android.filter.GammaFilter;
import com.kaixin.android.filter.IImageFilter;
import com.kaixin.android.filter.Image;
import com.kaixin.android.filter.SaturationModifyFilter;
import com.kaixin.android.filter.ZoomBlurFilter;
import com.kaixin.android.utils.PhotoUtil;
import com.kaixin.android.view.LoadingDailog;
/**
* 图片特效类
*
* @author gyz
*
*/
public class ImageFilterEffectActivity extends KXActivity {
private Button mCancel;
private Button mDetermine;
private ImageView mDisplay;
private ImageButton mEffect_1;
private ImageButton mEffect_2;
private ImageButton mEffect_3;
private ImageButton mEffect_4;
private ImageButton mEffect_5;
private ImageButton mEffect_6;
private ImageButton mEffect_7;
private ImageButton mEffect_8;
private ImageButton mEffect_9;
private ImageButton mEffect_10;
private IImageFilter filter;
private String mPath;// 图片地址
private Bitmap mOldBitmap;// 旧图片
private Bitmap mNewBitmap;// 新图片
private int mEffectId = 1;// 特效的编号
private LoadingDailog loadingDailog;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.imagefilter_effect_activity);
findViewById();
setListener();
init();
}
private void findViewById() {
mCancel = (Button) findViewById(R.id.imagefilter_effect_cancel);
mDetermine = (Button) findViewById(R.id.imagefilter_effect_determine);
mDisplay = (ImageView) findViewById(R.id.imagefilter_effect_display);
mEffect_1 = (ImageButton) findViewById(R.id.imagefilter_effect_effect1);
mEffect_2 = (ImageButton) findViewById(R.id.imagefilter_effect_effect2);
mEffect_3 = (ImageButton) findViewById(R.id.imagefilter_effect_effect3);
mEffect_4 = (ImageButton) findViewById(R.id.imagefilter_effect_effect4);
mEffect_5 = (ImageButton) findViewById(R.id.imagefilter_effect_effect5);
mEffect_6 = (ImageButton) findViewById(R.id.imagefilter_effect_effect6);
mEffect_7 = (ImageButton) findViewById(R.id.imagefilter_effect_effect7);
mEffect_8 = (ImageButton) findViewById(R.id.imagefilter_effect_effect8);
mEffect_9 = (ImageButton) findViewById(R.id.imagefilter_effect_effect9);
mEffect_10 = (ImageButton) findViewById(R.id.imagefilter_effect_effect10);
}
private void setListener() {
mCancel.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 显示返回对话框
backDialog();
}
});
mDetermine.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 如果是1代表原图,不做任何操作返回,否则则保存图片到本地并返回地址
if (mEffectId == 1) {
setResult(RESULT_CANCELED);
finish();
} else {
mPath = PhotoUtil.saveToLocal(mNewBitmap);
Intent intent = new Intent();
intent.putExtra("path", mPath);
setResult(RESULT_OK, intent);
finish();
}
}
});
// 原图
mEffect_1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mDisplay.setImageBitmap(mOldBitmap);
mEffectId = 1;
}
});
// Lomo
mEffect_2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mNewBitmap = PhotoUtil.lomoFilter(mOldBitmap);
mDisplay.setImageBitmap(mNewBitmap);
mEffectId = 2;
}
});
// 印象派
mEffect_3.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Toast.makeText(ImageFilterEffectActivity.this, "暂时没有找到该效果",
// Toast.LENGTH_SHORT).show();
filter = new EdgeFilter();
new processImageTask(ImageFilterEffectActivity.this, filter).execute(mOldBitmap);
mEffectId = 3;
}
});
// 优雅
mEffect_4.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
filter = new ZoomBlurFilter(10);
new processImageTask(ImageFilterEffectActivity.this, filter).execute(mOldBitmap);
mEffectId = 4;
}
});
// 小清新
mEffect_5.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
filter = new GammaFilter(50);
new processImageTask(ImageFilterEffectActivity.this, filter).execute(mOldBitmap);
mEffectId = 5;
}
});
// 单纯
mEffect_6.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mNewBitmap = PhotoUtil.handleImage(mOldBitmap, 0, 127, 127);
mDisplay.setImageBitmap(mNewBitmap);
mEffectId = 6;
}
});
// 沉静
mEffect_7.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
filter = new FilmFilter(75f);
new processImageTask(ImageFilterEffectActivity.this, filter).execute(mOldBitmap);
mEffectId = 7;
}
});
// 灿烂
mEffect_8.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
filter = new SaturationModifyFilter();
new processImageTask(ImageFilterEffectActivity.this, filter).execute(mOldBitmap);
mEffectId = 8;
}
});
// 旧时光
mEffect_9.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mNewBitmap = PhotoUtil.oldTimeFilter(mOldBitmap);
mDisplay.setImageBitmap(mNewBitmap);
mEffectId = 9;
}
});
// 暖意
mEffect_10.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mNewBitmap = PhotoUtil.warmthFilter(mOldBitmap,
mOldBitmap.getWidth() / 2, mOldBitmap.getHeight() / 2);
mDisplay.setImageBitmap(mNewBitmap);
mEffectId = 10;
}
});
}
public class processImageTask extends AsyncTask<Bitmap, Bitmap, Bitmap>{
private IImageFilter filter;
private Activity activity = null;
public processImageTask(Activity activity, IImageFilter imageFilter) {
this.filter = imageFilter;
this.activity = activity;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
loadingDailog = new LoadingDailog(ImageFilterEffectActivity.this);
loadingDailog.show();
}
@Override
protected Bitmap doInBackground(Bitmap... bitmap0) {
// TODO Auto-generated method stub
Image img = null;
try
{
img = new Image(mOldBitmap);
if (filter != null) {
img = filter.process(img);
img.copyPixelsFromBuffer();
}
return img.getImage();
}
catch(Exception e){
if (img != null && img.destImage.isRecycled()) {
img.destImage.recycle();
img.destImage = null;
System.gc(); // ����ϵͳ��ʱ����
}
}
finally{
if (img != null && img.image.isRecycled()) {
img.image.recycle();
img.image = null;
System.gc(); // ����ϵͳ��ʱ����
}
}
return null;
}
@Override
protected void onPostExecute(final Bitmap result) {
if(result != null){
super.onPostExecute(result);
mDisplay.setImageBitmap(result);
mNewBitmap = result;
}
loadingDailog.dismiss();
}
}
private void init() {
// 获取图片地址、图片并显示图片
mPath = getIntent().getStringExtra("path");
mOldBitmap = mKXApplication.getPhoneAlbum(mPath);
mDisplay.setImageBitmap(mOldBitmap);
}
/**
* 返回对话框
*/
private void backDialog() {
AlertDialog.Builder builder = new Builder(
ImageFilterEffectActivity.this);
builder.setTitle("OOXX");
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setMessage("你确定要取消编辑吗?");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
setResult(RESULT_CANCELED);
finish();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.create().show();
}
public void onBackPressed() {
backDialog();
}
}