如何从ActionScript确定MovieClip
的尺寸(以毫米为单位)?
例如,我有一个Flash CS6文档,其“标尺单位”是毫米,其尺寸我设置为200毫米×200毫米。
它的库包含一个带有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
答案 0 :(得分:0)
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时发生的,而不是导入的。