【转】AS3用BitmapData制作倒影

 

/**
*定义形参:
*pBitmpData: 需要制作倒影的BitmapData
*pMaxAlpha: 倒影的最大透明度
*pRate: 倒影的可见高度与实际图片的高度比
*pBlurValue: 倒影的虚化程度
*/

public static function getReflectionBitmapData(pBitmapData:BitmapData,pMaxAlpha:Number=1,pRate:Number = .67,pBlurValue:Number=-1):BitmapData{

//建立一个空的BitmapData实例,与原图片大小相等。
var bitmapdata:BitmapData = new BitmapData(pBitmapData.width,pBitmapData.height,true);
//计算倒影需要显示的高度
var drawHeight:Number = pRate*bitmapdata.height;
//做一个循环,开始描绘倒影
for(var j:int=0;j<=bitmapdata.height;j++){
//计算每一个纵向位置的透明度
var alpha:int =Math.max(0,int((1-j/drawHeight)*pMaxAlpha*256));
//将这个透明度换算成16进制的字符
var str:String = alpha.toString(16);
str = "0x"+str+"000000";
//用这个透明度定义一个位图,用来提取透明度信息
var alphaBitmapData:BitmapData = new BitmapData(bitmapdata.width,drawHeight,true,Number(str));
//描绘倒影,一方面从原图片中反向提取颜色值,一方面从上一行定义的位图中提取透明度信息,每次描绘一个像素的高度
bitmapdata.copyPixels(pBitmapData,new Rectangle(0,Math.floor(pBitmapData.height-j-1),bitmapdata.width,1),
new Point(0,j),alphaBitmapData);
}
if(pBlurValue!=-1){
for(var c:int=0;c<=drawHeight;c++){
//给倒影添加虚化效果,最小为2,最大为2+pBlurValue,效果为横纵双向模糊

var blur:int = 2+int(c*pBlurValue/drawHeight);
bitmapdata.applyFilter(bitmapdata,new Rectangle(0,c,bitmapdata.width,1),
new Point(0,c),new BlurFilter(blur,blur));
}
}
//返回做好的倒影位图
return bitmapdata;
}
原文地址:https://www.cnblogs.com/skybdemq/p/2226938.html