Android 简单使用ColorMatrix,Android开发学习视频

26 阅读2分钟

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如下:

[mw_shl_code=java,true]CMatrix类:  

public class CMatrix extends Activity {  

private Button change;  

private EditText [] et=new EditText[20];  

private float []carray=new float[20];  

private MyImage sv;  

@Override  

public void onCreate(Bundle savedInstanceState) {  

super.onCreate(savedInstanceState);  

setContentView(R.layout.main);  

change=(Button)findViewById(R.id.set);  

sv=(MyImage)findViewById(R.id.MyImage);  

for(int i=0;i<20;i++){  

et=(EditText)findViewById(R.id.indexa+i);  

carray=Float.valueOf(et.getText().toString());  

}  

change.setOnClickListener(l);  

}  

private Button.OnClickListener l=new Button.OnClickListener(){  

@Override  

public void onClick(View arg0) {  

// TODO Auto-generated method stub  

getValues();  

sv.setValues(carray);  

sv.invalidate();  

}  

};  

public   void getValues(){  

for(int i=0;i<20;i++){  

carray=Float.valueOf(et.getText().toString());  

}  

}  

}  

MyImage类继承自View类:  

public class MyImage extends View {  

private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);  

private Bitmap mBitmap;  

private float [] array=new float[20];  

private float mAngle;  

public MyImage(Context context,AttributeSet attrs) {  

super(context,attrs);  

mBitmap    = BitmapFactory.decodeResource(context.getResources(),  

R.drawable.test);  

invalidate();  

}  

public void setValues(float [] a){  

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司21年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

详细整理在GitHub可以见;

Android架构视频+BAT面试专题PDF+学习笔记​

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。