Flash AS3通过旋转将TextField绘制到BitmapData

时间:2011-09-21 07:09:49

标签: flash actionscript-3

我想将文本绘制到bitmapData并允许它旋转,但旋转文本会使其消失:(

我使用的代码类似于:

var tf : TextField = new TextField();
tf.text = "testing";

var mat : Matrix = new Matrix();
mat.identity();
mat.rotate(angle);
var img : BitmapData = new BitmapData(500, 500, true, 0);

img.draw(tf, mat, null, null, null, true);

如果我评论mat.rotate(角度);文字显得很好。这不是角度值,因为我可以这样做:

var tf : TextField = new TextField();
tf.text = "testing";

var mat : Matrix = new Matrix();
mat.identity();
mat.rotate(angle);
var img    : BitmapData = new BitmapData(500, 500, true, 0);
var txtImg : BitmapData = new BitmapData(500, 500, true, 0);

txtImg.draw(tf,      null, null, null, null, true);
img.   draw(txtImg , mat,  null, null, null, true);

并且文本将显示为旋转(这是此问题的解决方法,但我需要创建2个BitmapData图像并调用绘制两次,这会占用CPU和内存)。我宁愿不必进行所有这些额外的处理来获得一种效果,理论上它应该只需要一次调用draw方法。我做错了什么?

由于

1 个答案:

答案 0 :(得分:2)

你应该试试

tf.embedFonts = true;

如果您不使用嵌入字体,Flash将无法使用TextField进行任何图形处理。


来自@昨天的评论(为了更好的格式化):

对于可能有同样问题的其他人,我使用Embed标签嵌入我的字体。类似的东西:

[Embed(source='../libs/font.ttf', fontFamily='MyFont', embedAsCFF='false')] 
private const MyFont : Class; 

我打电话

Font.registerFont(MyFont); 

在使用字体之前代码中的某处。