【问题标题】:How to obtain bounding box of transformed text(java)?如何获得转换后的文本(java)的边界框?
【发布时间】:2011-03-21 21:14:54
【问题描述】:

目前我有一个需要确定其边界的文本对象。我曾经使用图形对象来获取我要绘制的文本的字体度量,但是由于我添加了旋转对象的功能(可能还有更多),我需要一种更好的方法来获取该对象的边界。我已经看过多个地方,但到目前为止还没有什么对我有用。这是我最近的尝试:

//This is the bounding box edges 0: left, 1: right 2: top 3: bottom  
int toReturn[] = new int[4];
//this.transform is the AffineTransform for the text Object(currently only
//rotated)
FontRenderContext frc = new FontRenderContext(this.transform,true,false);
TextLayout tl = new TextLayout(this.typedText,this.font,frc);
Rectangle2D bb = tl.getBounds();
toReturn[0] = (int)(bb.getX());
toReturn[1] = (int)(bb.getX()+bb.getWidth());
toReturn[2] = (int)(bb.getY());
toReturn[3] = (int)(bb.getY()+bb.getHeight());

这是获取转换后文本边界框的正确方法吗?

【问题讨论】:

  • 重新格式化的代码;如果不正确,请恢复。

标签: java user-interface swing text bounding-box


【解决方案1】:

不,提供给FontRenderContextAffineTransform“用于将印刷点缩放到此 FontRenderContext 中的像素。”您应该可以在边界上使用createTransformedShape() 以获得您想要的结果。

【讨论】:

  • 感谢您的回复(和编辑),我不确定如何在此回复中再次格式化我的代码,所以我很抱歉,但如果我理解正确,这就是您的意思:形状形状 = transform.createTransformedShape("一些形状");我现在唯一的问题是该方法将提供什么形状? tl.getBounds()?
  • @heater:是的,tl.getBounds()font.getStringBounds();非常方便contains() 测试。如果您自己需要转换后的坐标,请使用AffineTRansformtransform() 方法之一。顺便说一句,对内联代码使用反引号;代码清单缩进四。
  • 感谢内嵌代码的快速响应和信息,这似乎可以按我的意愿工作:)
  • @heater:很高兴为您提供帮助。您还可以单击任何“已编辑 n units 前”链接来查看有趣的效果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多