2

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


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

显示宽度和高度为 100 的文档设置

它的库包含一个带有 AS 链接的电影剪辑,它只HundredMmSquare包含一个 100 毫米 x 100 毫米的黑色正方形。该文档包含一个名为hundredMmSquare.

我怎样才能获得我在 Flash 中定义100的宽度的值?hundredMmSquare


我试图通过假设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
4

1 回答 1

0

Strille使用 72 PPI 的建议产生了一个接近的结果:

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 文件格式规范版本 19

SWF 文件格式将所有 xy 坐标存储为整数,通常采用称为缇的度量单位。在 SWF 格式中,缇是逻辑像素的 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 是 Fl​​ash 应用程序中的硬编码比率。72 也恰好是 my 的值Capabilities.screenDPI,但这无关紧要:运行时的 DPI 应该无关紧要,因为我认为在导出 SWF 时发生舍入,而不是导入。

于 2013-02-25T16:11:49.333 回答