Matrix swf文件中的定点位值是如何工作的?

Matrix swf文件中的定点位值是如何工作的?,matrix,flash,fixed,point,bits,Matrix,Flash,Fixed,Point,Bits,SWF文件格式规范版本19表示矩阵记录中的比例值存储为FB,规范中的其他地方表示FB是32位16.16定点值,但有一个值,它使用多少位来存储该值,在示例中,它是3.16值,而不是16.16值 它怎么能同时是32位16.16值和19位3.16值 Flash Player如何知道它是3.16、4.15、5.14、X.X值 FB的具体格式是什么 我想知道这一点,因为我想在已编译的SWF文件中插入一个精灵。我已经成功地在那个精灵中使用过PlaceObject标记,但现在我有一个图像必须缩小,这也在矩

SWF文件格式规范版本19表示矩阵记录中的比例值存储为FB,规范中的其他地方表示FB是32位16.16定点值,但有一个值,它使用多少位来存储该值,在示例中,它是3.16值,而不是16.16值

  • 它怎么能同时是32位16.16值和19位3.16值
  • Flash Player如何知道它是3.16、4.15、5.14、X.X值
  • FB的具体格式是什么
我想知道这一点,因为我想在已编译的SWF文件中插入一个精灵。我已经成功地在那个精灵中使用过PlaceObject标记,但现在我有一个图像必须缩小,这也在矩阵记录中完成,但首先我不需要FB,因为另一个图像已经处于正确的比例

编辑: 我将尝试明天是否可以更快地使用Sothink SWF制作新的精灵,如果不行,我将尝试使用Adobe Flash CS 6制作一个包含精灵的简单SWF文件,然后将DefineSprite标记复制到另一个SWF文件中。如果有人回答,我会先尝试使用十六进制编辑器进行缩放,然后再使用Sothink SWF更快地进行缩放

编辑2: 当我尝试导入SWF文件时,Sothink SWF会更快崩溃。如果从我要创建的SWF文件复制标记不起作用,我将删除要使用PlaceObject标记放置的图像,然后按比例重新插入它

编辑3:
我不知道如何让Flash使用DefineSprite标记,因此我添加了一个DefineBitsLossless2标记,并将图像缩小,我将在sprite中使用此图像。我现在不再需要FB了,但知道它们是如何工作的还是很好的,所以如果有人知道,请回答。

矩阵记录是这样开始的:

HasScale    UB[1]
NScaleBits  If HasScale=1, UB[5]
ScaleX      If HasScale=1, FB[NScaleBits]
ScaleY      If HasScale=1, FB[NScaleBits]
...
FB[NScaleBits]确实是一个定点值,但不一定是16.16——这都归结为NScaleBits(因此它不同于通常的定点值,它总是16.16)

使用的位数是固定的或预先指定的,就像矩阵的情况一样,所以Flash播放器就知道了

例如,如果在dex中为0x28000,则为2.8,在这种情况下,NScaleBits为19,因为我们至少需要3位来表示带符号的数字“2”(3+16=19)

我知道这是个老问题。
尽管如此,有人可能会像我一样偶然发现它。

矩阵记录是这样开始的:

HasScale    UB[1]
NScaleBits  If HasScale=1, UB[5]
ScaleX      If HasScale=1, FB[NScaleBits]
ScaleY      If HasScale=1, FB[NScaleBits]
...
FB[NScaleBits]确实是一个定点值,但不一定是16.16——这都归结为NScaleBits(因此它不同于通常的定点值,它总是16.16)

使用的位数是固定的或预先指定的,就像矩阵的情况一样,所以Flash播放器就知道了

例如,如果在dex中为0x28000,则为2.8,在这种情况下,NScaleBits为19,因为我们至少需要3位来表示带符号的数字“2”(3+16=19)

我知道这是个老问题。
尽管如此,有人可能会像我一样偶然发现它。

我很久以前就知道它是如何工作的,但我还是接受了它,因为这是一个好答案。我很久以前就知道它是如何工作的,但我还是接受了它,因为它是一个好答案。