ImageFilter 开源图像滤镜类库的使用
今天分享的ImageFilter 的使用。 ImageFilter 是一个开源的图像滤镜类库,实现了大量的图像处理特效,无论是在项目中使用这些滤镜特效,还是研究图像图像处理算法都具有特殊的意义
(ImageFilterForAndroid在github的下载地址:https://github.com/daizhenjun/ImageFilterForAndroid)
附:效果图(参考地址:http://www.oschina.net/p/imagefilterforandroid/similar_projects?sort=view&lang=194)
下载的demo中有关于ImageFilter 多种滤镜效果处理的adapter处理多种选择滤镜方式,接下来我们来说一下单独设置滤镜效果(支持网络和本地照片)直接上代码:
封装AsyncTask来实现照片滤镜的异步加载
/**
* ImageFilter For Android 单独设置照片(支持网络照片、本地照片、固定照片)
* @author madreain
*
*/
public class ProcessImageTask {
public static class processImageTask extends AsyncTask<Void, Void, Bitmap> {
private IImageFilter filter;
private Context context = null;
private ImageView imageView;
private String picUrlOrFilePathStr;
/***
*
* @param context 上下文
* @param imageView 设置照片的控件ImageView
* @param picUrlOrFilePathStr 设置照片的路径
* @param imageFilter 过滤的样式
*/
public processImageTask(Context context, ImageView imageView, String picUrlOrFilePathStr, IImageFilter imageFilter) {
this.filter = imageFilter;
this.context = context;
this.imageView=imageView;
this.picUrlOrFilePathStr=picUrlOrFilePathStr;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
// textView.setVisibility(View.VISIBLE);
}
public Bitmap doInBackground(Void... params) {
Image img = null;
try
{
//将传过来的照片 进行处理得到bitmap
// 只设置固定的照片的
// Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(), R.drawable.wechat_icon);
Bitmap bitmap;
//从网络上拿到的照片
if(picUrlOrFilePathStr.startsWith("http")){
bitmap=getNetBitMap(picUrlOrFilePathStr);
}else {
//本地
bitmap= BitmapFactory.decodeFile(picUrlOrFilePathStr);
}
img = new Image(bitmap);
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(Bitmap result) {
if(result != null){
super.onPostExecute(result);
imageView.setImageBitmap(result);
}
// textView.setVisibility(View.GONE);
}
}
//网络照片
public final static Bitmap getNetBitMap(String url) {
URL myFileUrl = null;
Bitmap bitmap = null;
try {
myFileUrl = new URL(url);
HttpURLConnection conn;
conn = (HttpURLConnection) myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bitmap;
}
public static String getSDPath(){
File sdDir = null;
boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); //判断sd卡是否存在
if (sdCardExist)
{
sdDir = Environment.getExternalStorageDirectory();//获取跟目录
}
return sdDir.toString();
}
}
具体Activity(Fragment)中设置滤镜效果代码
//设置过滤效果
IImageFilter filter=new BrickFilter();//滤镜效果根据自己的需求去选择
new ProcessImageTask.processImageTask(PersonDynamicActivity.this,viewHolder.img_dynamic_photo, pic,filter).execute();