2013-02-25 29 views
2

確定一個影片剪輯的尺寸以毫米爲單位如何確定在從ActionScript毫米MovieClip的尺寸是多少?從ActionScript


例如,我有一個Flash CS6文檔,其中的「標尺單位」是毫米,其尺寸設置爲200mm×200mm。

Document Settings showing width and height of 100

它的庫包含與AS聯動HundredMmSquare,剛剛由固體百毫米乘100mm黑色方形的影片剪輯。該文檔包含一個名爲hundredMmSquare的實例。

我怎樣才能得到與hundredMmSquare寬度值100,正如我在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

我認爲45.25可能是正確的。請注意您的廣場仍然是100 _pixels_ x 100 _pixels_(我從您的屏幕截圖中看到了這一點)。標尺影響Flash設計UI中的參考對齊,但不會改變Flash從根本上使用像素的事實。將UI的實例添加到UI中的舞臺上,您可能會看到它填充了100個像素 - 並且該舞臺是442像素的正方形。 – 2013-02-25 13:51:35

+0

@JoshuaHonig感謝您的期待。我添加了第二個屏幕截圖,以顯示文檔與您所描述的內容不完全相符。實例的寬度和高度在舞臺上也被列爲「100」,但您可以直觀地看到它填充了200mm文檔的一半高度和一半寬度。這似乎表明實例的「100」寬度是毫米的度量,而不是像素。 – 2013-02-25 13:59:26

+0

你的縮放值是66% – 2013-02-25 15:05:20

回答

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時發生的,而不是導入的。

+0

我從來沒有在res 72dpi屏幕上工作,但我建議導入'flash.system.Capabilities;'並定義'var pixelsPerInch = Capabilities.screenDPI;'。 – chadiik 2013-02-25 16:45:28

+1

@Chadyk我不確定,但我傾向於認爲在Flash導出期間發生像素舍入,而不是在運行時,所以這種行爲不應該在運行時基於PPI進行更改。 (在編輯器中使用的毫米數量似乎比包含在SWF中的毫米數量要多,但在導入SWF時會舍入到毫米,但我可能是錯的,並且沒有辦法檢查SWF來驗證。) – 2013-02-25 16:57:35