AS3灰色图像
一开始觉得AS3的滤镜很难使用,尤其是那些矩阵,让人望而生畏。最近写一个聊天模块,要用到离线状态下的灰色头像,于是认真研究了ColorMatrixFilter,发现其实也没有那么难。所谓的矩阵其实就是一个再普通不过的Array,只要弄懂这个Array各个元素的关系就很容易使用滤镜。
先发代码,下面再详细介绍。这个程序实现加载一张彩色图像,通过滤镜变成黑白图像之后输出。
package {
import flash.display.Bitmap;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.filters.ColorMatrixFilter;
import flash.net.URLRequest;
public class ColorFilterSample extends Sprite
{
private var loader:Loader;
public function ColorFilterSample()
{
loader=new Loader();
loader.contentLoaderInfo.addEventListener
(Event.COMPLETE, onComplete);
loader.load(new URLRequest("hehua.jpg"));
}
private function onComplete(e:Event):void{
//加载一张彩色图片
var image:Bitmap=new Bitmap();
image=Bitmap(loader.content);
//定义滤镜matrix,一个包含20个项的数组
var matrix:Array=[0.3086, 0.6094, 0.0820, 0, 0,
0.3086, 0.6094, 0.0820, 0, 0,
0.3086, 0.6094, 0.0820, 0, 0,
0, 0, 0, 1, 0];
//初始化一个ColorMatrixFilter对象(matrix作为参数)
var myfilter:ColorMatrixFilter=new ColorMatrixFilter(matrix);
//将滤镜应用于图片
image.filters=[myfilter];
addChild(image);
}
}
}
首先定义一个matrix数组:一个包含20个浮点数的数组。AS3.0帮助文档中的计算公式是这样的:
redResult = (a[0] * srcR) + (a[1] * srcG) + (a[2] * srcB) + (a[3] * srcA) + a[4]
greenResult = (a[5] * srcR) + (a[6] * srcG) + (a[7] * srcB) + (a[8] * srcA) + a[9]
blueResult = (a[10] * srcR) + (a[11] * srcG) + (a[12] * srcB) + (a[13] * srcA) + a[14]
alphaResult = (a[15] * srcR) + (a[16] * srcG) + (a[17] * srcB) + (a[18] * srcA) + a[19]
上面的公式看起来有点复杂,没关系,再看下面的图示就清晰多了:
srcR srcG srcB srcA offset
redResult a[0] a[1] a[2] a[3] a[4]
greenResult a[5] a[6] a[7] a[8] a[9]
blueResult a[10] a[11] a[12] a[13] a[14]
alphaResult a[15] a[16] a[17] a[18] a[19]
srcR,srcG,srcB,srcA表示原始图像每个像素的RGBA值(关于像素颜色的RGBA值请查阅手册,这里不再展开),redResult,greenResutl,blueResult,alphaResult表示目标图像的RGBA值。上面公式的意思是说:redResult的值是a[0]、a[1]、a[2]、a[3]分别与 srcR,srcG,srcB,srcA相乘,再加上a[4]的总和(a[4]是偏移量)。greenResutl,blueResult,alphaResult以此类推。这样说应该很容易理解了吧?
好吧,这个公式无非就是说原始图像的像素值,通过和这个数组交叉相乘,得到目标图像的像素值。
很明显,我们给这个数组定义不同的值,则会得到不同的结果,目标图像的效果也不一样。这里要得到灰度图像应该使用这个数组:
[0.3086, 0.6094, 0.0820, 0, 0,
0.3086, 0.6094, 0.0820, 0, 0,
0.3086, 0.6094, 0.0820, 0, 0,
0, 0, 0, 1, 0];
这个数组凭什么得来的呢?应该是某些大师实验得到的吧,百度可以搜索到这方面的专业论述,我这里就说一下大概意思。话说取得原始图像的RGB值,计算得到它们的平均值之后再赋给新的RGB值,这样对每个像素处理之后就得到黑白图像了,或者可以理解成RGB值按照0.33 : 0.33 : 0.33的权值重新分配;后来有些大师研究得到结论:如果RGB值按照0.3086 : 0.6094 : 0.0820的比例分配,得到的灰度图像看起来最顺眼,于是就有了上面的数组!顺便再提一下,这里的alpha值没有改变(那个数字1,你懂的),还有偏移量都为0。
AS3灰色图像的更多相关文章
- 基于canvas图像处理的图片 灰色图像
图片展示网页往往色彩繁杂,当一个网页上有多张图片的时候用户的注意力就很不容易集中,而且会造成网站整个色调风格的不可把控. 能不能把所有的预览图变成灰度图片,等用户激活某张图片的时候再上色呢? 以前,唯 ...
- [ActionScript 3.0] AS3实现图像径向转旋效果
原图 效果 import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Blen ...
- 利用神经网络进行网络流量识别——特征提取的方法是(1)直接原始报文提取前24字节,24个报文组成596像素图像CNN识别;或者直接去掉header后payload的前1024字节(2)传输报文的大小分布特征;也有加入时序结合LSTM后的CNN综合模型
国外的文献汇总: <Network Traffic Classification via Neural Networks>使用的是全连接网络,传统机器学习特征工程的技术.top10特征如下 ...
- 深入学习OpenCV中图像灰度化原理,图像相似度的算法
最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜 ...
- PIL:处理图像的好模块
介绍 PIL是一个专门用来处理图像的模块,可以对图象进行各种各样的变换 打开一张图片 from PIL import Image # 调用Image下的open方法,即可打开一张图片 # 得到的im便 ...
- Python——图像手绘效果
1.图像的RGB色彩模式 PIL PIL, Python Image Library PIL库是一个具有强大图像处理能力的第三方库 在命令行下的安装方法: pip install pillow fro ...
- PHP 动态生成验证码
……机器人会在网站中搜寻允许他们插入广告的输入表单,在虚拟世界没有什么能阻挡它们胡作非为.这些机器人效率极高,完全不关心所攻击的表单的本来用途.它们唯一的目标就是用它们的垃圾广告覆盖你的内容,残忍地为 ...
- opencv6.4-imgproc图像处理模块之直方图与模板
接opencv6.3-imgproc图像处理模块之边缘检测 九.直方图的相关操作 直方图是图像中像素强度分布的图形表达方式:它统计了每一个强度值所具有的像素个数 上图是一个灰色图像,通过对图像的每个不 ...
- [OpenCV] Image Processing - Grayscale Transform
"每个像素的输出值只取决于其输入值" 重难点:Histogram equalization 参考:笑得很甜 http://blog.csdn.net/xiaowei_cqu/art ...
随机推荐
- ThinkPad T410i 2516A21 升級手札(換SSD固態硬碟、I7 CPU、開機20秒)
最近筆記本越來越慢,開機得20分鐘,而且CPU動不動就飆到80度,趁著開學網上活動,準備給老伙計來一次重大升級.查一下主板芯片,最高支持8G內存,已經滿了,光驅位加了一個1T機械硬盤,那麼能升級的就只 ...
- Android中如何引入已经存在的标题栏
在写程序中很多时候很多页面的标题布局大致都是一样的,这时候不需要挨着都写一遍,只需要写一个xml文件,在所需要的时候进行引用就可以了 只需要这一行代码: <include layout=&quo ...
- React中父子组件传值
一.首先我们先来看父组件向子组件传值 1.1 我们要明白父组件 --> 子组件 是通过props这个属性来传值的 我们来看父组件的代码 import React from 'react'; im ...
- XMind配置防火墙
1.打开控制面板,找到防火墙 2. 启用Windows防火墙 3.高级设置,新建入站规则 配置部分一律“下一步”. XMind配置防火墙完成.如果还不行,相同方式设置出站规则.
- Linux 上配置 SQL Server Always On Availability Group
SQL Server Always On Availability Group 配置步骤:配置三台 Linux 集群节点创建 Availability Group配置 Cluster Resource ...
- SqlServer 数据库同步的两种方式 (发布、订阅),主从数据库之间的同步
最近在琢磨主从数据库之间的同步,公司正好也需要,在园子里找了一下,看到这篇博文比较详细,比较简单,本人亲自按步骤来过,现在分享给大家. 在这里要提醒大家的是(为了更好的理解,以下是本人自己理解,如有错 ...
- pxe问题
可能镜像路径问题 https://blog.csdn.net/geek_tank/article/details/69479196 一.vmlinuz vmlinuz是可引导的.压缩的内核.“vm”代 ...
- 【大数据作业九】安装关系型数据库MySQL 安装大数据处理框架Hadoop
作业要求:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3161 4.简述Hadoop平台的起源.发展历史与应用现状. 列举发展过程中 ...
- 使用CAS实现单点登录功能
目录 单点登录 简介 CAS服务器部署 上传tomcat服务器压缩到文件夹/usr/local/cas目录下,解压,修改tomcat文件夹名为tomcat 修改tomcat配置文件的端口号 关闭tom ...
- jmeter BeanShell断言(四)
Bean Shell常用内置变量 JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.log ...