转发:FLEX 图片拷贝

在用FLEX做GIS相关的开发的时候,遇到一个问题。因为是监控类的系统,所以需要要求地图上的ICON的实时更新,从而会出现重复加载的情况。就是重复请求相同的图片用做背景,尤其是在加载的ICON较多的时候,会有大量的http请求占用大量的资源。

这时候想到两种解决办法:

把图片资源嵌入FLEX文件
把图片做缓存

(1)把图片资源嵌入FLEX文件:

[Bindable]
[Embed(source="image/example.jpg")]
 private var imgClass:Class;

但是当图片特别多的时候,例如有几百张的话,就不堪重负了。那我们看第二种。

(2)大家都知道ActionScript的对象都是引用传递。假如需要做缓存的话必须做一个副本用于拷贝,否则就会出现一张图片被多个元素使用的情况,造成的结果就是”有的孩子没饭吃“。这样就需要用到图片的拷贝。废话不多说先写个拷贝的功能类:
package com.charles.util
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.geom.Rectangle;
    import flash.utils.ByteArray;
    import mx.core.UIComponent; 
    
    public class BitmapCopyHepler 
    { 
        public function BitmapCopyHepler () 
        { 
            super(); 
        } 
        /**
         * 将可视的UIComponent组件转换为ByteArray数组
         *@param bitMapData:BitmapData 
         *@param bitmap:Bitmap
         */
        public static function BitmapDataToByteArray(bitMapData:BitmapData,bitmap:Bitmap):ByteArray{ 
            //读取指定像素区域生成一个ByteArray
            var pixels:ByteArray = bitMapData.getPixels( new Rectangle(0,0,bitmap.width,bitmap.height) ); 
            //将数据源的高和宽一起存储到数组中                              
            pixels.writeShort(bitmap.width); 
            pixels.writeShort(bitmap.height); 
            return pixels; 
        } 

       /**
        * 将Byte数组转为Bitmap对象
        *@param byArr:ByteArray 
        *@param bitmapData:BitmapData
        */
        public static function ByteArrayToBitmap(byArr:ByteArray,bitmapData:BitmapData):Bitmap{ 
            if(byArr==null){ 
                return null; 
            } 
            //读取出存入时图片的高和宽
            var bmd:ByteArray= byArr; 
            bmd.position=bmd.length-2; 
            var imageWidth:int = bmd.readShort(); 
            bmd.position=bmd.length-4; 
            var imageHeight:int= bmd.readShort(); 
            //拷贝BitmapData数据
            var copyBmp:BitmapData = bitmapData.clone();
            //给图片中的每一个像素赋值,按照原有的图片结构重新绘制图片
            bmd.position = 0; 
            copyBmp.setPixels(new Rectangle(0,0,imageWidth,imageHeight),bmd);
            var bmp:Bitmap = new Bitmap(copyBmp ); 
            return bmp; 
        } 
    } 
}
package com.charles.util
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.geom.Rectangle;
    import flash.utils.ByteArray;
    import mx.core.UIComponent; 
    
    public class BitmapCopyHepler 
    { 
        public function BitmapCopyHepler () 
        { 
            super(); 
        } 
        /**
         * 将可视的UIComponent组件转换为ByteArray数组
         *@param bitMapData:BitmapData 
         *@param bitmap:Bitmap
         */
        public static function BitmapDataToByteArray(bitMapData:BitmapData,bitmap:Bitmap):ByteArray{ 
            //读取指定像素区域生成一个ByteArray
            var pixels:ByteArray = bitMapData.getPixels( new Rectangle(0,0,bitmap.width,bitmap.height) ); 
            //将数据源的高和宽一起存储到数组中                              
            pixels.writeShort(bitmap.width); 
            pixels.writeShort(bitmap.height); 
            return pixels; 
        } 

       /**
        * 将Byte数组转为Bitmap对象
        *@param byArr:ByteArray 
        *@param bitmapData:BitmapData
        */
        public static function ByteArrayToBitmap(byArr:ByteArray,bitmapData:BitmapData):Bitmap{ 
            if(byArr==null){ 
                return null; 
            } 
            //读取出存入时图片的高和宽
            var bmd:ByteArray= byArr; 
            bmd.position=bmd.length-2; 
            var imageWidth:int = bmd.readShort(); 
            bmd.position=bmd.length-4; 
            var imageHeight:int= bmd.readShort(); 
            //拷贝BitmapData数据
            var copyBmp:BitmapData = bitmapData.clone();
            //给图片中的每一个像素赋值,按照原有的图片结构重新绘制图片
            bmd.position = 0; 
            copyBmp.setPixels(new Rectangle(0,0,imageWidth,imageHeight),bmd);
            var bmp:Bitmap = new Bitmap(copyBmp ); 
            return bmp; 
        } 
    } 
}

原文地址

发布了17 篇原创文章 · 获赞 1 · 访问量 562

猜你喜欢

转载自blog.csdn.net/a393007511/article/details/103343931
今日推荐