ColorMatrix的使用
来源:互联网 发布:气动快速接头 淘宝 编辑:程序博客网 时间:2024/06/16 06:14
一、概述
使用ColorMatrix绘制图片的简单代码如下:
ColorMatrix colorMatrix1 = new ColorMatrix(); colorMatrix1.set(new float[]{ 1.0F, 0.0F, 0.0F, 0.0F, 0.0F, // r 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, // g 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, // b 0.0F, 0.0F, 0.0F, 1.0F, 0.0F});// a ColorMatrixColorFilter filter1 = new ColorMatrixColorFilter(colorMatrix1); Paint p1 = new Paint(); p1.setXfermode(lightenXfermode); p1.setColorFilter(filter1); p1.setAlpha(255); canvas.drawBitmap(srcBmp, 0.0F, 0.0F, p1);
1、ColorMatrix由一个5*4的浮点数组构造而成,每一行的第五个参数代表颜色的偏移值,四行各自代表rgba四个通道。
2、Paint 的setColorFilter方法
其声明如下:
public ColorFilter setColorFilter(ColorFilter filter)ColorFilter有三个子类,ColorMatrixColorFilter、LightingColorFilter、PorterDuffFilter。主要是对图片的色彩进行类似滤镜的处理。
二、使用ColorFilter模拟光学相机的色相差
1、色差出现的原因
由于不同波长的光线的焦距不同,或者镜头对不同波长的光线放大程度不同,导致不同波长的光线没有聚焦到同一个焦平面,在图片上形成色散。
2、代码模拟
主要通过ColorFilter分离r、g、b三个通道的颜色,用不同的矩形绘制出来,来简单模拟图片边缘的色散现象。
Bitmap tmpBmp = Bitmap.createBitmap(width, height, srcBmp.getConfig()); Canvas canvas = new Canvas(tmpBmp); PorterDuffXfermode lightenXfermode = new PorterDuffXfermode(PorterDuff.Mode.LIGHTEN); Integer i1 = Integer.valueOf((int)((double)width * 0.006)); Integer i2 = Integer.valueOf(i1.intValue() * 2); ColorMatrix colorMatrix1 = new ColorMatrix(); colorMatrix1.set(new float[]{ 1.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F, 0.0F}); ColorMatrixColorFilter filter1 = new ColorMatrixColorFilter(colorMatrix1); Paint p1 = new Paint(); p1.setXfermode(lightenXfermode); p1.setColorFilter(filter1); p1.setAlpha(255); canvas.drawBitmap(srcBmp, 0.0F, 0.0F, p1); ColorMatrix colorMatrix2 = new ColorMatrix(); colorMatrix2.set(new float[]{ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F, 0.0F}); p1.setColorFilter(new ColorMatrixColorFilter(colorMatrix2)); RectF r1 = new RectF((float)(-i1 / 2), (float)(-i1 / 2), (float)(i1 + width), (float)(i1 + height)); canvas.drawBitmap(srcBmp, (Rect)null, r1, p1); ColorMatrix colorMatrix3 = new ColorMatrix(); colorMatrix3.set(new float[]{ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F, 0.0F}); p1.setColorFilter(new ColorMatrixColorFilter(colorMatrix3)); RectF r2 = new RectF((float)(-i2 / 2), (float)(-i2 / 2), (float)(i2 + width), (float)(i2 + height)); canvas.drawBitmap(srcBmp, (Rect)null, r2, p1); srcBmp.recycle();效果如下,可以看到图片的对比强烈的边缘有明显的红边或绿边。
阅读全文
0 0
- ColorMatrix的使用
- ColorMatrix的使用
- 颜色矩阵ColorMatrix的使用
- 使用colorMatrix
- 使用ColorMatrix改变图片的饱和度
- Android 矩阵简述 ColorMatrix 的使用
- android matrix&colormatrix 使用
- C# 使用ColorMatrix时各种效果的参数
- ColorMatrix的含义
- As3的ColorMatrix类
- GDI+ ColorMatrix的揭秘
- colorMatrix
- ColorMatrix
- ColorMatrix
- ColorMatrix
- GDI+ ColorMatrix的完全揭秘
- GDI+ ColorMatrix的完全揭秘
- Android中ColorMatrix的学习
- 第4章 控制执行流程
- ActiveMQ 03 ActiveMQ基础
- 【Scikit-Learn 中文文档】半监督学习
- 如何在 Apache 上部署 Let's Encrypt 证书 &&自动续期脚本
- IOS开发中 retain 和 strong 区别
- ColorMatrix的使用
- 【Scikit-Learn 中文文档】概率校准
- Oracle IaaS Quick Reference Guide to Cloud Solutions.pdf 英文原版 免费下载
- Java——Iterator迭代器
- switchHosts!修改hosts后不能立即生效的问题
- Maven学习总结(一)——Maven入门
- 信号量
- OO的五大设计模式原则
- 运用three.js写的漂浮立方