用自己的脑袋去做事情

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
本人最近遇到需要复制一个Bitmap对象的问题,应用场景如下:

在我的一个Flash中经常需要加载同样的图片,而这张图片也是比较大的,所以就想第一次使用后就把这张图片缓存起来,以后用时直接从缓存读取就可以了,因此就遇到Bitmap对象的复制问题,在网上搜了一下,网友们有两种解决方案,如下
方案1:
Title public class MyImage{
  public var bitmap: Bitmap;
  public var url: String;
  public var x: number;
  public var y: number;

  public function clone(): MyImage()
  {
      var myImage: MyImage = new MyImage();
      myImage.bitmap = this.bitmap.clone;
      myImage.url = this.url;
      myImage.x = this.x;
      myImage.y = this.y;
      return myImage;
  }
}
这种方案网上有人说可以,但是我自己试了一下,好像不行,“this.bitmap.clone”这句话不对,Bitmap就没有clone这个属性
方案2:

...

import flash.net.registerClassAlias;
import flash.utils.getDefinitionByName;
import flash.utils.getQualifiedClassName;

...

public function clone(source:Object) :* {
        var typeName:String = getQualifiedClassName(source);//获取全名
        var packageName:String = typeName.split("::")[1];//切出包名
        var type:Class = Class(getDefinitionByName(typeName));//获取Class

        registerClassAlias(packageName, type);//注册Class
       
        //复制对象
        var copier:ByteArray = new ByteArray();
        copier.writeObject(source);
        copier.position = 0;
        return copier.readObject();
}
这种方案虽然不报错,对象也复制成功了,但是好像图片就是无法正常显示
方案3:这是我自己的方案,其实也是很简单的事情
new Bitmap(sourceBitmap.bitMapData.clone())
Bitmap的bitmapData有clone的方法
这个方法我试过,可以正常使用
posted on 2008-03-11 19:45  netlynx2000  阅读(805)  评论(0编辑  收藏  举报