本实例是使用原图片进行简单的过滤处理成自己想要的效果,过滤图片的处理类使用的是daizhj提供的,github上面有下载:
源码下载:
https://github.com/daizhenjun/ImageFilterC C++ for ios
https://github.com/daizhenjun/ImageFilterForWindowsPhone Windows Phone7
https://github.com/daizhenjun/ImageFilterForAndroid Android 2.1版本及以上
原文链接:http://www.cnblogs.com/daizhj/archive/2012/06/21/2557550.html
下面的效果是基于以上作者提供的处理包做优化和实现的。
效果如下:
1.首先实选择列表从最左边开始排序并且默认选中第一项,这里为了实现从最左边开始所以使用HorizontalScrollView结合GridView实现Gallery view 图片效果图,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<!-- Gallery view 图片效果图 -->
<HorizontalScrollView
android:id="@+id/galleryScroll"
android:layout_width="fill_parent"
android:layout_height="90dip"
android:scrollbars="none"
android:focusable="false"
android:layout_alignParentBottom="true"
android:background="@drawable/camera_filter_review_bg"
>
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:focusable="false"
android:layout_gravity="center_vertical"
>
<LinearLayout
android:layout_width="770dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:focusable="false"
android:gravity="center"
android:layout_gravity="center"
>
<GridView android:id="@+id/gallery"
android:layout_width="fill_parent"
android:gravity="center"
android:layout_height="wrap_content"
android:horizontalSpacing="1.0dip"
android:verticalSpacing="1.0dip"
android:stretchMode="spacingWidthUniform"
android:numColumns="auto_fit"
android:columnWidth="70dip"
android:focusable="false"
android:cacheColorHint="#00000000"
android:listSelector="#00000000"
android:layout_gravity="center"
>
</GridView>
</LinearLayout>
</FrameLayout>
</HorizontalScrollView>
</LinearLayout>
2.下面把主界面代码贴出来,主要是加载数据,以及异步渲染图片操作。
import java.util.ArrayList;
import java.util.List;
import HaoRan.ImageFilter.AutoAdjustFilter;
import HaoRan.ImageFilter.ColorQuantizeFilter;
import HaoRan.ImageFilter.FeatherFilter;
import HaoRan.ImageFilter.IImageFilter;
import HaoRan.ImageFilter.Image;
import HaoRan.ImageFilter.OldPhotoFilter;
import HaoRan.ImageFilter.R;
import HaoRan.ImageFilter.RainBowFilter;
import HaoRan.ImageFilter.SepiaFilter;
import HaoRan.ImageFilter.VignetteFilter;
import HaoRan.ImageFilter.VintageFilter;
import HaoRan.ImageFilter.WaterWaveFilter;
import HaoRan.ImageFilter.XRadiationFilter;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ProgressBar;
public class ImageFilterMain extends Activity {
private ImageView imageView;
private ProgressBar mProgressBar;
private List<FilterInfo> filterArray = new ArrayList<FilterInfo>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageView= (ImageView) findViewById(R.id.cropimage_filter_show_iv);
mProgressBar = (ProgressBar) findViewById(R.id.progress_large);
//注:在android系统上,手机图片尺寸尽量控制在480*480范围内,否则在高斯运算时可以造成内存溢出的问题
Bitmap bitmap = BitmapFactory.decodeResource(ImageFilterMain.this.getResources(), R.drawable.image);
imageView.setImageBitmap(bitmap);
loadData();
LoadImageFilter();
}
private void LoadImageFilter() {
GridView gallery = (GridView) findViewById(R.id.gallery);
final ImageAdapter filterAdapter = new ImageAdapter(ImageFilterMain.this,filterArray);
gallery.setAdapter(filterAdapter);
gallery.setNumColumns(11);
gallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
filterAdapter.changeStatus(position);
filterAdapter.notifyDataSetChanged();
IImageFilter filter = (IImageFilter) filterAdapter.getItem(position);
//开始渲染
new processImageTask(ImageFilterMain.this, filter).execute();
}
});
}
/**
* 加载图片filter
*/
private void loadData(){
filterArray.add(new FilterInfo(R.drawable.saturationmodity_filter,null/* 此处会生成原图效果 */,true));
filterArray.add(new FilterInfo(R.drawable.vignette_filter, new VignetteFilter(),false));
filterArray.add(new FilterInfo(R.drawable.autoadjust_filter,new AutoAdjustFilter(),false));
filterArray.add(new FilterInfo(R.drawable.colorquantize_filter, new ColorQuantizeFilter(),false));
filterArray.add(new FilterInfo(R.drawable.waterwave_filter, new WaterWaveFilter(),false));
filterArray.add(new FilterInfo(R.drawable.vintage_filter,new VintageFilter(),false));
filterArray.add(new FilterInfo(R.drawable.oldphoto_filter,new OldPhotoFilter(),false));
filterArray.add(new FilterInfo(R.drawable.sepia_filter, new SepiaFilter(),false));
filterArray.add(new FilterInfo(R.drawable.rainbow_filter,new RainBowFilter(),false));
filterArray.add(new FilterInfo(R.drawable.feather_filter,new FeatherFilter(),false));
filterArray.add(new FilterInfo(R.drawable.xradiation_filter,new XRadiationFilter(),false));
}
//渲染,过滤图片异步任务
public class processImageTask extends AsyncTask<Void, Void, 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();
mProgressBar.setVisibility(View.VISIBLE);
}
public Bitmap doInBackground(Void... params) {
Image img = null;
try
{
Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(), R.drawable.image);
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);
}
mProgressBar.setVisibility(View.GONE);
}
}
}
3.最好把代码附上,有需要的可以自己下载慢慢研究
- 大小: 875.7 KB
分享到:
相关推荐
android图片特效,图片过滤 首先实选择列表从最左边开始排序并且默认选中第一项,这里为了实现从最左边开始所以使用HorizontalScrollView结合GridView实现Gallery view 图片效果图
各种安卓app安卓UI特效 非常炫的界面特效合集,你会谢我的.zip 放置菜单 过滤菜单 秒表 日历 水波涟漪效果 侧滑 壁画墙 吹泡泡 ...
Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音 * http://blog.csdn.net/xiaanming/article/details/12684155 * 2. Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框 * ...
2015/4/2 星期四 android进阶高阶案例-QQ5.0特效专辑 2015/4/3 星期五 2015/4/4 星期六 android游戏开发-植物大战僵尸 2015/4/5 星期日 清明节放假 2015/4/6 星期一 android游戏开发-植物大战僵尸 2015/4/7 星期二 ...
第6章 为伊消得人憔悴——纹理映射本章主要介绍了纹理的基础知识,以及纹理的不同拉伸方式和纹理过滤高级技术,从绘制三角形开始到绘制地月系,可能会经历很长时间,但是这对以后的学习是有帮助的 第7章 海阔凭...
创造惊人的全分辨率的HDR(高动态范围)你的Android设备的图片。提供滑块你轻松定制的最终结果的控制和影响。纯HDR相机是最好的HDR照相机的Android应用程序。 特征: ✔全分辨率。 ✔采取单抽头的HDR照片 ✔快速...
软件类别:特效相机 软件大小:43.2 MB 适用固件:4.0及更高固件 内置广告:没有广告 适用平台:Android CameraAce是一款拍照软件,内置4种设定模板,用户可以自己添加新的模板,模板中可以自定义各项参数。 主要...
操作简单没有繁琐的录屏步骤,就算手机没有 Root 权限也可以轻松进行超清视频录制、屏幕截图、同步录音、视频剪辑、视频编辑、视频制作、特效主题添加,一键分享等功能;无论是游戏的精彩瞬间,或者是应用的使用指南...
当然 KMPlayer 也推出了 Android 哦。KMPlayer 播放器作为一款经典的播放器是您电脑放电影不可缺少的工具哦。 来自韩国的影音全能播放器 KMPlayer 中文版来自韩国的影音全能播放器 KMPlayer 中文版 KMPlayer 简称 ...
上一篇文章我们介绍了常见的各种游戏特效的实现,你现在可以很轻松的实现各种游戏中所需要的特效,但是,你可能已经意识到了,我们的游戏一般都需要进行碰撞检测,比如前面的火柴棍小人,我们需要检测子弹和敌人...
学完了这阶段课程,学员将学会开发主流网站的前端效果,比如:焦点图、滚动展示图、网页防复制、网页自定义菜单、WebOS、美女时钟、无刷新评论、评分控件、表格特效、图片悬浮详细信息、微博界面、QQ消息框效果、Div...
此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...
在最后一章中,我们抛开API的细节,讨论如何为iOS 7、Android 4.3 NDK、Android 4.3 SDK、Windows和Linux构建OpenGL ES样板代码。该章的意图是作为一个指南,帮助你在所选择的OpenGL ES 3.0平台上建立和运行样板...
此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...