ActionScript3游戏中的图像编程(连载八十九)

总目录:http://blog.csdn.net/iloveas2014/article/details/38304477

4.5.3 基于距离的加权平均矩阵

现在,我们再测试一下那种圆形模糊的矩阵,对于3*3的矩阵来说,上下左右,以及中心这5个点为1.4,而矩阵四个角上的元素就是1,其计算依据是被卷积点到中心点的距离。这一规则对其它尺寸的矩阵仍然适用,所以我们在getConFilter的数组循环里实现这样的一个算法:

private function getConFilter(matrixSize:int, bias:Number = 0, preserveAlpha:Boolean = true, clamp:Boolean = true, color:uint = 0, alpha:Number = 0):ConvolutionFilter{
var amount:int = matrixSize * matrixSize;
var divisor:Number = 0; //因为矩阵的元素值不再等于1,所以不能直接用matrixSize*matrixSize得到divisor
var arr:Array = [];
for(var i:int = 0; i < amount; i ++){
 var matrixX:int = i % matrixSize; //矩阵的横坐标(行数)
 var matrixY:int = i / matrixSize;  //矩阵的纵坐标(行数)
 var disX:int = matrixX - matrixSize;
 var disY:int = matrixY - matrixSize;
 var value:Number = Math.max(0, matrixSize - Math.sqrt(disX * disX + disY * disY));  //距离越大,要取的色彩数量越少,大于10的将不取色
 arr[i] = value;
 divisor += value; //累加到divisor上
}
return new ConvolutionFilter(matrixSize, matrixSize, arr, divisor * 0.5, bias, preserveAlpha, clamp, color, alpha);
}

由于大于matrixSize的边角点不再参与运算,所以最后的效果您已经看不到边角处有明显的方块了,当然掉渣的现象依然存在(图 4.57),这种掉渣其实也有专业术语可以描述,叫做振铃现象(就好比铃铛,音钗等发声体振动时的感觉)。

图 4.57 改用圆矩阵后的效果

时间: 2024-10-09 09:58:34

ActionScript3游戏中的图像编程(连载八十九)的相关文章

ActionScript3游戏中的图像编程(二十)

1.4.2 灰度的计算方法 回过头来看RGB,站在科学的角度来解释,它们确实也有更明亮的理由,因为下面一排色彩反射出来的色光总量是上一排色的两倍. 为此,作者曾自作聪明地发明了一条"原创"的灰度公式: Gray=(r+g+b)/3 哈哈,用色光总量来表达颜色的灰度想必就比较准确了吧!沾沾自喜一番以后,我还试着用这条自创的定律来转换这张测试图片,上下色块的灰度果然拉开了,可是很不幸地,左右相邻,边界分明的色块依然粘连在一块(图 1.30). 图 1.30 笔者"自创"

ActionScript3游戏中的图像编程(连载二十八)

2.2.1 投影颜色与透明度的模拟 默认的投影滤镜看着比Photoshop的投影样式浑浊,究其原因,似乎是颜色太深所致.(图 2.11). 图 2.11 设置默认投影滤镜后的效果 下面回到Photoshop查看其默认的投影参数(图 2.12). 图 2.12 Photoshop默认投影样式的参数 茫茫人海,我还是第一眼发现了你--颜色样本块.同是黑色,RGB都等于0,怎么差别还这么大?看来是A通道--不透明度惹的祸.从图 2.12中,我们看到Photoshop里对阴影设置了75%的不透明度,那F

ActionScript3游戏中的图像编程(连载八)

1.2.2 初始效果及颜色属性的测试 按F11/Ctrl+F11测试,效果如图 1.2所示.如果上下两组小圆色彩上看起来有所差别,那就请您校对下,看是否在输入代码的过程中出现了笔误,同时注意检查您的显示器是否因为老化,视角等问题而导致同种颜色在不同的位置有不同的效果.因为现在的代码仅仅做了一次赋值,中途并没有对ColorTransform进行其它处理. 图 1.2 变换前的效果 下面就先从效果最明显的color开始测试. 设置一下_myColorTransform.color = 0xFFFF0

ActionScript3游戏中的图像编程(连载四十八)

