注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的博客

 
 
 

日志

 
 
关于我

风流茶说合,酒是色媒人,古往今来,浪涛依旧,我辈今朝,叱咤风云,

网易考拉推荐

用as3实现图片数据保存  

2009-12-17 16:26:26|  分类: flex |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    package
{
        import flash.geom.*;
        import flash.display.*;
        import flash.utils.*;
        public class PNGEncoder
        {

            public static function encode(img:BitmapData):ByteArray {
                // Create output byte array
                var png:ByteArray = new ByteArray();
                // Write PNG signature
                png.writeUnsignedInt(0x89504e47);
                png.writeUnsignedInt(0x0D0A1A0A);
                // Build IHDR chunk
                var IHDR:ByteArray = new ByteArray();
                IHDR.writeInt(img.width);
                IHDR.writeInt(img.height);
                IHDR.writeUnsignedInt(0x08060000); // 32bit RGBA
                IHDR.writeByte(0);
                writeChunk(png,0x49484452,IHDR);
                // Build IDAT chunk
                var IDAT:ByteArray= new ByteArray();
                for(var i:int=0;i < img.height;i++) {
                    // no filter
                    IDAT.writeByte(0);
                    var p:uint;
                    if ( !img.transparent ) {
                        for(var j:int=0;j < img.width;j++) {
                            p = img.getPixel(j,i);
                            IDAT.writeUnsignedInt(
                                uint(((p&0xFFFFFF) << 8)|0xFF));
                        }
                    } else {
                        for(var k:int=0;k < img.width;k++) {
                            p = img.getPixel32(k,i);
                            IDAT.writeUnsignedInt(
                                uint(((p&0xFFFFFF) << 8)|(p >>> 24)));
                        }
                    }
                }
                IDAT.compress();
                writeChunk(png,0x49444154,IDAT);
                // Build IEND chunk
                writeChunk(png,0x49454E44,null);
                // return PNG
                return png;
            }

            private static var crcTable:Array;
            private static var crcTableComputed:Boolean = false;

            private static function writeChunk(png:ByteArray,
                    type:uint, data:ByteArray) {
                if (!crcTableComputed) {
                    crcTableComputed = true;
                    crcTable = [];
                    for (var n:uint = 0; n < 256; n++) {
                        var c_1:uint = n;
                        for (var k:uint = 0; k < 8; k++) {
                            if (c_1 & 1) {
                                c_1 = uint(uint(0xedb88320) ^
                                    uint(c_1 >>> 1));
                            } else {
                                c_1 = uint(c_1 >>> 1);
                            }
                        }
                        crcTable[n] = c_1;
                    }
                }
                var len:uint = 0;
                if (data != null) {
                    len = data.length;
                }
                png.writeUnsignedInt(len);
                var p:uint = png.position;
                png.writeUnsignedInt(type);
                if ( data != null ) {
                    png.writeBytes(data);
                }
                var e:uint = png.position;
                png.position = p;
                var c:uint = 0xffffffff;
                for (var i:int = 0; i < (e-p); i++) {
                    c = uint(crcTable[
                        (c ^ png.readUnsignedByte()) &
                        uint(0xff)] ^ uint(c >>> 8));
                }
                c = uint(c^uint(0xffffffff));
                png.position = e;
                png.writeUnsignedInt(c);
            }
        }
}


swf的代码:

 程序代码
var url:String = "savePic.asp";

var bpd:BitmapData = new BitmapData(a_mc.width, a_mc.height);
bpd.draw(a_mc);
var dat:ByteArray = PNGEncoder.encode(bpd);


var request:URLRequest = new URLRequest(url);
request.contentType = "application/octet-stream";
request.data = dat;
request.method = URLRequestMethod.POST;
var loader:URLLoader = new URLLoader();
loader.dataFormat=URLLoaderDataFormat.BINARY;
try {
    loader.load(request);
} catch (error:ArgumentError) {
    trace("An ArgumentError has occurred.");
} catch (error:SecurityError) {
    trace("A SecurityError has occurred.");
}

 


文章来自: 闪客居(www.flashas.net) 详文参考:http://www.flashas.net/asbc/20080807/3555.html

  评论这张
 
阅读(84)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017