编辑 文章分类:Flash编程 作者:Seven_Yuan 来源:博客园 发布时间:2010-04-28 18:13 阅读:500 次 原文链接 [收藏] 转自:http://www.wwswf.com/?p=897 swf头中的Rect结构是按照位进行存储的,而不是字节,因为存储的值是跨字节的,而且存储的单位是twip,相当于二十分之一像素。 Rect结构中包含四个信息,按照顺序依次为:Xmin、Xmax、Ymin、Ymax,分别表示 X,Y轴方向上的最小和最大值。 Rect中前五位表示一个长度信息n,就是其中要存储的四个值所占用的长度,即从第六位开始,第一个n位表示Xmin,第二个n位表示Xmax,依次类推,直到取到存储的4个值,字节未用完的部分补0。 举个例子: swf的头如下所示: PLAIN TEXT JAVA: 46 57 53 0A 4C 15 00 00 78 00 05 5F 00 00 0F A0 00 00 12 01 00 44 11 18 00 00 00 7F 13 04 05 00 开始3个字节为FWS,0A为10,表示版本号,“4C 15 00 00 ”为文件大小,从"78"开始即可读Rect结构。 “78”的二进制代码为:01111000,前5位就是01111,十进制值为15,就是说从第六位开始,每隔15位表示一个swf尺寸值。 “78 00 05 5F 00 00 0F A0”用二进制表示为: PLAIN TEXT JAVA: 01111 000000000000000 010101011111000 000000000000000 00111110100000 那么000000000000000 十进制为0,表示Xmin,010101011111000十进制值为11000,换算成像素为550,表示Xmax,最后面的00111110100000只有14位,比15位少了一位,所以需要从后面一个字节拿一位过来,后面的字节16进制值为00,二进制值为00000000,被借了一位,那么剩余的7位都废了,即属于补0部分,至此Rect结构就结束了。 之后的00 12表示帧率,由于swf是反序存入的,所以应该按照12 00转换为十进制,即为4608,4608/256=18(因为低8位是小数,所以需要除以2的8次方),swf的帧率即为18. 再之后两位是01 00,反序之后十进制即为1,swf总帧数为1.
详细解决方案
解析SWF资料头中的Rect结构
热度:88 发布时间:2012-10-07 17:28:51.0
相关解决方案
- Draw rect and round with google 地图
- 怎么实现局部刷新?小弟我用了invalidate(Rect dirty)还是全局刷新。
- Round Rect Button 爲什麽不能設置 Set to Back,该如何解决
- android Draw Rect 座标图示
- 圆形精灵在Python中创建'Player'对象没有属性'rect'错误
- Unity UGUI RectTransform.rect.size 和 RectTransform.sizeDelta 的区别
- 20161020测试T2 解题报告(8)——rect
- OpenCV的常用类:Scalar、Vec、Point、Size、Rect、RotatedRect、Ptr
- opencv 中的waitkey(),Point,Rect