`
sealbird
  • 浏览: 586255 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

AS获取SWF文件的宽和高!(实现如下类)

    博客分类:
  • Flex
阅读更多
主页博客相册|个人档案 |好友   查看文章    
AS获取SWF文件的宽和高!(实现如下类)2011-02-17 11:24package xzy.loadInfo{
        import flash.utils.*;
        import flash.errors.IOError;
        public class swfHanderInfo {
                protected var w_h_ruleList:Array;
                protected var _type:String;//标识
                protected var _version:uint;//版本
                protected var _size:uint;//文件大小
                protected var _width:uint;//场景宽
                protected var _height:uint;//场景高
                protected var _fps:uint;//桢频
                protected var _frames:uint;//场景上的桢数
                public function swfHanderInfo(BA:ByteArray) {
                        setWHruleList();
                        parseByteArray(BA);
                }

                protected function parseByteArray(BA:ByteArray):void {
                        var binary:ByteArray=new ByteArray;
                        binary.endian=Endian.LITTLE_ENDIAN;
                        BA.readBytes(binary,0,8);//取前8个字节,包括了是否是swf,版本号,文件大小
                        _type=binary.readUTFBytes(3);//前3个字节是SWF文件头标志,FWS表示未压缩,CWS表示压缩的SWF文件
                        _version=binary[3];//第4个字节为版本号
                        _size=binary[7]<<24|binary[6]<<16|binary[5]<<8|binary[4];//文件大小按照8765字节的顺序排列的16进制
                        //trace(_size,":size");
                        //trace(_version,":version");
                        binary.position=8;//移到第9个字节位置,从这里开始就是swf 的控制码区和宽高数据区,宽高最多占用9个字节
                        var mainData:ByteArray=new ByteArray;
                        BA.readBytes(mainData);
                        if (_type == "CWS") {//未压缩的swf标识是FWS,压缩过的swf标识是CWS
                                mainData.uncompress();//从第9个字节起用解压缩
                        } else if (_type != "FWS") {
                                //trace("..."+_type+"...")
                                throw new IOError("出错:不是swf文件!");
                        }//不是cws,也不是fws,表示不是swf文件,抛出错误!
                        binary.writeBytes(mainData,0,13);//再写13个字节,这里包括了swf的桢速/桢数
                        //当前第8个字节位为控制码
                        var ctrlCode:String=binary[8].toString(16);
                        //trace(ctrlCode,":ctrlCode");
                        var w_h_plist:Array=getW_H_RulePosition(w_h_ruleList,ctrlCode);
                        var len=w_h_plist[2];
                        //trace("宽高占用"+len+"个字节");
                        var s:String="";//存储宽高数据的相关字节码
                        for (var i=0; i < len; i++) {
                                var _temp=binary[i + 9].toString(16);
                                if (_temp.length ==1) {
                                        _temp="0" + _temp;
                                }
                                s+= _temp;

                        }
                        //trace(s);
                        _width=new Number("0x" + s.substr(w_h_plist[0][0],4)) / w_h_plist[0][1];
                        _height=new Number("0x" + s.substr(w_h_plist[1][0],4)) / w_h_plist[1][1];//相应取值得到宽高
                        trace(width,":width");
                        trace(height,":height");
                        var pos=8+len;
                        _fps=binary[pos+=2];//宽高数据区完跳一字节位置就是fps值
                        //trace(_fps,":fps");
                        _frames=binary[pos+2]<<8|binary[pos+1];//桢数占两个字节,由低位到高位组成,是不是说时间轴的最大桢数就为65535?
                        //trace(_frames,":frames");
                }
                protected function setWHruleList():void {//存储宽高的数据
                        w_h_ruleList=[];
                        w_h_ruleList[0]={ctrlCode:"50",position:[[0,10],[5,10],5]};
                        w_h_ruleList[1]={ctrlCode:"58",position:[[1,40],[6,10],6]};
                        w_h_ruleList[2]={ctrlCode:"60",position:[[1,10],[7,10],6]};
                        w_h_ruleList[3]={ctrlCode:"68",position:[[2,40],[8,10],7]};
                        w_h_ruleList[4]={ctrlCode:"70",position:[[2,10],[9,10],7]};
                        w_h_ruleList[5]={ctrlCode:"78",position:[[3,40],[10,10],8]};
                        w_h_ruleList[6]={ctrlCode:"80",position:[[3,10],[11,10],8]};
                        w_h_ruleList[7]={ctrlCode:"88",position:[[2,40],[12,10],9]};
                }
                protected function getW_H_RulePosition(list:Array,str:String):Array {
                        for (var i in list) {
                                if (list[i].ctrlCode == str) {
                                        break;
                                }
                        }
                        return list[i].position;
                }
                /**
                * Public methods
                */
                public function toString():String {
                        return "[type:" + _type + ",version:" + _version + ",size:" + _size + ",width:" + _width + ",height:" + _height + ",fps:" + _fps + ",frames:" + _frames + "]";
                }
                /**
                * Public get methods
                */
                public function get type():String {
                        return _type;
                }
                public function get version():uint {
                        return _version;
                }
                public function get size():uint {
                        return _size;
                }
                public function get width():uint {
                        return _width;
                }
                public function get height():uint {
                        return _height;
                }
                public function get fps():uint {
                        return _fps;
                }
                public function get frames():uint {
                        return _frames;
                }
        }
}

应用:

//上面这个类可以直接复制过去就能用
//然后比如你要加载的swf地址为“www.a.com/a.swf”
package 
{

        import com.ycccc.swfLoader.swfHanderInfo;
        //import xzy.loadInfo.swfHanderInfo
        import flash.events.Event;
        import flash.utils.ByteArray;
        import flash.display.Loader;
        import flash.net.URLRequest;
        import flash.net.URLLoader;
        import flash.display.MovieClip;
        import flash.display.Shape;
        import flash.net.URLLoaderDataFormat


        public class Main extends MovieClip
        {
                private var swfInfo:swfHanderInfo;
                private var urlloader:URLLoader=new URLLoader();
                private var loader:Loader=new Loader();
                public function Main()
                {
                        // constructor code
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loader_complete);
                        urlloader.dataFormat = URLLoaderDataFormat.BINARY;
                        urlloader.addEventListener(Event.COMPLETE,swf_loaded);
                        urlloader.load(new URLRequest("http://zqbbs.netsh.com/usr/12/12_191_15.swf"));
                }
                private function swf_loaded(e:Event):void
                {
                        swfInfo = new swfHanderInfo(ByteArray(urlloader.data));
                        trace("宽度:"+swfInfo.width,"高度:"+swfInfo.height);
                        loader.loadBytes(urlloader.data);
                }
                private function loader_complete(e:Event):void
                {
                        var mc:MovieClip=new MovieClip();
                        var rect:Shape=new Shape();
                        rect.graphics.beginFill(0xFFFFFF);
                        rect.graphics.drawRect(0,0,swfInfo.width,swfInfo.height);
                        rect.graphics.endFill();
                        mc.addChild(rect);
                        mc.mask = rect;
                        mc.addChild(loader);
                        addChild(mc);
                        //至于具体的位置你自己计算吧,也就是mc的位置
                }
        }

}
 


http://hi.baidu.com/sacrtap/blog/item/69abda80f61afac49023d968.html
分享到:
评论

相关推荐

    Pdf转化swf并展示源码

    PDF转换为SWF是将PDF文档转换为Flash动画文件的过程,这种转换在互联网上常见,因为SWF文件可以在网页上直接播放,无需安装PDF阅读器。这个过程涉及到多个技术领域,包括PDF处理、Flash编程以及ASP.NET服务器端开发...

    读取xml配置文件的flash导航菜单

    在这个“读取xml配置文件的flash导航菜单”项目中,开发人员创建了一个动态的Flash菜单系统,该系统能够从外部XML文件中获取其配置信息,从而实现菜单项的动态加载和更新。下面将详细解释这个技术实现的各个方面。 ...

    uploadify实现文件上传

    在IT行业中,文件上传是网页应用中不可或缺的功能之一,尤其在社交网络和云存储服务中。`uploadify`是一款基于jQuery的文件上传插件,它为开发者提供了方便、高效的文件上传解决方案。本篇文章将深入探讨如何使用`...

    as3加载xml实例

    这个例子还包含了`txt.fla`和`txt.swf`,它们分别是Flash的源文件和编译后的SWF文件,可能包含了上述代码的实现。`TxtAs.as`可能是一个ActionScript类文件,它包含了加载XML和处理数据的具体逻辑。通过查看这些文件...

    Flash as2.0代码大全与Flash制作技巧

    本文将详细介绍如何使用Flash AS2.0进行开发,包括加载SWF文件、加载文本数据、处理声音、跳转场景等关键知识点。 #### 外部调用SWF 在Flash AS2.0中,可以使用`loadMovieNum`方法来加载外部SWF文件。例如: ```...

    超强 flash as3.0解决办法

    在Flash中,可以通过更改ActionScript编译器设置来改变SWF文件的默认背景颜色。具体操作步骤如下: - 打开“Navigator”菜单。 - 选择“Properties”选项。 - 在弹出的窗口中找到“ActionScript Compiler”设置项。 ...

    swfupload多文件上传带进度条实例

    SWFUpload 是一款开源的JavaScript库,专门用于在网页上实现文件的多选上传,并且支持显示上传进度条,为用户提供更好的交互体验。在这个实例中,我们将探讨如何在VS2012环境下,使用.NET Framework 4.0开发一个基于...

    打开flash动画,源代码

    总之,C#227打开Flash动画涉及了对SWF文件格式的理解,使用第三方库如AS3CoreLib来解析文件,以及可能的自定义播放和渲染机制。随着技术的发展,这些知识更多的是作为历史参考,而不是现代开发的首选方法。

    flash as3.0 + xml + css

    这个设计利用了ActionScript 3.0(AS3)的强大功能,通过XML文件来存储新闻数据,而CSS(层叠样式表)则负责定义新闻列表的样式,以实现可定制化和易维护的界面。以下将详细讲解这些知识点。 **ActionScript 3.0 ...

    Flash As3.0 Web传递参数

    这些参数在HTML页面嵌入SWF文件时作为URL的一部分传递。例如,一个嵌入Flash的HTML代码可能如下所示: ```html &lt;param name="movie" value="myFlash.swf?param1=value1&param2=value2" /&gt; &lt;embed src="myFlash....

    C#/.NET uploadify/js跨域异步上传文件,上传文件项目用mvc做,支持多文件上传

    swf: '/js/test/uploadify.swf', // SWF文件路径 uploader: 'http://www.vincce.com/Home/UploadFile', // 上传地址 width: 120, removeTimeout: 1, 'onUploadSuccess': function(file, data, response) { // ...

    加载解析xml数据 actionscript3.0

    4. `index.swf`:编译后的SWF文件,是最终运行的Flash应用程序。 5. `xml`:这是要加载的XML文件,包含了要解析的数据。 在AS3中,我们可以使用`flash.net.URLLoader`类来加载XML文件,`flash.xml.XML`类来处理解析...

    .net jQuery上传插件Uploadify 文件 上传 实例,简单易懂

    Uploadify是一款基于JavaScript和Flash的文件上传组件,它允许用户通过拖拽或选择文件的方式,实现多文件同时上传,具有进度条显示、自定义样式、错误提示等丰富的功能,极大地提升了用户体验。 首先,我们来深入...

    AS3及Flex的百条常用知识.pdf

    为了更改SWF文件的基本属性(如背景颜色),可以在项目的编译设置中进行调整。具体步骤如下:打开“Navigator”窗口,右键点击你的项目,选择“Properties”,然后进入“ActionScript Compiler”选项卡,在...

    JavaScript中使用webuploader实现上传视频功能(demo)

    在Web开发中,实现文件上传功能是一种常见的需求,特别是上传视频文件,这类文件往往体积较大且格式多样,所以在实现上传功能时需要考虑到文件大小、格式校验等多方面的因素。本文将围绕JavaScript中使用WebUploader...

    Flash时钟

    AS可以通过`Date`类获取当前系统时间,并使用`getHours()`、`getMinutes()`和`getSeconds()`方法来获取小时、分钟和秒。然后,这些值会被转换为角度,因为Flash中的图形通常是通过角度旋转来模拟实际运动的。例如,...

    关于Flex及AS3的百多条小小知识第1/2页

    为了更改输出的SWF文件中的背景颜色、尺度或帧频等属性,可以通过调整项目的“ActionScript Compiler”设置来实现。具体步骤如下: 1. 在“Navigator”窗口中右键点击项目。 2. 选择“Properties”。 3. 进入...

    flash+xml的3D效果焦点图代码

    7. 发布和嵌入:最后,将Flash项目导出为SWF文件,将其嵌入到网页中,并确保XML数据文件与SWF文件在同一目录下,以便于加载。 以上就是关于“flash+xml的3D效果焦点图代码”的基本知识介绍。这个技术组合不仅可以...

    Flash CS3 中fl.*类库在 FB 中如何使用

    `library.swf`是一个包含预编译AS3类的SWF文件,这些类就是fl.*类库的一部分。`catalog.xml`则是元数据文件,它记录了`library.swf`中的类信息,包括类名、依赖关系等,方便IDE(如FlexBuilder)进行索引和识别。 ...

Global site tag (gtag.js) - Google Analytics