没有合适的资源?快使用搜索试试~ 我知道了~
首页android Bitmap 图像特效处理
在Android编程中有时候需要对图片做特殊的处理,比如将图片做出黑白的,或者老照片的效果,有时候还要对图片进行变换,以拉伸,扭曲等等。这些效果在Android中有很好的支持,通过颜色矩阵(ColorMatrix)和坐标变换矩阵(Matrix)可以完美的做出上面的所说的效果,下面将分别介绍这两个矩阵的用法和相关的函数。
资源详情
资源评论
资源推荐
在 Android 编程中有时候需要对图片做特殊的处理,比如将图片做出黑白的,或者老照片
的效果,有时候还要对图片进行变换,以拉伸,扭曲等等。这些效果在 Android 中有很好
的支持,通过颜色矩阵(ColorMatrix)和坐标变换矩阵(Matrix)可以完美的做出上面的
所说的效果,下面将分别介绍这两个矩阵的用法和相关的函数。
颜色矩阵
Android 中可以通过颜色矩阵(ColorMatrix 类)方面的操作颜色,颜色矩阵是一个 5x4 的
矩阵(如图 1.1),可以用来方面的修改图片中 RGBA 各分量的值,颜色矩阵以一维数组
的方式存储如下:
[ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t ]
他通过 RGBA 四个通道来直接操作对应颜色,如果会使用 Photoshop 就会知道有时处理图
片通过控制 RGBA 各颜色通道来做出特殊的效果。这个矩阵对颜色的作用计算方式如 1.3
示:
矩阵的运算规则是矩阵 A 的一行乘以矩阵 C 的一列作为矩阵 R 的一行,C 矩阵是图片中包
含的 ARGB 信息,R 矩阵是用颜色矩阵应用于 C 之后的新的颜色分量,运算结果如下:
R' = a*R + b*G + c*B + d*A + e;
G' = f*R + g*G + h*B + i*A + j;
B' = k*R + l*G + m*B + n*A + o;
A' = p*R + q*G + r*B + s*A + t;
颜色矩阵并不是看上去那么深奥,其实需要使用的参数很少,而且很有规律第一行决定红
色第二行决定绿色,第三行决定蓝色,第四行决定了透明度,第五列是颜色的偏移量。下
面是一个实际中使用的颜色矩阵。
如果把这个矩阵作用于各颜色分量的话,R=A*C,计算后会发现,各个颜色分量实际上没
有任何的改变(R'=R G'=G B'=B A'=A)。
图 1.5 所示矩阵计算后会发现红色分量增加 100,绿色分量增加 100,这样的效果就是图片
偏黄,因为红色和绿色混合后得到黄色,黄色增加了 100,图片当然就偏黄了。
改变各颜色分量不仅可以通过修改第 5 列的颜色偏移量也可如上面矩阵所示将对应的颜色
值乘以一个倍数,直接放大。上图 1.6 是将绿色分量乘以 2 变为原来的 2 倍。相信读者至此
已经明白了如何通过颜色矩阵来改变各颜色分量。下面编写一段代码来,通过调整颜色矩
阵来获得不同的颜色效果,JavaCode 如下:
view plaincopy to clipboardprint?
CMatrix 类:Å Å
public class CMatrix extends Activity {7 7
7 77 7
7 7 private Button change;7 7
7 7 private EditText [] et=new EditText[20];7 7
7 7 private float []carray=new float[20];7 7
7 7 private MyImage sv;7 7
7 7 @Override7 7
7 7 public void onCreate(Bundle savedInstanceState) {7 7
7 77 777super.onCreate(savedInstanceState);7 7
7 77 777setContentView(R.layout.main);7 7
7 77 77 77 7
7 77 7 change=(Button)findViewById(R.id.set);7 7
7 77 7 sv=(MyImage)findViewById(R.id.MyImage);7 7
7 77 7
7 77 7 for(int i=0;i<20;i++){7 7
7 77 77 77 7
et=(EditText)findViewById(R.id.indexa+i);7 7
7 77 7 carray=Float.valueOf(et.getText().toString());7 7
7 77 7 }7 7
7 77 77 77 7
7 77 7 change.setOnClickListener(l);7 7
7 7 }7 7
7 77 7
7 7 private Button.OnClickListener l=new Button.OnClickListener(){7 7
7 7
7 77 7 @Override7 7
7 77 7 public void onClick(View arg0) {7 7
7 77 77 777// TODO Auto-generated method stub7 7
7 77 77 777getValues();7 7
7 77 77 777sv.setValues(carray);7 7
7 77 77 777sv.invalidate();7 7
7 77 7 }7 7
7 77 77 77 7
7 7 };7 7
7 7 public7 7void getValues(){7 7
7 77 777for(int i=0;i<20;i++){7 7
7 77 77 77 77 7
7 77 77 77 7carray=Float.valueOf(et.getText().toString());7 7
7 77 777}7 7
7 77 77 77 7
7 7 }7 7
7 7
7 77 7
}7 7
MyImage 类继承自 View 类:Å Å
public class MyImage extends View {7 7
7 7 private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);7 7
7 7 private Bitmap mBitmap;7 7
7 7 private float [] array=new float[20];7 7
7 77 7
7 7 private float mAngle;7 7
7 77 7
7 7 public MyImage(Context context,AttributeSet attrs) {7 7
7 77 777super(context,attrs);7 7
7 77 77 77 7
7 77 777mBitmap7 7 = BitmapFactory.decodeResource(context.getResources(),7 7
7 77 77 77 77 77 77 77 77 77 77 77 77 77 77 777R.drawable.test);7 7
7 77 777invalidate();7 7
7 7 }7 7
7 77 7
7 77 7
7 7 public void setValues(float [] a){7 7
7 77 777for(int i=0;i<20;i++){7 7
7 77 77 777array=a;7 7
7 77 777}7 7
7 77 77 77 7
7 7 }7 7
7 77 7
7 7 @Override protected void onDraw(Canvas canvas) {7 7
7 77 777Paint paint = mPaint;7 7
7 77 77 77 7
7 77 77 77 7
7 77 77 77 7
7 77 777paint.setColorFilter(null);7 7
7 77 777canvas.drawBitmap(mBitmap, 0, 0, paint);7 7
7 77 77 77 7
7 77 777ColorMatrix cm = new ColorMatrix();7 7
7 77 7 //设置颜色矩阵Å Å
7 77 7 cm.set(array);7 7
//颜色滤镜,将颜色矩阵应用于图片Å Å
7 77 777paint.setColorFilter(new ColorMatrixColorFilter(cm));7 7
//绘图Å Å
7 77 777canvas.drawBitmap(mBitmap, 0, 0, paint);7 7
7 77 777Log.i("CMatrix", "--------->onDraw");7 7
7 7
7 77 77 7
7 7 }7 7
7 77 7
剩余10页未读,继续阅读
破夜ツ
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2022年中国足球球迷营销价值报告.pdf
- 房地产培训 -营销总每天在干嘛.pptx
- 黄色简约实用介绍_汇报PPT模板.pptx
- 嵌入式系统原理及应用:第三章 ARM编程简介_3.pdf
- 多媒体应用系统.pptx
- 黄灰配色简约设计精美大气商务汇报PPT模板.pptx
- 用matlab绘制差分方程Z变换-反变换-zplane-residuez-tf2zp-zp2tf-tf2sos-sos2tf-幅相频谱等等.docx
- 网络营销策略-网络营销团队的建立.docx
- 电子商务示范企业申请报告.doc
- 淡雅灰低面风背景完整框架创业商业计划书PPT模板.pptx
- 计算模型与算法技术:10-Iterative Improvement.ppt
- 计算模型与算法技术:9-Greedy Technique.ppt
- 计算模型与算法技术:6-Transform-and-Conquer.ppt
- 云服务安全风险分析研究.pdf
- 软件工程笔记(完整版).doc
- 电子商务网项目实例规划书.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论13