zoukankan      html  css  js  c++  java
  • Bitmap与Bitmapdata

    一个 Bitmap 对象可在若干 Bitmap 对象之中共享其 BitmapData 引用,与转换属性或旋转属性无关。
    由于能够创建引用相同 BitmapData 对象的多个 Bitmap 对象,因此,多个显示对象可以使用相同的复杂 BitmapData 对象,
    不会因为每个显示对象实例使用一个 BitmapData 对象而产生内存开销

    示例1:创建500个位图,每个位图使用不同引用的BitmapData的内存

    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.system.System;
    //打印初始的内存情况
    trace("开始空闲时内存: "+System.totalMemory/1000+"k");
    var bmpdt:BitmapData;
    for(var i:int=0;i<500;i++)
    {
        //每次都是新的bitmapData给bitmap 
        bmpdt=new BitmapData(100,100,false,0xffccdd);
        var bmp:Bitmap=new Bitmap(bmpdt);
        addChild(bmp)
        bmp.x=i+3;
        bmp.y=i+3;
    }
    trace("创建完毕后内存: "+System.totalMemory/1000+"k");

    结果:
    开始空闲时内存: 34328.576k
    创建完毕后内存: 55169.024k

    示例2:创建500个位图,每个位图使用了同一个BitmapData的引用

    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.system.System;
    //打印初始的内存情况
    trace("开始空闲时内存: "+System.totalMemory/1000+"k");
    var bmpdt:BitmapData=new BitmapData(100,100,false,0xffccdd);;
    for(var i:int=0;i<500;i++)
    {
        var bmp:Bitmap=new Bitmap(bmpdt);
        addChild(bmp)
        bmp.x=i+3;
        bmp.y=i+3;
    }
    trace("创建完毕后内存: "+System.totalMemory/1000+"k");

    结果:
    开始空闲时内存: 34373.632k
    创建完毕后内存: 34799.616k

    像素贴紧和平滑

    bmp.smoothing=true;位图缩放时 会模糊 。使用 Bitmap.smoothing=true;会让图像更平滑自然,也会更加消耗性能
    应用滤镜
    在将 smoothing 设置为 true 的情况下绘制位图要比在将 smoothing 设置为 false 的情况下执行相同操作更为缓慢。

    import flash.display.BitmapData;
    import flash.geom.Rectangle;
    import flash.geom.Point;
    import flash.filters.BlurFilter;
    import flash.display.Bitmap;
    //创建bitmapData
    var bmpdt:BitmapData=new BitmapData(80,30,false,0xffccdd);
    //创建一个Rectangle 这个rect会指定到bitmapdata的坐标上
    var rect:Rectangle=new Rectangle(20,10,40,10);
    //对这个区域 填充颜色
    bmpdt.fillRect(rect,0x0033ff);
    
    //获取这个矩形的左上角坐标
    var pt:Point=new Point(rect.left,rect.top);
    var blFilter:BlurFilter=new BlurFilter(8,8,1);
    bmpdt.applyFilter(bmpdt,rect,pt,blFilter);
    
    var bmp:Bitmap=new Bitmap(bmpdt);
    addChild(bmp);

    滤镜
    滤镜和位图缓存:若要对显示对象应用滤镜,必须启用该对象的位图缓存。在对 cacheAsBitmap 属性设置为false 的显示对象应用滤镜时,Flash Player 会自动将该对象的 cacheAsBitmap 属性的值设置为 true。如果您以后删除了该显示对象中的所有滤镜,Flash Player 会将 cacheAsBitmap 属性重置为最后设置的值。
    在运行时更改滤镜:如果已经对显示对象应用了一个或多个滤镜,则无法向 filters 属性数组添加其它滤镜。若要添加或更改应用的这组滤镜,需要创建整个滤镜数组的副本,然后对此(临时)数组进行修改。然后,将此数组重新分配给显示对象的 filters 属性,这样才能将滤镜应用于该对象。
    滤镜示例:

    var bmpdt:BitmapData=new BitmapData(100,100,true,0xffccddee);
    var bmp:Bitmap=new Bitmap(bmpdt);
    addChild(bmp);
    
    var filter:BlurFilter=new BlurFilter(10,10,1);
    //声明一个rectangel 坐标是绝对坐标和区域
    var rect:Rectangle=new Rectangle(50,50,50,50);
    var p:Point=new Point(50,50);
    //必须有填充色 否则滤镜无效
    bmpdt.fillRect(rect,0xffFF0000);
    bmpdt.applyFilter(bmpdt,rect,p,filter);
    
    colorTransform示例:
    var bmd1:BitmapData = new BitmapData(100,100,true,0xffffccdd);
    var bmp:Bitmap=new Bitmap(bmd1);
    addChild(bmp);
    var clorTran:ColorTransform=new ColorTransform();
    //颜色转换 透明度设置0.7
    clorTran.alphaMultiplier=0.7;
    var rect:Rectangle=new Rectangle(50,50,20,20);
    //对 Bitmapdata设置colorTranform
    bmd1.colorTransform(rect,clorTran);

    复制像素

    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.geom.Rectangle;
    import flash.geom.Point;
    //目标Bitmapdata 待被复制
    var bmd1:BitmapData = new BitmapData(40, 40, false, 0x000000FF);
    var bmd2:BitmapData = new BitmapData(80, 40, false, 0x0000CC44);
    //原始Bitmapdata打个标记
    bmd1.setPixel(15,15,0x00ff0000);
    var rect:Rectangle = new Rectangle(10, 10, 10, 10);
    var pt:Point = new Point(30, 10);
    //从Bitmapdata源的rect区域复制到 pt里
    bmd2.copyPixels(bmd1, rect, pt);
    
    var bm1:Bitmap = new Bitmap(bmd1);
    this.addChild(bm1);
    var bm2:Bitmap = new Bitmap(bmd2);
    this.addChild(bm2);
    bm2.x = 50;

    draw()
    BitmapData.draw(source:IBitmapDrawable):void
    DisplayObject 和 BitmapData 类实现了 IBitmapDrawable接口

    floodFill类似Flash工具里的油漆桶

    var bmpdt:BitmapData=new BitmapData(200,200,false,0xff0000);
    var rect:Rectangle=new Rectangle(0,0,100,100);
    bmpdt.fillRect(rect,0x00ff00);
    rect.x=50;
    rect.y=50;
    bmpdt.fillRect(rect,0x0000ff);
    rect.x=100;
    rect.y=100;
    bmpdt.fillRect(rect,0xff00ff);
    //floodFill相当于油漆桶倾倒功能
    bmpdt.floodFill(90,90,0xffccee)
    var bmp:Bitmap=new Bitmap(bmpdt);
    addChild(bmp);


    getPixels(rectangle)
    从像素数据的矩形区域生成一个字节数组。为每个像素将一个无符号整数(32 位未经相乘的像素值)写入字节数组。

    import flash.display.BitmapData;
    import flash.geom.Rectangle;
    import flash.display.Bitmap;
    import flash.utils.ByteArray;
    
    var bmd:BitmapData = new BitmapData(a.width, a.height, true);
    bmd.draw(a);
    var bounds:Rectangle = new Rectangle(0, 0, bmd.width, bmd.height);
    //BitmapData.getPixels(rectangel):ByteArray 获取图像数据的一个Rectangle的二进制数据
    var pixels:ByteArray = bmd.getPixels(bounds);
    trace(pixels)

    //ÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔ
      ÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔ
      ÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔ
       ÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔ
      ÿÔÔÔÿÔÔÔÿ­„3ÿ­„3ÿ­„3ÿ­„3ÿ­„3ÿ­„3ÿ­„
      3ÿ­„3ÿ­„3ÿ­„3ÿ­„3ÿ­„3ÿ­„3ÿ­„3ÿ­„3ÿ­„3ÿ­„
      3ÿ­„3ÿ­„

  • 相关阅读:
    struts2.16 启动报错解决方案 at com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading(FileManager.java:209)
    多线程的概念
    JQuery Easy Ui 可装载组合框 ComboBox
    Spring 3.0 基于 Annotation 的依赖注入实现
    JQuery Easy Ui dataGrid 数据表格
    数据库中 对原有字段进行字符串追加处理
    1.Python知识点补充
    转跨站脚本攻击详解
    Wiz笔记
    ASP.NET角色管理的基本配置
  • 原文地址:https://www.cnblogs.com/naiking/p/2864132.html
Copyright © 2011-2022 走看看