Android图像处理技术(实现Android中的PS)(一)
2015-03-23 21:01
113 查看
声明:本系列博客系笔记类,观看慕课网的视频教程后写下的笔记,感谢这位前辈的分享:http://blog.csdn.net/eclipsexys
1. 图像分析之RGBA模型
R: Red G : Green B: Blue A : Alpha
色调/色相:物体传递的颜色
饱和度:颜色的饱和程度
亮度/明度:颜色的明暗程度
1.如何在程序中设置RGB:
2.利用上面的知识自助制作一个PS小工具。
先上效果图:
下面我们来看看代码:
首先在MainActivity中定义一个点击时间,跳转到我们的第二个界面,第一个界面很简单,不说了,直接讲重点。
首先贴一下布局代码
很简单,一个ImageView,三个SeekBar,分别控制图像的色相,饱和度,亮度。
然后我们来看Activity中的代码:
也很简单,上面一大堆变量声明和监听器绑定,只有一句话需要说一下,imageView.setImageBitmap(ImageHelper.handleImage(bitmap, mHue, msaturation, mlum));,这里是我们自己定义的一个工具类。它可以改变图片的RGBA,从而实现PS的效果。下面贴一下代码。
主要代码都贴出来了,也有了比较详细的注释。想必大家也可以轻松实现这个PS功能了吧。
最后:Demo地址:http://download.csdn.net/detail/nsgsbs/8526515
1. 图像分析之RGBA模型
R: Red G : Green B: Blue A : Alpha
色调/色相:物体传递的颜色
饱和度:颜色的饱和程度
亮度/明度:颜色的明暗程度
1.如何在程序中设置RGB:
// 设置色相 ColorMatrix matrix=new ColorMatrix(); matrix.setRotate(0, 30); //0 代表 R matrix.setRotate(1, 30); //1 代表 G matrix.setRotate(2, 30); //2 代表 B // 设置饱和度 matrix.setSaturation(30); // 设置亮度 matrix.setScale(30, 30, 30, 30);
2.利用上面的知识自助制作一个PS小工具。
先上效果图:
下面我们来看看代码:
首先在MainActivity中定义一个点击时间,跳转到我们的第二个界面,第一个界面很简单,不说了,直接讲重点。
首先贴一下布局代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:orientation="vertical" > <ImageView android:id="@+id/imageView" android:layout_width="200dp" android:layout_height="200dp" android:src="@drawable/photo"/> <SeekBar android:id="@+id/hueSeekBar" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <SeekBar android:id="@+id/saturationSeekBar" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <SeekBar android:id="@+id/lumSeekBar" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout>
很简单,一个ImageView,三个SeekBar,分别控制图像的色相,饱和度,亮度。
然后我们来看Activity中的代码:
public class PrimarilyActivity extends Activity implements OnSeekBarChangeListener{ private ImageView imageView; private SeekBar hueSeekBar,saturationSeekBar,lumSeekBar; private static int MAX_VALUE=255; private static int MID_VALUE=127; private float mHue,msaturation,mlum; private Bitmap bitmap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.primarily); bitmap=BitmapFactory.decodeResource (getResources(), R.drawable.photo); imageView=(ImageView) findViewById(R.id.imageView); imageView.setImageBitmap(bitmap); hueSeekBar=(SeekBar) findViewById(R.id.hueSeekBar); saturationSeekBar=(SeekBar) findViewById(R.id.saturationSeekBar); lumSeekBar=(SeekBar) findViewById(R.id.lumSeekBar); hueSeekBar.setOnSeekBarChangeListener(this); saturationSeekBar.setOnSeekBarChangeListener(this); lumSeekBar.setOnSeekBarChangeListener(this); hueSeekBar.setMax(MAX_VALUE); saturationSeekBar.setMax(MAX_VALUE); lumSeekBar.setMax(MAX_VALUE); hueSeekBar.setProgress(MID_VALUE); saturationSeekBar.setProgress(MID_VALUE); lumSeekBar.setProgress(MID_VALUE); } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { switch (seekBar.getId()) { case R.id.hueSeekBar: //转化公式,看不懂先这样记着 mHue=(progress-MID_VALUE)*1.0F/MID_VALUE*180; break; case R.id.saturationSeekBar: //转化公式,看不懂先这样记着 msaturation=progress*1.0F/MID_VALUE; break; case R.id.lumSeekBar: //转化公式,看不懂先这样记着 mlum=progress*1.0F/MID_VALUE; break; } imageView.setImageBitmap(ImageHelper.handleImage(bitmap, mHue, msaturation, mlum)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }
也很简单,上面一大堆变量声明和监听器绑定,只有一句话需要说一下,imageView.setImageBitmap(ImageHelper.handleImage(bitmap, mHue, msaturation, mlum));,这里是我们自己定义的一个工具类。它可以改变图片的RGBA,从而实现PS的效果。下面贴一下代码。
public class ImageHelper { public static Bitmap handleImage(Bitmap bm,float hue,float saturation,float lum){ //确定图片的大小和格式。 Bitmap bmp=Bitmap.createBitmap(bm.getWidth(),bm.getHeight(),Bitmap.Config.ARGB_8888); // 新建画布 Canvas canvas=new Canvas(bmp); // 新建画笔 Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG); // 设置色相 ColorMatrix hueMatrix=new ColorMatrix(); hueMatrix.setRotate(0, hue); hueMatrix.setRotate(1, hue); hueMatrix.setRotate(2, hue); // 设置饱和度 ColorMatrix saturationMatrix=new ColorMatrix(); saturationMatrix.setSaturation(saturation); // 设置亮度 ColorMatrix lumMatrix=new ColorMatrix(); lumMatrix.setScale(lum, lum, lum, 1); // 将三种效果进行融合 ColorMatrix imageMatrix=new ColorMatrix(); imageMatrix.postConcat(hueMatrix); imageMatrix.postConcat(saturationMatrix); imageMatrix.postConcat(lumMatrix); // 绘制图片 paint.setColorFilter(new ColorMatrixColorFilter(imageMatrix)); canvas.drawBitmap(bm, 0,0, paint); //将更改后的图片进行返回。 return bmp; } }
主要代码都贴出来了,也有了比较详细的注释。想必大家也可以轻松实现这个PS功能了吧。
最后:Demo地址:http://download.csdn.net/detail/nsgsbs/8526515
相关文章推荐
- Android图像处理技术(实现Android中的PS)(三)
- Android图像处理技术(实现Android中的PS)(二)
- Android图像处理技术(实现Android中的PS)(六)
- Android图像处理技术(实现Android中的PS)(五)
- Android图像处理技术(实现Android中的PS)(四)
- 【Android开发】图形图像处理技术-实现Android动画的两种方式
- 【Android图像处理】实现镜面滤镜的另一种方式
- 【Android技术整理】AsyncTask实现多线程处理
- Android从入门到精通第9章:图形图像处理技术
- 【Android开发】图形图像处理技术-绘制几何图形
- 【Android开发】图形图像处理技术-使用BitmapShader渲染图像
- 【Android开发】图形图像处理技术-绘制路径
- Android 图片处理之-->android.graphics.Camera实现图像的旋转、缩放
- 技术转载:Android高手进阶教程(二十二)之---Android中几种图像特效处理的集锦!! .
- android图像处理,实现变暗效果
- 【Android开发】图形图像处理技术-常用绘图类之Canvas类
- Android图形与图像处理-采用双缓冲实现画图板
- Android的图形与图像处理之六 SurfaceView实现动画
- 【Android开发】图形图像处理技术-绘制图片
- 图像处理(基于android)---滤镜实现的一点看法和总结