从ActionScript确定MovieClip的尺寸,以毫米为单位

时间:2013-02-25 13:42:29

标签: actionscript-3 flash

如何从ActionScript确定MovieClip的尺寸(以毫米为单位)?


例如,我有一个Flash CS6文档,其“标尺单位”是毫米,其尺寸我设置为200毫米×200毫米。

Document Settings showing width and height of 100

它的库包含一个带有AS链接HundredMmSquare的影片剪辑,它只包含一个100毫米乘100毫米的实心方块。该文档包含一个名为hundredMmSquare的实例。

我如何获得100的宽度hundredMmSquare作为我在Flash中定义的宽度?


我试图通过假设applicationDPI可用于将原始像素.width值转换为英寸来解决此问题,然后将其转换为毫米。

var pixelsPerInch = FlexGlobals.topLevelApplication.applicationDPI;
var mmPerInch = 25.4;

var width_in = hundredMmSquare.width / pixelsPerInch;
var width_mm = width_in * mmPerInch;

trace("width_mm = " + width_mm);

这没有产生预期的结果。

widthInMm = 45.24375

1 个答案:

答案 0 :(得分:0)

使用72 PPI的

Strille's suggestion产生了一个接近的结果:

var pixelsPerInch = 72;
var mmPerInch = 25.4;

var width_in = hundredMmSquare.width / pixelsPerInch;
var width_mm = width_in * mmPerInch;

trace("width_mm = " + width_mm);
width_mm = 100.54166666666667

Flash实际上不可能在SWF文件中包含精确的毫米或英寸测量值,因为格式不支持这些单位。来自SWF File Format Specification version 19

  

SWF文件格式将所有x-y坐标存储为整数,通常以称为twip的度量单位形式存储。在SWF格式中,twip是逻辑像素的1/20。

该格式还包括可以使某些控制点四舍五入到最近的像素的选项,但我不确定这是否适用于我的测试文档。

因为格式不支持毫米,所以必须进行一些舍入,正如我们在上面width_mm的值中看到的那样。现在,对于不同类型的舍入,我们期望得到什么值?

# down to nearest pixel
Math.floor(100 / 24.4 * 72) / 72 * 24.4
= 99.97222222222221

# down to nearest twip
Math.floor(100 / 24.4 * 72 * 10) / 10 / 72 * 24.4
= 99.97222222222221

# up to nearest pixel
Math.ceil(100 / 24.4 * 72) / 72 * 24.4
= 100.31111111111109

# up to nearest twip
Math.ceil(100 / 24.4 * 72 * 10) / 10 / 72 * 24.4
= 100.00611111111111

这些都不符合上述width_mm的值。也许是因为它舍入了多个控制点而不是单个width值。无论如何,由于发生舍入,原始值不可用。

我假设72是Flash应用程序中的硬编码比率。 72也恰好是我Capabilities.screenDPI的值,但这是无关紧要的:运行时的DPI无关紧要,因为我认为舍入是在导出SWF时发生的,而不是导入的。