• 【设为首页】
  • 【收藏闪客居】
当前位置:主页 > FLASH AS 编程 > AS基础篇 > AS 3.0 > 文章内容
  • BitmapBytes类-实现BitmapData与ByteArray(Base64)之间互转功能

  • 来源:我爱RIA网 作者:kinglong 2008-04-05 【 】 TAG:

[AS3]BitmapBytes类-实现BitmapData与ByteArray(Base64)之间互转功能
【组件版本】:0.5
【功能简述】:实现BitmapData与ByteArray(Base64)之间互转功能。
【运行平台】:Flash CS3,ActionScript3,Flash Player 9 +
【类包路径】: com.klstudio.images.BitmapBytes
【方法说明】:
  1. /**  
  2. * @link http://www.klstudio.com  
  3. * @author Kinglong  
  4. * @version 0.5  
  5. */  
  6.   
  7. package com.klstudio.images {   
  8.   
  9.     import flash.display.BitmapData;   
  10.     import flash.geom.Rectangle;   
  11.     import flash.utils.ByteArray;   
  12.        
  13.     import com.klstudio.util.Base64;   
  14.        
  15.     public class BitmapBytes {   
  16.            
  17.         public static function encodeByteArray(data:BitmapData):ByteArray{   
  18.             if(data == null){   
  19.                 throw new Error("data参数不能为空!");   
  20.             }   
  21.             var bytes:ByteArray = data.getPixels(data.rect);   
  22.             bytes.writeShort(data.width);   
  23.             bytes.writeShort(data.height);   
  24.             bytes.writeBoolean(data.transparent);   
  25.             bytes.compress();   
  26.             return bytes;   
  27.         }   
  28.         public static function encodeBase64(data:BitmapData):String{   
  29.             return Base64.encodeByteArray(encodeByteArray(data));   
  30.         }   
  31.            
  32.         public static function decodeByteArray(bytes:ByteArray):BitmapData{   
  33.             if(bytes == null){   
  34.                 throw new Error("bytes参数不能为空!");   
  35.             }   
  36.             bytes.uncompress();   
  37.             if(bytes.length <  6){   
  38.                 throw new Error("bytes参数为无效值!");   
  39.             }              
  40.             bytes.position = bytes.length - 1;   
  41.             var transparent:Boolean = bytes.readBoolean();   
  42.             bytes.position = bytes.length - 3;   
  43.             var height:int = bytes.readShort();   
  44.             bytes.position = bytes.length - 5;   
  45.             var width:int = bytes.readShort();   
  46.             bytes.position = 0;   
  47.             var datas:ByteArray = new ByteArray();             
  48.             bytes.readBytes(datas,0,bytes.length - 5);   
  49.             var bmp:BitmapData = new BitmapData(width,height,transparent,0);   
  50.             bmp.setPixels(new Rectangle(0,0,width,height),datas);   
  51.             return bmp;   
  52.         }   
  53.            
  54.         public static function decodeBase64(data:String):BitmapData{               
  55.             return decodeByteArray(Base64.decodeToByteArray(data));   
  56.         }          
  57.            
  58.         public function BitmapBytes() {   
  59.             throw new Error("BitmapBytes类只是一个静态类!");   
  60.         }   
  61.            
  62.     }   
  63.        
  64. }   

【打包文件】:http://www.klstudio.com/demo/mxp/BitmapBytes.mxp

P.S.此转换类是有很多实用价值,我可以简单一例:你可以把常用的位图进行通过encodeBase64方法生成Base64编码字符串,作为程序的常量存储下来,如果使用的话,只需将字符串常量再通过decodeBase64还原成BitmapData位图对象就可以了!此图片存储数据的方式要比我以前写的“ IconDataManager-图标数据管理类”里面提及的图片数据压缩要更为实用和方便。至于其他应用,就有待你的发现了。



上一篇:用as3开发项目在那里写代码   下一篇:有关AS3跨域读取图片文件报错“checkPolicyFile”的解决方法
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)