读取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 }
posted @ 2012-05-25 15:22  FlashHK  阅读(708)  评论(0编辑  收藏  举报