Android图片处理(Matrix,ColorMatrix,深入讲解Android
前言
马上快到金三银四都春招阶段了,在这本就是跳槽、找工作的年后黄金时间,大多数求职者都早早做好年后求职的准备,其中不乏有年前早早辞了工作准备年后跳槽的有经验的职场老人们,也有一批即将毕业的应届毕业生的职场新人们。
但是受此次“新冠肺炎”疫情影响之后,“金三银四”逐渐演变成千军万马过独木桥,一边是摩拳擦掌有经验的职场老人们,而另一边则是即将毕业跃跃欲试的新鲜血液,只会让求职人才们越积越多,面对这样岗位少求职者多的情况下,竞争力可想而知,再加上企业的招聘计划调整,侧面也是加剧了求职的难度。
25 private Button.OnClickListener l = new Button.OnClickListener(){ 26
27 @Override 28 public void onClick(View arg0) { 29 // TODO Auto-generated method stub
30 getValues(); 31 sv.setValues(carray); 32 sv.invalidate(); 33 } 34
35 }; 36 public void getValues(){ 37 for ( int i = 0 ;i < 20 ;i ++ ){ 38
39 carray[i] = Float.valueOf(et[i].getText().toString()); 40 } 41
42 } 43
44
45 } 46 MyImage类继承自View类: 47 public class MyImage extends View { 48 private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 49 private Bitmap mBitmap; 50 private float [] array = new float [ 20 ]; 51
52 private float mAngle; 53
54 public MyImage(Context context,AttributeSet attrs) { 55 super (context,attrs); 56
57 mBitmap = BitmapFactory.decodeResource(context.getResources(), 58 R.drawable.test); 59 invalidate(); 60 } 61
62
63 public void setValues( float [] a){ 64 for ( int i = 0 ;i < 20 ;i ++ ){ 65 array[i] = a[i]; 66 } 67
68 } 69
70 @Override protected void onDraw(Canvas canvas) { 71 Paint paint = mPaint; 72
73
74
75 paint.setColorFilter( null ); 76 canvas.drawBitmap(mBitmap, 0 , 0 , paint); 77
78 ColorMatrix cm = new ColorMatrix(); 79 // 设置颜色矩阵
80 cm.set(array); 81 // 颜色滤镜,将颜色矩阵应用于图片
82 paint.setColorFilter( new ColorMatrixColorFilter(cm)); 83 // 绘图
84 canvas.drawBitmap(mBitmap, 0 , 0 , paint); 85 Log.i( " CMatrix " , " --------->onDraw " ); 86
87
88 } 89
90 }
CMatrix类主要负责接收颜色矩阵的设置和重绘,没有要说的。MyImage类中进行绘图工作,首先设置颜色矩阵cm.set(…)从一维数组中读取数据20个数据给颜色矩阵赋值,paint.setColorFilter(…)设置颜色滤镜,然后绘图,效果就出来了(这个过程和PS差不多)如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cOf5IxE6-1649750824054)(http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_12713818099NMQz4Nl.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yy8AmcVa-1649750824054)(http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271381825XJGiUUGn.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hxPjmTn2-1649750824055)(http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271381842U0m4uTUx.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r4BnL9ZB-1649750824055)(http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_12713818647kb99802.png)]
看到这里,相信大家对颜色矩阵的作用已经有了一个直观的感受,现在也可以尝试做一个照片特效的软件。
但是各种效果并不能让用户手动调节颜色矩阵,这里需要计算公式,由于本人并不是做图形软件的也不能提供,可以参考这个链接:
[http://www.adobe.com/devnet/flash/articles/matrix_transformations/ColorMatrixDemo.swf](()
[](()
坐标变换矩阵
坐标变换矩阵是一个3*3的矩阵如图2.1,用来对图形进行坐标变化,将原来的坐标点转移到新的坐标点,
因为一个图片是有点阵和每一点上的颜色信息组成的,所以对坐标的变换,就是对每一点进行搬移形成新的图片。
具体的说图形的放大缩小,移动,旋转,透视,扭曲这些效果都可以用此矩阵来完成。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y3mN1duo-1649750824055)(http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271381907wVeuzTD2.png)]
这个矩阵的作用是对坐标x,y进行变换计算结果如下:
x’=a*x+b*y+c
y’=d*x+e*y+f
通常情况下g=h=0,这样使1=0*x+0*y+1恒成立。和颜色矩阵一样,坐标变换矩阵真正使用的参数很少也很有规律。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cREDI82n-1649750824056)(http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271381929fvyejlxl.png)]
上图就是一个坐标变换矩阵的简单例子,计算后发现x’=x+50,y’=y+50.
可见图片的每一点都在x和y方向上平移到了(50,50)点处,这种效果就是平移效果,将图片转移到了(50,50)处。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oYW5UH7E-1649750824056)(http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271381954eNEbYoEI.png)]
计算上面得矩阵x’=2*x,y‘=2*y.经过颜色矩阵和上面转移效果学习,相信读者可以明白这个矩阵的作用了,这个矩阵对图片进行了放大,具体的说是放大了二倍。
下面将介绍几种常用的变换矩阵:
1. 旋转
[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qrhtadiN-1649750824057)(http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271381984t6X7xcj1.png)]](()
绕原点逆时针旋转θ度角的变换公式是 x’ = xcosθ − ysinθ 与 y。’ = xsinθ + ycosθ
2. 缩放
[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VCgbvHa6-1649750824057)(http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271382016TeOFkZ5i.png)]](()
变换后长宽分别放大x’=scale*x;y’=scale*y.
3. 切变
[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yNc3VPFi-1649750824058)(http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271382046nPrSJD3C.png)]](()
4. 反射
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CUipMP36-1649750824058)(http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271382180iZqxVK85.png)]
( , )单位向量
5. 正投影
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EiLanhT4-1649750824058)(http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_12713822147vGAWixg.png)]
( , )单位向量
上面的各种效果也可以叠加在一起,既矩阵的组合变换,可以用矩阵乘法实现之,如:R=B(A*C)=(B*A)C,注意一点就是B*A和A*B一般是不等的。
下面将编一个小程序,通过控制坐标变换矩阵来达到控制图形的目的,JavaCode如下:
复制到剪贴板 Java代码
1
写在最后
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从哪里入手去学习,对此我整理了一些资料
如果你熟练掌握以下列出的知识点,相信将会大大增加你通过前两轮技术面试的几率!这些内容都供大家参考,互相学习。
①「Android面试真题解析大全」PDF完整高清版+②「Android面试知识体系」学习思维导图压缩包,最后觉得有帮助、有需要的朋友可以点个赞
ndroid面试真题解析大全」PDF完整高清版+②「Android面试知识体系」学习思维导图压缩包**,最后觉得有帮助、有需要的朋友可以点个赞[外链图片转存中…(img-TGIgP6sK-1649750824059)]
[外链图片转存中…(img-w1LGjLOc-1649750824060)]
[外链图片转存中…(img-Jn1PCuwW-1649750824060)]
Android开发不会这些?如何面试拿高薪!
Android图片处理(Matrix,ColorMatrix,深入讲解Android相关推荐
- android图片点击全屏显示,Android浏览图片,点击放大至全屏效果
近期做一个项目类似于QQ空间,做到照片浏览的功能,对于QQ空间中点击图片放大至全屏,感觉效果非常赞,于是也做了个类似的效果. 例如以下. 我不知道QQ那个是怎么做的.我的思路例如以下: 首先.从图片缩 ...
- Android图片粘上后仍错误,android – 在Activity被销毁后,ImageView上的图像丢失了
我正在尝试创建一个应用程序,我可以让用户选择要在其个人资料中显示的图片.我可以在imageview上浏览和设置他们选择的图像.但是一旦活动被破坏,图像就会丢失.我试图实现onSaveInstanceS ...
- android图片美化开源,GitHub - xingxing-yan/BLImage: Android中美化图片的库。功能包括滤镜,贴纸,标签,裁剪,涂鸦,亮度,饱和度,对比度,马赛克等功能...
BLImage Android中美化图片的库.功能包括滤镜,贴纸,标签,裁剪,涂鸦,亮度,饱和度,对比度,马赛克等功能 效果图 添加依赖: 在project的build.gradle中添加: allp ...
- android 图片上动态添加文字,摘抄 android图片中添加文字水印
* 添加文字到图片,类似水印文字. * @param gContext * @param gResId * @param gText * @return */ public static Bitmap ...
- android 图片传递,如何使用包在Android活动之间传递图像(位图)?
按照@EboMike的建议,我将位图保存在一个名为MyImage在我的应用程序的内部存储中,无法访问我的其他应用程序.这部分的代码如下:public String createImageFromBit ...
- Android图片缓存之Lru算法
前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...
- 深入讲解Android Property机制
摘要: 本文以Android 4.4为准,深入讲解Android Property机制的运作机理. 深入讲解Android Property机制 侯亮 1 概述 Android系统(本文以A ...
- 基于ARM Cortex-A8和Android 4.x的联动报警系统 (Android 、A8、Linux、驱动、NDK)
· 课程讲师:老夫子 · 课程分类:Android · 适合人群:高级 · 课时数量:38(70节)课时 · 更新程度:完毕 · 服务类型:C类(普通服务类课程) · 用到技术:Android.A8. ...
- Android图片加载神器之Fresco, 基于各种使用场景的讲解
Fresco是Facebook开源Android平台上一个强大的图片加载库,也是迄今为止Android平台上最强大的图片加载库. 优点:相对于其他开源的第三方图片加载库,Fresco拥有更好的内存管理 ...
- Android 图片处理工具类汇总
很有用的Android图片处理工具,实现各种图片处理效果 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...
最新文章
- python读取word
- [Silverlight入门系列]实现局部元素全屏(Element部分全屏)
- Ubuntu安装google拼音输入法
- python的工作方向-Python最有发展潜力的方向已出来,是否有你喜欢的职位?
- 详解/etc/profile、/etc/bash.bahsrc、~/.profile、~/.bashrc的用途
- win10北通手柄没反应_《动物森友会》怎么玩出新花样?北通宙斯游戏手柄宏玩法了解下...
- Win10卸载微软sql服务器,卸载 SQL Server Management Studio
- ovito在linux下安装教程,linux下超详细教程安装phonopy
- 好课推荐|云安全领域的新宠CCSK
- 各大网络安全厂商及安全产品
- Allure清除历史记录
- 服务器虚拟资源池,虚拟资源池
- 【Python】Pyside6简易版教程
- RK3288开发板,RK3288核心板,瑞芯微RK3288主板资料
- 智联“焊”界,数字未来
- 【快递100接口BUG】数据库时区为0时区,而实际时区为东八区时间,导致存入时间多出八个小时
- Java io流实现文件分割
- PPT模板 | 蓝金风格年会PPT模板
- PHP动态网页开发中常用的一些函数
- Java辅助之反射,序列与反序列
热门文章
- JAVA相关基础知识
- python怎么打希腊字母_Python--画图时希腊字母的显示
- Zynga公布2020年第四季度及全年财务业绩
- ECCV 2018 paper
- 搜狗输入法 linux 怎么打开,ubuntu 15.10安装搜狗输入法不能打开
- python三国演义人物 统计分析_Python《三国演义》人物出场统计(上)
- torch.load()出现ModuleNotFoundError错误
- 免费SSL证书申请和部署
- Revealing the Invisible with Model and Data Shrinking for Composite-database Micro-expression Recogn
- iOS项目开发中的知识点与问题收集整理①