获取图片二进制数据及其字符串进行互转
作者:
嘎嘎
2010-08-23,10:07 下午 周一
这里获取一个本地的文件图片后,显示在场景里,并且获取记录这个图片的原始二进制数据,通过这个BitmapData来获取这个图片的,貌似可以用作深度复制,不过我最近使用的是将二进制字节转码Base64字符串解码.存储的时候体积大概会增加30%左右,不过还好啦!
1.方法一
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | package cn.wjj.images { import flash.display.BitmapData; import flash.utils.ByteArray; import flash.geom.Rectangle; import mx.utils.Base64Decoder;//在Flex的包里有,可以去下一个 import mx.utils.Base64Encoder;//在Flex的包里有,可以去下一个 /** * ... * @author 嘎嘎 */ public class BitmapDataUse { /** * 将 BitmapData 转换为 String * @param avatar * @return */ public static function BitmapDataToString(avatar:BitmapData):String { if (!avatar) { return null; } var avatarBA:ByteArray = new ByteArray; avatarBA.clear(); //从BitmapData提取RGB的ByteArray字节数组 avatarBA = avatar.getPixels(avatar.rect); avatarBA.writeShort(avatar.width); avatarBA.writeShort(avatar.height); avatarBA.writeBoolean(avatar.transparent); //压缩字节数组 avatarBA.compress(); //将图像转为Base64字符串,可以生成xml信息。 var encoder:Base64Encoder = new Base64Encoder; encoder.encodeBytes(avatarBA, 0, avatarBA.length); return encoder.toString(); } /** * 将字符串反转成图像,我们可以对BitmapData进行解码 * @param string * @return */ public static function StringToBitmapData(string:String):BitmapData { if (!string) { return null; } //Base64 字符串解码 var decoder:Base64Decoder = new Base64Decoder; decoder.decode(string); //将ByteArray解码解压缩,转为BitmapData var avatarBA:ByteArray = decoder.toByteArray(); avatarBA.uncompress(); return decodeBitmapData(avatarBA); } /** * ByteArray解码为BitmapData * @param data * @return */ public static function decodeBitmapData(data:ByteArray):BitmapData { if (data.length < 6) { trace("data 参数为无效值!"); } data.position = data.length - 1; var transparent:Boolean = data.readBoolean(); data.position = data.length - 3; var height:int = data.readShort(); data.position = data.length - 5; var width:int = data.readShort(); data.position = 0; var datas:ByteArray = new ByteArray(); data.readBytes(datas, 0, data.length - 5); var bmp:BitmapData = new BitmapData(width, height, transparent, 0); bmp.setPixels(new Rectangle(0, 0, width, height), datas); return bmp; } } } |
2.方法二
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public static function ArrToBitmapData(arr:Array):BitmapData { var theBitmapData:BitmapData = new BitmapData(arr.length,arr[0].length); for (var xi:int = 0, xl:int = arr.length; xi < xl; xi++) { for (var yi:int = 0, yl:int = arr[xi].length; yi < yl; yi++) { theBitmapData.setPixel(xi,yi,arr[xi][yi]); } } return theBitmapData; } public static function BitmapDataToArr(theBitmapData:BitmapData):Array { //trace("图片尺寸 : ",theBitmapDate.width,theBitmapDate.height); var theBitInfo:Array = new Array(); var xl:int = theBitmapData.width; var yl:int = theBitmapData.height; for (var xi:int = 0; xi < xl; xi++) { theBitInfo[xi] = new Array(); for (var yi:int = 0; yi < yl; yi++) { theBitInfo[xi][yi] = theBitmapData.getPixel(xi, yi); } } return theBitInfo; } |
相关文章
分类 :
FLASH (阅览:)










评论
还没有评论呢。