2012-03-07 89 views
4

我們正試圖獲得代表TextField中文本的確切邊界的RectangleAS3:如何獲得文本字段中某些文本的左上角和精確寬度和高度?

**精確地*

採取這一形象:

enter image description here

使用我目前的知識,我可以檢索藍色矩形上方,像這樣:

var textRect:Rectangle = new Rectangle(
    field.x, 
    field.y, 
    field.textWidth, 
    field.textHeight 
); 

但是,我們需要儘可能接近紅色矩形(我認識到會有細微的差異,因爲角色隨高度而變化,需要有共同點)。

我怎樣才能得到紅色矩形(動態)?


我成立這個助手類基於下面的答案雅各埃格斯,但我總是得到的(x=0, y=0, w=0, h=0)結果..

package 
{ 
    import flash.display.BitmapData; 
    import flash.text.TextField; 
    import flash.geom.Rectangle; 

    public class TextBounds 
    { 

     public static function getTextBounds(textField:TextField):Rectangle 
     { 
      var curtainColor:uint = 0x00FF00; 
      var bmd:BitmapData = new BitmapData(textField.width, textField.height, false, curtainColor); 
      bmd.draw(textField); 

      return bmd.getColorBoundsRect(curtainColor, textField.textColor, true); 
     } 

    } 
} 

即使我填一小部分與我的色彩在尋找我仍然得到一個零大小的矩形:

bmd.fillRect(new Rectangle(0, 0, 30, 30), textField.textColor); 
+0

你看過嗎? :http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/text/TextField.html#getCharBoundaries() – OXMO456 2012-03-08 09:04:02

+0

@MartyWallace,如果Jacob Eggers在下面發佈的解決方案不能解決發佈的問題,請將其標記爲問題的答案,因爲這會誤導。 – 2013-08-25 17:36:10

回答

5

使用的BitmapData.draw,然後用getColorBoundsRect可以得到黑色文本的邊界。 事情是這樣的:

import flash.display.Bitmap; 
import flash.display.BitmapData; 

var bmd:BitmapData = new BitmapData(80, 40, false, 0xFFFFFF); 
bmd.draw(tf) 

var maskColor:uint = 0xFFFFFF; 
var color:uint = 0x000000; //the color of the text 
var tfBounds:Rectangle = bmd.getColorBoundsRect(maskColor, color, true); 
trace(tfBounds); 

編輯有關的文本顏色良好的抓zachzurn。我添加了一條評論來澄清。

+1

這是一個非常聰明的解決方案。 – redhotvengeance 2012-03-07 06:09:55

+0

我給了這個嘗試,但我總是得到一個大小爲0的矩形。我在我的問題的更新中發佈了我的代碼 - 是否有任何明顯錯誤?我還將生成的BitmapData的位圖表示添加到舞臺上,並且看起來和預期的一樣(帶有我的文本的綠色塊)。 – Marty 2012-03-07 06:26:15

+0

我在你的新問題上發佈了一個解決方案。 – 2012-03-07 07:28:40

1

試試這個,雖然不會是完美的:

var textRect:Rectangle = field.getBounds(field.parent); 

或者試試這個(有一個例子那裏,你可以嘗試一下):

http://blog.stroep.nl/2009/11/getbitmapbounds/

+0

不錯的想法,儘管'getBounds()'返回一個Rectangle,代表整個TextField(甚至比上面的藍色矩形更大)。 – Marty 2012-03-07 06:07:30

相關問題