本实例是使用原图片进行简单的过滤处理成自己想要的效果,过滤图片的处理类使用的是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常用图片处理特效源码"提供了一套适用于Android平台的图片特效处理方案,其中包括了高斯模糊的具体算法实现。这篇文章将深入探讨这个主题,并详细解释相关的知识点。 首先,我们来看"图片处理"这一...
本文将深入探讨如何在Android平台上实现图片的拼接、缩放、特效、拖动以及翻转功能,这些都是移动应用中常见的交互和视觉元素。我们将以`DrawDemo`为例,来阐述这些技术的实现细节。 1. **图片拼接**: 图片拼接是...
这个“android常用图片特效处理_Android.rar”压缩包可能包含了多个与Android平台图片处理相关的资源和代码示例,让我们来深入探讨一下Android中常用的图片特效处理技术。 1. **Bitmap操作**: Android提供了...
在Android开发中,图片特效处理是一项重要的任务,它涉及到用户界面的美观以及用户体验的提升。这个压缩包"android常用图片特效处理.zip"很可能包含了多种Android平台下实现图片特效的示例代码、教程或者库文件。...
在Android开发中,图片特效处理是一项重要的任务,它涉及到用户界面的美观度和用户体验的提升。这个名为"android常用图片特效处理.7z"的压缩包文件很可能包含了各种用于Android平台的图片处理技术和示例代码。以下是...
在Android平台上,图片特效处理是移动应用开发中的一个重要领域,特别是在社交媒体、图像编辑以及各种创意应用中。这个毕业设计项目专注于Android图片特效处理,提供了完整的源码,使得开发者可以直接运行和学习。...
在开源社区中,有很多预封装好的图像过滤库,如Android-ImageFilter,它可以提供各种预设的图片特效,开发者可以通过简单的调用来应用到自己的项目中。 8. **自定义View**: 当标准的View组件无法满足需求时,...
"Android 图像冰冻特效源码.zip"提供了一个实现图像冰冻效果的源代码示例,这可以帮助开发者理解和学习如何在Android应用中创建独特视觉体验。源码中可能包含关键类、方法以及资源文件,用于模拟图像在特定条件下的...
5. **使用第三方库**:许多优秀的第三方库简化了Android图片特效的实现,比如Android-Image-Cropper用于裁剪,Android-FilterPack提供了一系列的图像过滤器,GLFilterLibrary则基于OpenGL ES提供了实时的图像滤镜...
在Android应用开发中,图片特效处理是提升用户体验和视觉效果的重要环节。本资源"Android应用源码常用图片特效处理.zip"包含了一些常见的图片处理技术,适用于Android应用中的各种场景,如用户头像、背景图、按钮...
本篇文章将深入探讨FFmpeg在Android中的应用,特别是与frei0r视频特效、视频编辑和图片编辑相关的知识点。 首先,FFmpeg是一个跨平台的解决方案,它包含了多种音视频处理工具,如ffmpeg命令行工具、libavcodec...
android图片特效,图片过滤 首先实选择列表从最左边开始排序并且默认选中第一项,这里为了实现从最左边开始所以使用HorizontalScrollView结合GridView实现Gallery view 图片效果图
例如,可以通过调整模糊半径来控制模糊程度,或者结合其他特效,如颜色过滤,来创造独特的视觉风格。同时,由于"FastBlur"是针对性能优化的,即使在性能较低的设备上,也能流畅运行。 总结来说,"android图片模糊...
图片编辑功能可能涉及到滤镜和特效的实现。我们可以利用Android的OpenGL ES库或者第三方库如OpenCV来实现复杂的图像处理。滤镜通常通过应用色彩空间转换、亮度调整、对比度改变等算法来实现。 此外,考虑到用户体验...
这些过滤器可能用于实现图像的实时美化、特效应用或图像后期处理。下面我们将深入探讨Android图像过滤器相关的知识点。 1. **OpenCV库**:OpenCV(开源计算机视觉库)是Android图像处理常用的第三方库,它提供了...