zoukankan      html  css  js  c++  java
  • AcstionScript位图保存技术及相关内存优化

    总结:加载了一个位图后,需要的最重要的信息就是获得了位图的BitmapData,为了不二次加载,这个数据一般是驻留在内存中的,对于较大的位图而言,这个内存占用会比较大。因此需要在不需要显示这些位图的时候,优化这些位图的内存占用。

    本文的思路就是:在不显示位图的时候,将位图的BitmapData转换成ByteArray压缩后保存在内存中。下次需要显示位图时,解压ByteArray转换成BitmapData使用。

    在页游中,我们可以将这种转换成二进制然后压缩后暂存的方法加以推广使用

    除了较大的位图可以使用这种方法外,占内存比较多的独立模块也可以使用这种方式进行暂存。

    ====================================================================================================================

    (转)好久没写部落阁啦,最近发现了一个比较有营养帖子,讨论的是加载位图后相关的内存优化问题,总结了下前辈们的经验,决定将这个技术应用到现在在写的一个翻页杂志中,我将这个技术命名为B&B(ByteArray&BitmapData)

    As3载入图片后全部为Bitmap,要将Bitmap的内存释放掉我们需要用到bitmapData的dispose方法,但在释放掉内存之前要做一个步骤就是将BitmapData模式保存的位图信息以2进制(ByteArray)形式保存,这样就能大大的降低内存的消耗,理想情况下是载入图片以后如果不用马上转成ByteArray,然后将位图删掉,释放内存。等到要用了再利用 byteArray.writeObject(bitmapData.getVector())方法将位图读出来,同时用byteArray.clear()方法将ByteArray的内存释放掉。放代码

     1 package
     2 {
     3  import flash.display.Bitmap;
     4  import flash.display.BitmapData;
     5  import flash.display.Loader;
     6  import flash.display.Sprite;
     7  import flash.events.Event;
     8  import flash.events.MouseEvent;
     9  import flash.geom.Rectangle;
    10  import flash.net.URLRequest;
    11  import flash.utils.ByteArray;
    12  
    13  public class BTB extends Sprite
    14  {
    15   private var data:ByteArray;
    16   private var urlload:Loader;
    17   private var bool:Boolean=false;
    18   private var transBool:Boolean=false;
    19   private var bitData:BitmapData;
    20   private var rect:Rectangle;
    21   private var bitMap:Bitmap;
    22   public function BTB()
    23   {
    24    this.init();
    25   }
    26   
    27   private function init():void
    28   {
    29    stage.addEventListener(MouseEvent.CLICK,onClick);
    30   }
    31   
    32   private function onClick(e:MouseEvent):void
    33   {
    34    if (bool==false){
    35     //判断未加载
    36     loadPic();
    37     bool=true;
    38    }else{
    39     if (this.transBool){
    40      this.data=this.bitData.getPixels(this.rect);
    41      this.removeChild(this.bitMap);
    42      this.bitMap=null;
    43      this.bitData.dispose();
    44      this.data.compress();
    45      this.transBool=false;
    46     }else{
    47      this.bitData=new BitmapData(this.rect.width,this.rect.height);
    48      this.data.uncompress();
    49      this.data.position=0;
    50      this.bitData.setPixels(this.rect,this.data);
    51      this.data.clear();
    52      this.bitMap=new Bitmap(this.bitData);
    53      this.addChild(this.bitMap);
    54      this.transBool=true;
    55     }
    56    }
    57   }
    58   
    59   private function loadPic():void
    60   {
    61    var url:String="1.jpg";
    62    var urlrequest:URLRequest=new URLRequest(url);
    63    urlload=new Loader();
    64    urlload.load(urlrequest);
    65    urlload.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
    66   }
    67   
    68   private function onComplete(e:Event):void
    69   {
    70    var bitmap:Bitmap=e.target.content as Bitmap;
    71    var Number=bitmap.width;
    72    var height:Number=bitmap.height;
    73    var bitmapData:BitmapData=bitmap.bitmapData;
    74    this.rect=new Rectangle(0,0,width,height);
    75    this.data=bitmapData.getPixels(rect);
    76    bitmapData.dispose();
    77    this.data.compress();
    78    e.target.removeEventListener(Event.COMPLETE,onComplete);
    79    trace ("complete");
    80   }
    81   
    82   private function clean():void
    83   {
    84    this.urlload.unloadAndStop(true);
    85    this.urlload=null;
    86    trace ("gc");
    87   }
    88  }
    89 }
  • 相关阅读:
    /bin,/sbin,/usr/sbin,/usr/bin 目录
    centos开放端口8080
    centos 创建用户组及用户
    oracle内存优化
    ORACLE概要文件
    【刷题】洛谷 P3834 【模板】可持久化线段树 1(主席树)
    【总结】莫比乌斯反演
    【刷题】洛谷 P3768 简单的数学题
    【刷题】BZOJ 4816 [Sdoi2017]数字表格
    【刷题】BZOJ 2693 jzptab
  • 原文地址:https://www.cnblogs.com/hisiqi/p/3105952.html
Copyright © 2011-2022 走看看