在用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));
... }

转载请注明出处:http://www.cnblogs.com/xinwang/p/4283166.html

FLEX 图片拷贝的更多相关文章

  1. flex图片布局

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>f ...

  2. flex 图片旋转(解决公转和自转问题)

    在Flex中图片的旋转是既有公转和自转的.这样在图片旋转的时候就有一定小麻烦: 为了更好地说明问题,先引入两个概念:“自转”和“公转”.想象一下,地球在绕着太阳公转的同时,它自己也在自转.Flash应 ...

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

    package com.outputstream; import java.io.File; import java.io.FileInputStream; import java.io.FileNo ...

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

    1.NIO的简介        java.nio 全称 java non-blocking IO 是jdk1.4之后出现的 New IO        为所有的原始类型(boolean除外)提供了缓存 ...

  5. flex图片垂直居中

    html <view class="person_info_more"> <image class="more" src="/ima ...

  6. Android—基于GifView显示gif动态图片

    android中显示gif动态图片用到了开源框架GifView 1.拷GifView.jar到自己的项目中. 2.将自己的gif图片拷贝到drawable文件夹 3.在xml文件中设置基本属性: &l ...

  7. java IO流复制图片

    一.使用字节流复制图片 //字节流方法 public static void copyFile()throws IOException { //1.获取目标路径 //(1)可以通过字符串 // Str ...

  8. Android图片缩放方法

    安卓开发中应用到图片的处理时候,我们通常会怎么缩放操作呢,来看下面的两种做法: 方法1:按固定比例进行缩放 在开发一些软件,如新闻客户端,很多时候要显示图片的缩略图,由于手机屏幕限制,一般情况下,我们 ...

  9. JS Flex交互:html嵌套Flex(swf)

    一.html页面嵌套Flex需要用到 swfobject.js swfobject的使用是非常简单的,只需要包含 swfobject.js这个js文件,然后在DOM中插入一些简单的JS代码,就能嵌入F ...

随机推荐

  1. 自定义鼠标Cursor转变成图片

    今天无意做到项目遇到一个好玩的事情,就是当我鼠标移到一个链接上面,并不是像正常那样出现一个小手,而是变成一个小十字架, 下面看图当时第一眼看到总感觉哪里不对,噢噢噢噢 这样的 小手没了,居然是一个图片 ...

  2. PHP 文件上传功能

    <?php /** * TestGuest Version1.0 * ================================================ * Web:2955089 ...

  3. [置顶] VS自带工具:dumpbin的使用

    有时候我们想查看一个exe引用了哪些动态库,或者我们想看某个动态库包含哪些接口函数,这个时候可以使用dumpbin.exe工具: 1.输入Dumpbin -imports calldll.exe查看它 ...

  4. SystemConfig.getPropertyValue("test");配置文件已经加了test=abc,但是取得时候空字符串

    1.定位tomcat中System.properties是否配置了,发现配置了 2.定位myeclipse中修改的tomcat是不是自己配置的tomcat.发现是 3.定位如下位置配置是否读取我先在用 ...

  5. C#使用Expand、Shell32解压Cab、XSN文件

    前言: 需要解压InfoPath表单的xsn文件,在项目中以前使用的是Expand命令行解压,都没有出过问题,近段时间项目中突然报错解压失败,通过分析解压操作得出结论: 1.正常正常情况下,expan ...

  6. NPM环境搭建

    1. NPM全局路径:配置npm包的安装位置,在你的用户文件夹下,新建.npmrc文件:cache=D:\NodeJs\nvm\npm-cache 表示缓存文件夹 prefix=D:\NodeJs\n ...

  7. Python文件之----JSON

    #coding=utf-8import json def writeJSON(filaName="test.json"): f=open(filaName, "wb&qu ...

  8. Hibernate 多对多关联Demo

    以学生[Student ]与课程[Course ]之间的关系为例: //Course .java public class Course implements Serializable { priva ...

  9. 学习用CMake来编写Qt程序

    最近开始学习CMake,因为项目需求需要用到Qt,自带的qmake会出现许多问题(比如文件修改之后有时候qmake不会侦测到不会重新编译,需要手动去编译等),于是开始尝试使用CMake来编写Qt程序, ...

  10. N3292系列资料之RTC介绍

    N3292系列资料之RTC介绍 1 RTC特性 Ø 拥有时间计数器(秒,分,时)和日历计数器,用来计算时间 Ø 绝对定时功能(秒,分,时,日,月,年) Ø 相对定时功能 Ø 支持12小时/24小时模式 ...