总目录:http://blog.csdn.net/iloveas2014/article/details/38304477 3.1.4 简单滤镜中的渐变原理探讨 我们再简单的看一下滤镜里的渐变条. 为了尽可能地减少复杂的文字轮廓所造成的干扰,我再次使用方块进行试验. 我画了一个紫色的方块(啥颜色其实都无所谓了),然后添加渐变发光滤镜,把模糊和距离值都调大,以便看清楚渐变的轮廓,然后给渐变条随意地加上几种颜色(图 3.30) 图 3.30 模糊范围较大的渐变发光 可以看到,渐变条上的色彩从右往左地

[原创]ActionScript3游戏中的图像编程(连载二十八)

2.2.1 投影颜色与透明度的模拟 默认的投影滤镜看着比Photoshop的投影样式浑浊,究其原因,似乎是颜色太深所致.(图 2.11). 图 2.11 设置默认投影滤镜后的效果 下面回到Photoshop查看其默认的投影参数(图 2.12). 图 2.12 Photoshop默认投影样式的参数 茫茫人海,我还是第一眼发现了你——颜色样本块.同是黑色,RGB都等于0,怎么差别还这么大?看来是A通道——不透明度惹的祸.从图 2.12中,我们看到Photoshop里对阴影设置了75%的不透明度,那F

ActionScript3游戏中的图像编程(连载十八)

1.3.4 HSB与RGB互转公式的ActionScript实现 为了让HSB转RGB这个通用的功能在后续的项目里可以重用,我们先把这个转换公式做成一个工具类,并且放入到公共类库里.当然,这样的类,网上也有很多现成的可以直接拿过来用(个人推荐frocessing工具包).类里的算法看起来跟公式会有点出入,一方面我自己也是从网上东拼西凑弄回来的,另一方面我把S和L/B的取值范围从0~1改成了0~100. 1 package com.gemei.geom { 2 public class Conve

ActionScript3游戏中的图像编程(连载二十)

1.4.2 灰度的计算方法 回过头来看RGB,站在科学的角度来解释,它们确实也有更明亮的理由,因为下面一排色彩反射出来的色光总量是上一排色的两倍.      为此,作者曾自作聪明地发明了一条“原创”的灰度公式: Gray=(r+g+b)/3 哈哈,用色光总量来表达颜色的灰度想必就比较准确了吧!沾沾自喜一番以后,我还试着用这条自创的定律来转换这张测试图片,上下色块的灰度果然拉开了,可是很不幸地,左右相邻,边界分明的色块依然粘连在一块(图 1.30). 图 1.30 笔者“自创”的灰度转换 显然此法

ActionScript3游戏中的图像编程(连载二十一,第1章完)

1.4.3 用灰度/明度指导色彩搭配 试着只通过调整不等于0的通道,让上一排的色彩在灰度上保持一致,把三个颜色分别代入到心理学公式.得 Gray(red) = r * 0.299      Gray(green) = g * 0.587      Gray(blue) = b * 0.114 让它们灰度相等,则 r * 0.299 = g * 0.587 = b * 0.114 可见,b值一定最大,不妨让b取最大值255,求得r=97, g=50.把这两个值分别应用到红和绿两个色块上. 绿色不再

ActionScript3游戏中的图像编程(连载十九)

1.4 浅析亮度与灰度/明度的关系 进入正题之前,先来了解一下灰度/明度. 1.4.1 灰度/明度的概念及其与HSB亮度的异同 在很多场合,灰度与明度的概念完全等价. “灰度”最初来源于摄影领域,在彩色显像技术问世以前,拍摄出来的照片只有黑,白,灰三类颜色,在这种黑白照片里,只有白色.黑色以及灰色的点能完好无损地显示出来,其它颜色将根据其亮度呈现出不同深度的灰色.亮度越大灰色越浅,反之越深.把黑与白色之间分成若干级,称为“灰度等级”.能呈现的灰度等级愈多,画面的层次感就愈丰富. 所以,从彩色转黑

[原创]ActionScript3游戏中的图像编程(连载三十二)

2.2.5 投影距离的模拟 Photoshop投影样式面板的下一个属性是距离,它也存在于Flash的投影滤镜选项中.两者初始值一致,经笔者测试,两者在效果实现和数值意义方面基本一致.Flash不需要对默认参数进行更改. 下一项是扩展,乍一看,在Flash中并没有找到对应项.但仔细观察,在Photoshop投影样式的基础选项里,除了alpha以外,就只剩该属性用了百分比. [原创]ActionScript3游戏中的图像编程(连载三十二),布布扣,bubuko.com