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));
... }
转载请注明出处:http://www.cnblogs.com/xinwang/p/4283166.html
FLEX 图片拷贝的更多相关文章
- flex图片布局
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>f ...
- flex 图片旋转(解决公转和自转问题)
在Flex中图片的旋转是既有公转和自转的.这样在图片旋转的时候就有一定小麻烦: 为了更好地说明问题,先引入两个概念:“自转”和“公转”.想象一下,地球在绕着太阳公转的同时,它自己也在自转.Flash应 ...
- FileInputStream与FileOutputStream练习题 -------------------图片拷贝
package com.outputstream; import java.io.File; import java.io.FileInputStream; import java.io.FileNo ...
- NIO的原理和文件读入读出及图片拷贝的使用
1.NIO的简介 java.nio 全称 java non-blocking IO 是jdk1.4之后出现的 New IO 为所有的原始类型(boolean除外)提供了缓存 ...
- flex图片垂直居中
html <view class="person_info_more"> <image class="more" src="/ima ...
- Android—基于GifView显示gif动态图片
android中显示gif动态图片用到了开源框架GifView 1.拷GifView.jar到自己的项目中. 2.将自己的gif图片拷贝到drawable文件夹 3.在xml文件中设置基本属性: &l ...
- java IO流复制图片
一.使用字节流复制图片 //字节流方法 public static void copyFile()throws IOException { //1.获取目标路径 //(1)可以通过字符串 // Str ...
- Android图片缩放方法
安卓开发中应用到图片的处理时候,我们通常会怎么缩放操作呢,来看下面的两种做法: 方法1:按固定比例进行缩放 在开发一些软件,如新闻客户端,很多时候要显示图片的缩略图,由于手机屏幕限制,一般情况下,我们 ...
- JS Flex交互:html嵌套Flex(swf)
一.html页面嵌套Flex需要用到 swfobject.js swfobject的使用是非常简单的,只需要包含 swfobject.js这个js文件,然后在DOM中插入一些简单的JS代码,就能嵌入F ...
随机推荐
- 跳ajax方式进行前后台交互之后台代码要怎么写
package com.zq.www.mis.action; import java.util.List; import org.apache.struts2.convention.annotatio ...
- PHP 实现ajax的接收
Ajax界面: 首先,理解本质,就是普通的一个提交在无刷新的情况下发出请求后得到响应,然后去针对你需要 的情况来做行为. <!DOCTYPE html> <html> < ...
- java编程思想-枚举类型思维导图
- Swift - 16 - String.Index和Range
//: Playground - noun: a place where people can play import UIKit var str = "Welcome to Play Sw ...
- JavaScript 之 关键内容
词法作用域.调用对象.作用域链.闭包.构造函数.原型.类.继承 局部变量查找路径 属性查找路径
- 【USACO 2.2.4】派对灯
[描述] 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码. 这些灯都连接到四个按钮: 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄 ...
- Mysql 数据类型使用说明
FLOAT 和DOUBLE 类型支持使用标准的浮点运算进行近似计算. DECIMAL类型用于存储精确的小数. 因为cpu不支持对DECIMAL的直接计算,所以在Mysql5.0及更高的版本中,MYSQ ...
- JQuery语法总结和注意事项
1.关于页面元素的引用 通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用do ...
- js ie浏览器下的选中操作
最近在学习jquery 好多英文网站,制作一个网站的副本,可以主动地学习.好像给自己的网站添加一个小词典,就像沪江小d那样. js试了好几种方法 实在不行,网上搜索了下 ,用到了浏览器开发.本篇文章 ...
- CSS实现table td中文字的省略与显示
所谓省略就是把多余的字以“...”显示出来,而显示则是当鼠标移动到td上时,把省略的字重新显示出来.对于一个table,兼容IE与FF.Chrome的省略方式CSS写法: table{ width:2 ...