• 【转】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;
    }
    
  • 相关阅读:
    linux command ubuntu
    C++ project
    windows command line
    vi command
    C++ Language
    postgresql backup
    C Language
    L1-046. 整除光棍(模拟除法)
    pta 拯救007(Floyd)
    CCF 201609-4 交通规划
  • 原文地址:https://www.cnblogs.com/skybdemq/p/2226938.html
Copyright © 2020-2023  润新知