[AS3]BitmapBytes类-实现BitmapData与ByteArray(Base64)之间互转功能
【组件版本】:0.5
【功能简述】:实现BitmapData与ByteArray(Base64)之间互转功能。
【运行平台】:Flash CS3,ActionScript3,Flash Player 9 +
【类包路径】: com.klstudio.images.BitmapBytes
【方法说明】:
-
-
-
-
-
-
- package com.klstudio.images {
-
- import flash.display.BitmapData;
- import flash.geom.Rectangle;
- import flash.utils.ByteArray;
-
- import com.klstudio.util.Base64;
-
- public class BitmapBytes {
-
- public static function encodeByteArray(data:BitmapData):ByteArray{
- if(data == null){
- throw new Error("data参数不能为空!");
- }
- var bytes:ByteArray = data.getPixels(data.rect);
- bytes.writeShort(data.width);
- bytes.writeShort(data.height);
- bytes.writeBoolean(data.transparent);
- bytes.compress();
- return bytes;
- }
- public static function encodeBase64(data:BitmapData):String{
- return Base64.encodeByteArray(encodeByteArray(data));
- }
-
- public static function decodeByteArray(bytes:ByteArray):BitmapData{
- if(bytes == null){
- throw new Error("bytes参数不能为空!");
- }
- bytes.uncompress();
- if(bytes.length < 6){
- throw new Error("bytes参数为无效值!");
- }
- bytes.position = bytes.length - 1;
- var transparent:Boolean = bytes.readBoolean();
- bytes.position = bytes.length - 3;
- var height:int = bytes.readShort();
- bytes.position = bytes.length - 5;
- var width:int = bytes.readShort();
- bytes.position = 0;
- var datas:ByteArray = new ByteArray();
- bytes.readBytes(datas,0,bytes.length - 5);
- var bmp:BitmapData = new BitmapData(width,height,transparent,0);
- bmp.setPixels(new Rectangle(0,0,width,height),datas);
- return bmp;
- }
-
- public static function decodeBase64(data:String):BitmapData{
- return decodeByteArray(Base64.decodeToByteArray(data));
- }
-
- public function BitmapBytes() {
- throw new Error("BitmapBytes类只是一个静态类!");
- }
-
- }
-
- }
【打包文件】:http://www.klstudio.com/demo/mxp/BitmapBytes.mxp
P.S.此转换类是有很多实用价值,我可以简单一例:你可以把常用的位图进行通过encodeBase64方法生成Base64编码字符串,作为程序的常量存储下来,如果使用的话,只需将字符串常量再通过decodeBase64还原成BitmapData位图对象就可以了!此图片存储数据的方式要比我以前写的“ IconDataManager-图标数据管理类”里面提及的图片数据压缩要更为实用和方便。至于其他应用,就有待你的发现了。