获取图片二进制数据及其字符串进行互转

作者: 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 (阅览:) Tags :

评论

还没有评论呢。


留下评论


|:victory:| |:tongue:| |:titter:| |:time:| |:sweat:| |:smile:| |:shy:| |:shocked:| |:sad:| |:mad:| |:lol:| |:kiss:| |:hug:| |:huffy:| |:handshake:| |:cry:| |:call:| |:biggrin:|