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 * @

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

android 通过bitmapfactory得到图片真实像素的方法,以及没有得到真实像素的原因

原文来自:原文地址 由于这个错误导致浪费非常长时间找原因,所以要赶紧记录下来. 过程是这种,在使用android读取图片的时候,就是使用BitmapFactory.decodeResource(this.getResources(),R.drawable.base)的时候 返回的图片大小和真实图片大小不一样有木有,比方图片是700*450的, 但读出来是525*337的.假设有遇到过此类情况,请往下看 这个错误,仅仅能怪咱们学艺不精,原因就是你没在对应的资源目录里放图片就是 (drawable-

UIMenuController搭配UIPasteboard,执行拷贝-黏贴操作-b

一.基本概念 UIKit框架中,可以直接执行拷贝黏贴操作的有:UITextView.UITextField和UIWebView,其他控件需要实现相关方法. 关于UIPasteboard ·黏贴板是app内或者app之间,交换数据的标准机制 ·有公开的也有私有的,公开的黏贴板为系统级别(system pasteboard),私有的黏贴板为应用程序级别(app pasteboard),系统级别的黏贴板可以分享数据给任意其他app,应用程序级别的黏贴板只能分享给应用本身或者有相同team ID的应用