2010-01-28 43 views
4

我有一個容器與掩碼位圖。此容器的縮放比例和旋轉在運行時發生變化,我需要繪製遮罩的位圖,但無法找出合適的矩陣計算。如何準確繪製旋轉後的位圖?

我的代碼可以正確地反映位置,縮放,偏移而無需旋轉居中。旋轉時,角度正確,但定位不正確 - 我相信因爲矩形旋轉時尺寸會發生變化。

有人可以幫助我弄清楚如何爲這個在定位補償 - 這裏是一些代碼:提前

// Adjust the transformation matrix to account for the position of the container 
     var tMatrix:Matrix = _imgContainer.transform.matrix; 

     //Offset for container 
     tMatrix.translate(this.x,this.y); 

     //Offset for bounds centering 
     tMatrix.translate(-_imgContainer.width/2,-_imgContainer.height/2); 

     // Compensate for rotation 
     // ???? 

    var result_bitmap:BitmapData = new BitmapData(_maskedImg.width,_maskedImg.height,true,0x00FFFFFF); 
    result_bitmap.lock(); 
    result_bitmap.draw(_maskedImg,tMatrix,null,null,null,true); 
    result_bitmap.unlock(); 

感謝您的幫助,您可以提供 -

b

編輯: 對不起,如果我沒有正確解釋這一點,讓我再試一次圖像來支持。我在一個容器中有一個被掩蓋的位圖,我正在使用它作爲繪製新位圖的源。這個容器可以在捕獲之前由用戶在運行時縮放/旋轉。爲了實現這一點,我將基於容器矩陣的變換矩陣傳遞給繪製方法,並調整tx和ty值以考慮非零原點(由於居中)。到目前爲止,它工作正常,捕捉我期望的。

但是 - 一旦這個容器旋轉了,捕獲的位置就會再次關閉 - 由於尺寸發生變化,因此tx/ty偏移現在對於容器的新尺寸是不正確的。我只需要彌補這一點,但無法弄清楚如何。

有沒有人有經驗的轉換矩陣,可以幫助?再次感謝您的努力!

Hosted by imgur.com

Hosted by imgur.com

+0

不要以爲我明白你在做什麼試圖做到:你可以做一張照片或截圖嗎? – 2010-01-28 08:44:20

+0

用更好的解釋和2張圖片更新了這個問題以供參考 - 謝謝你的努力。 – WillyCornbread 2010-01-28 15:47:44

回答

1

僅供參考任何人可能會遇到類似問題。我通過明確地設置變換矩陣值並以此縮放,旋轉然後翻譯來解決我的問題。

這不是從容器中複製轉換矩陣。因此,而不是

var tMatrix:Matrix = _imgContainer.transform.matrix; 

我在這個順序直接設置值:

tMatrix.scale (_imgContainer.scaleX, _imgContainer.scaleY); 
tMatrix.rotate (_imgContainer.rotation * (Math.PI/180)); 
tMatrix.translate (_imgContainer.x, _imgContainer.y); 

感謝您的努力 -

b

+0

發生此問題的原因是,當您進行翻譯時,旋轉發生的位置根據該翻譯進行更改。 您在這裏使用的操作順序並不是真正的通用解決方案;相反,它是特定於用戶應用的轉換順序,您的捕獲代碼必須完全鏡像(儘管值不同)。 – Dustman 2010-02-13 02:42:27

+0

Dustman - 您聲明翻譯順序嚴格依賴於用戶轉換源位圖容器的順序不正確。無論用戶應用源的縮放比例,位置和旋轉的順序如何,上面代碼中的轉換順序始終能夠正確呈現。 -b – WillyCornbread 2010-02-13 19:54:10

0

如果位圖被包含在容器內,施加到容器的任何轉換也應當適用於包含在其內的事。

我不會對位圖應用任何轉換,我只會將它們應用於容器。

+0

所有轉換都應用於容器,我的問題具體是關於繪製位圖時的轉換矩陣以及如何補償繪製時的旋轉。 – WillyCornbread 2010-01-28 01:04:04

+0

爲什麼旋轉位圖會有什麼不同? 儘管我的頭頂,我認爲輪換是關閉了一個不同的「中心點」,所以你可能想檢查對齊 – Daniel 2010-01-28 02:19:39

+0

這個問題不是旋轉的位圖 - 當從源頭繪製一個新的位圖位圖數據,轉換(比例,旋轉等)到源不考慮。您傳入轉換矩陣來轉換源。這個轉換矩陣與源代碼旋轉時的.tx和.ty值是我遇到的問題。謝謝。 -b – WillyCornbread 2010-01-28 02:56:00

0

我不知道我已經完全明白你的問題,但它是值得什麼,如果你旋轉100×200的對象90度,它會給黑白200x100的寬度和高度。

有多種方式來解決這個問題,但我通常使用的scaleX /的scaleY,因爲它們不受旋轉和乘用者的剪輯的原始寬度/高度。

0

我沒有抓住你想要麼是100%的話,但我得到的基本問題,你已經應用了旋轉改變TX/TY你需要你的應用轉換矩陣時使用。

在此基礎上,這可能有助於:http://www.senocular.com/flash/tutorials/transformmatrix/請參閱「操縱變換矩陣」一節,特別是關於用deltaTransformPoint忽略翻譯值的部分。這是AS2,但希望這些原則可能讓你走上正軌。

+0

謝謝 - 我來看看。我回頭重寫了一些內容,看看我是否可以簡化測試用例並接近解決方案。我會更新,如果我想出來...... – WillyCornbread 2010-01-29 13:50:47