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;
        }
    }
}            

好的下面就可以用这个功能类来拷贝图片了,具体的操作本人就不一一赘述啦,希望各位大神指正:

...
var imgPathString = "../images/example.jpg";
var loader:Loader = new Loader();
            if(imgPathString)
                loader.load(new URLRequest(imgPathString));
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
...

     /**
         * 监听到Loader加载完毕以后执行的函数
         */
        private function loadComplete(e:Event):void {
            var loader:Loader=Loader(e.target.loader);//得到Loader对象
            var icon:DisplayObject = Bitmap(loader.content);//Loader里面的内容
            //获取Bitmap对象的BitmapData数据
            var bitmapData:BitmapData = Bitmap(loader.content).bitmapData;
            //转为byteArray.
            var bytes: ByteArray = BitmapBytes.BitmapDataToByteArray( Bitmap(loader.content).bitmapData,Bitmap(loader.content));
...

        }
    
时间: 02-08

FLEX 图片拷贝的相关文章

flex图片布局

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>flex图片布局</title> <style> body { margin: 0; padding: 0; } .box { float: left; width: 30%; margin-top: 10px; margin-left: 2.5%; height: 0; padding

图片拷贝

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;     public class demo6 {       /**      * 把一张图片拷贝到指定的位置      *       */     public static void main(String[] args) throws IOException {

FileInputStream与FileOutputStream练习题 -------------------图片拷贝

1 package com.outputstream; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 import java.io.InputStream; 9 /** 10 * 需求: 拷贝一张图片 11 * @

NIO的原理和文件读入读出及图片拷贝的使用

1.NIO的简介        java.nio 全称 java non-blocking IO 是jdk1.4之后出现的 New IO        为所有的原始类型(boolean除外)提供了缓存支持        使用它 可以提供非阻塞式的高伸缩性网络    NIO由三个核心部分组成        Channel 管道/通道        Buffer 缓冲区        Selector 选择器    普通IO        NIO    面向流        面向缓冲区    阻塞I

NinePatch图片

绍 参考 :http://blog.sina.com.cn/s/blog_5033827f0100r4dm.html NinePatch图片以*.9.png结尾,和普通图片的区别是四周多了一个边框(如下图所示): 如上图所示,左边那条黑色线代表图片垂直拉伸的区域,上边的那条黑色线代表水平拉伸区域,右边的黑色线代表内容绘制的垂直区域,下边的黑色线代表内容绘制的水平区域,右边和下边的线是可选的,左边和上边的线不能省略. 采用NinePatch图片做背景,可使背景随着内容的拉伸(缩小)而拉伸(缩小).

左边logo 右边广告图片布局 div css左右浮动布局实例

左边logo 右边广告图片布局(div css左右浮动布局实例) 一般网页头部是左边网站标志logo,右边为广告图片或电话号码图片,这里DIVCSS5为大家介绍对float浮动使用实例布局介绍. 需要div+css布局案例效果图需要div+css布局案例效果图(缩小)一.DIVCSS5实例布局技术点说明 - TOP 1.图片切出说明:首先切好左边logo图片,右边广告图片(切图注意不影响图片质量情况尽量宽度高度尺寸切小).2.采用float:left和float:right布局:一般遇到内容靠左

基于restful注解(spring4.0.2整合flex+blazeds+spring-mvc)&lt;一&gt;

摘自: http://www.blogjava.net/liuguly/archive/2014/03/10/410824.html 参考官网:1.http://livedocs.adobe.com/blazeds/1/blazeds_devguide/2.http://docs.spring.io/spring-flex/docs/1.5.2.RELEASE/reference/html/1)下载blazeds(turnkey4.0.x版本)网址:http://sourceforge.net/

WCF开山篇__图片传输

WCF开山篇__图片传输 一.  简介 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序接口,可以翻译为Windows通讯接口,它是.NET框架的一部分,由 .NET Framework 3.0 开始引入,与 Windows Presentation Foundation及 Windows Workflow Foundation并行为新一代 Windows 操作系统以及 WinFX 的三个重大应用程序开发类库.WCF由于集合了几乎由.

WPF - 如何引用external dll中图片

前几天一直想引用别的DLL里面的一个图片.总是出现各种各样问题,一气之下将图片拷贝到当前Project中,运行良好.虽然知道引用图片,就1.2.列出来的2点就够了. 1. The Build Action should be Resource instead of Embedded Resource. 2. In the WPF application with the following XAML: <Image Source="/ClassLibraryName;Component/i