2

MovieClipActionScript からミリメートル単位で a の寸法を決定するにはどうすればよいですか?


たとえば、「ルーラー単位」がミリメートルで、寸法が 200mm x 200mm に設定されている Flash CS6 ドキュメントがあります。

幅と高さが 100 のドキュメント設定

HundredMmSquareそのライブラリには、 100mm x 100mm の黒い四角形の AS リンケージを持つムービー クリップが含まれています。ドキュメントには、 という名前のインスタンスが 1 つ含まれています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

72 PPI を使用するという Stille の提案は、近い結果をもたらします。

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 座標が通常は 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 は my の値でもありますが、Capabilities.screenDPIこれは関係ありません。ランタイムの DPI は重要ではありません。なぜなら、SWF がインポートされたのではなく、エクスポートされたときに丸めが発生すると思うからです。

于 2013-02-25T16:11:49.333 に答える