• 【转】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;
    }
    
  • 相关阅读:
    VS Code中Vetur与prettier、ESLint联合使用
    export 和 export default 的区别,exports 与 module.exports的区别
    css clearfix实现
    通过表单自动提交,实现页面转发
    .net webapi后台返回pdf文件流,前端ajax请求下载,空白pdf排错经历
    MS Sql Service 记一次in查询的优化
    MS SQL Service 查看执行计划
    ContOS7挂载硬盘
    centos命令行连接redis服务器
    如何造轮子
  • 原文地址:https://www.cnblogs.com/skybdemq/p/2226938.html
Copyright © 2020-2023  润新知