【问题标题】:AS3: How can I get the top-left and exact width and height of some text in a text field?AS3:如何获取文本字段中某些文本的左上角和精确宽度和高度?
【发布时间】:2012-03-24 16:31:46
【问题描述】:

我们正在尝试获取一个Rectangle,它代表TextField 中文本的确切*边界。

**尽可能精确。*

拍下这张照片:

使用我目前的知识,我可以像这样检索上面的 蓝色 矩形:

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

但是,我们需要尽可能接近 红色 矩形(我意识到会有细微的差异,因为字符随/高度而变化,并且需要有一个共同点)。

如何(动态)获得红色矩形?


我根据 Jacob Eggers 下面的回答设置了这个帮助类,但是我总是得到(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);

【问题讨论】:

标签: actionscript-3 textfield


【解决方案1】:

试试这个,虽然不完美:

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

或者试试这个(有一个例子你可以试试):

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

【讨论】:

  • 好主意,虽然 getBounds() 返回一个代表整个 TextField 的 Rectangle(甚至比上面的蓝色矩形还要大)。
【解决方案2】:

使用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);

edit 很好地了解文本颜色。我添加了一条评论来澄清。

【讨论】:

  • 这是一个非常聪明的解决方案。
  • 我试了一下,但我总是得到一个大小为 0 的矩形。我已经在我的问题的更新中发布了我的代码 - 有什么明显的错误吗?我还在舞台上添加了生成的 BitmapData 的位图表示,它看起来符合预期(上面有我的文本的绿色块)。
  • 我在你的新问题上发布了一个解决方案。
  • 你也可以使用paletteMap()
  • 确保您在 var color:uint 中使用的颜色是文本的颜色。如果不这样做,您将得到没有尺寸的矩形。
猜你喜欢
  • 2011-11-10
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 2020-01-13
  • 1970-01-01
  • 2019-12-14
  • 2012-05-31
相关资源
最近更新 更多