zoukankan      html  css  js  c++  java
  • 读取bmp格式图片

    flash加载外部数据:

    Loader类可用于加载 SWF 文件或图像(JPG、PNG 或 GIF)文件。

    URLLoader 类以文本、二进制数据或 URL 编码变量的形式从 URL 下载数据。

    URLStream 类提供对下载 URL 的低级访问。 数据一下载,便可随即为 ActionScript 使用,这和使用 URLLoader 时需要等到整个文件下载完不同。 并且 URLStream 类还允许在完成下载前关闭流。 已下载文件的内容将作为原始二进制数据提供。

    如果要加载图片一般使用的是Loader类,但是Loader类有一些不支持的文件比如bmp图片就加载不了。要解决这个问题可以使用URLLoader 类。通过URLLoader以二进制形式加载数据,然后将接收到的数据转换为bmp。 这个例子同样也可以扩张到其他Loader类不支持加载的文件。代码如下:

     1 package
     2 {
     3     import flash.display.MovieClip;
     4     import flash.events.Event;
     5     import flash.events.IOErrorEvent;
     6     import flash.net.URLRequest;
     7     import flash.net.URLLoaderDataFormat;
     8     import flash.display.BitmapData;
     9     import flash.display.Bitmap;
    10     import flash.net.URLLoader;
    11     import flash.utils.ByteArray;
    12     
    13     public class imageUrlLoadExample extends MovieClip
    14     {
    15         private var url:String = "http://issue2012.alog.cn/shake/upload/1337853313203-13751741307.bmp";
    16         private var urlLoader:URLLoader;
    17         
    18         public function imageUrlLoadExample()
    19         {
    20             urlLoader = new URLLoader();
    21             urlLoader.addEventListener(Event.COMPLETE, urlLoaderComplete);
    22             urlLoader.addEventListener(IOErrorEvent.IO_ERROR, urlLoaderIOError);
    23             urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
    24             urlLoader.load(new URLRequest(url));
    25         }
    26         
    27         private function urlLoaderComplete(e:Event):void
    28         {
    29             var byteArr:ByteArray = ByteArray(urlLoader.data);
    30             var bitmapData:BitmapData = new BitmapData(10, 10);
    31             bitmapData = BMPEncoder.decode(byteArr);
    32             
    33             var bitmap:Bitmap = new Bitmap(bitmapData);
    34             addChild(bitmap);
    35         }
    36         
    37         private function urlLoaderIOError(e:IOErrorEvent):void
    38         {
    39             trace(e);
    40         }
    41     }
    42 }

    还有一个比较少用的URLStream 类,此类相对URLLoader类有个很突出的特点,就是可以不用等全部内容下载完的就可以使用。下给出一个例子:

     1 package
     2 {
     3     import flash.display.Loader;
     4     import flash.display.MovieClip;
     5     import flash.events.IOErrorEvent;
     6     import flash.net.URLStream;
     7     import flash.net.URLRequest;
     8     import flash.events.Event;
     9     import flash.events.ProgressEvent;
    10     import flash.utils.ByteArray;
    11     import flash.utils.getTimer;
    12     
    13     public class urlStreamExample extends MovieClip
    14     {
    15         private var url:String = "http://www.wohuia.com/files/information/352544/d2a2ca089f0560b6cdc61fef068ebe75.jpg";
    16         private var imageLoad:Loader;
    17         private var imageStream:URLStream;
    18         
    19         private var imageData:ByteArray;
    20         
    21         public function urlStreamExample()
    22         {
    23             imageLoad = new Loader();
    24             imageStream = new URLStream();
    25             imageStream.addEventListener(Event.COMPLETE, imageStreamComplete);
    26             imageStream.addEventListener(IOErrorEvent.IO_ERROR, imageStreamIOError);
    27             imageStream.addEventListener(ProgressEvent.PROGRESS, imageStreamProgress);
    28             startLoad(url);
    29         }
    30         
    31         private function startLoad(_url:String):void
    32         {
    33             if (imageStream.connected)
    34             {
    35                 imageStream.close();
    36             }
    37             try
    38             {
    39                 imageStream.load(new URLRequest(_url + "?" + getTimer()));
    40             }
    41             catch (error:Error)
    42             {
    43                 trace("Unable to load requested document.");
    44             }
    45             //清除load
    46             imageLoad.unload();
    47             imageData = new  ByteArray();
    48             imageLoad.scaleX = imageLoad.scaleY = 0.5;
    49             addChild(imageLoad);
    50         }
    51         
    52         private function imageStreamProgress(e:ProgressEvent):void
    53         {
    54             if (imageStream.bytesAvailable == 0)
    55             {
    56                 return;
    57             }
    58             progressData();
    59         }
    60         
    61         private function progressData():void
    62         {
    63             if (imageStream.connected)
    64             {
    65                 imageStream.readBytes(imageData, imageData.length);
    66                 trace("imageData" + imageData.bytesAvailable);
    67             }
    68             imageLoad.unload();
    69             imageLoad.loadBytes(imageData);
    70         }
    71         private function imageStreamComplete(e:Event):void
    72         {
    73             trace("imageStream.bytesAvailable" );
    74         }
    75         private function imageStreamIOError(e:IOErrorEvent):void {
    76             trace(e);
    77             
    78         }
    79     }
    80 
    81 }
  • 相关阅读:
    【MariaDB】MariaDB的复制
    【MariaDB】MariaDB编译参数
    【MySQL】MySQL锁和隔离级别浅析二 之 INSERT
    【MySQL】查询使用临时表
    【MySQL】使用mysqlbinlog回滚
    ELK学习笔记(三)单台服务器多节点部署
    ELK学习笔记(二)-HelloWorld实例+Kibana介绍
    ELK学习笔记(六)分布式集群
    ELK学习笔记(四)SpringBoot+Logback+Redis+ELK实例
    ELK学习笔记(一)安装Elasticsearch、Kibana、Logstash和X-Pack
  • 原文地址:https://www.cnblogs.com/iwhk/p/2518088.html
Copyright © 2011-2022 走看看