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 ...
随机推荐
- Swift - 02 - 常量和变量
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- Java安全发布的理解
看<Java并发编程实战>遇到如下问题 代码: /** * Created by yesiming on 16/11/11. */public class Holder { private ...
- java_log_02
配置 在第一部分,我们将介绍配置 logback 的各种方法,给出了很多配置脚本例子.在第二部分,我们将介绍 Joran,它是一个通用配置框架,你可以在自己的项目里使用 Joran 一.Logback ...
- 安卓之cannot convert from Fragment1 to Fragment
在写一个音乐播放器的时候,用到了fragment,结果在需要返回Fragment的方法里面,无法将Fragment1(Fragment的子类)强制转换成Fragment, 很是纳闷,我是参照一个开源代 ...
- Extjs中grid表格中去掉红三角
在编辑Extjs的gridpanel的时候,数据有错误或是修改在每个单元格上都会出现红色的小三角,在每个列上面可以配置allowBlank: false来标识这个不可以为空 有的时候在保存数据时如果不 ...
- java-二分查找法
package search; public class BinarySearch { public static void main(String[] args) { , , , , , , , , ...
- javascript 向上滚动
<html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Co ...
- DIV隐藏与重显
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- iPhone 被同步到 Mac上后 如果不希望更新到Mac上在哪里删除?
前往文件夹 /Users/用户名/Library/Application Support/MobileSync 直接删除 就行了(同时要倾倒废纸篓). 目前iPhone链接Mac 后 不让 ...
- 使用cglib动态创建java类
转至:http://ckwang17.iteye.com/blog/963881 cglib 是一个开源项目! 是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Jav ...