ImageFilter 开源图像滤镜类库的使用

本文介绍ImageFilter,一个开源图像滤镜类库,支持大量图像处理特效,包括网络和本地图片处理。通过AsyncTask实现照片滤镜的异步加载,并提供了一个具体的Activity示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值