2012-03-07 46 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

相关问题