5

我有以下代码改编自用于旋转文本的在线示例。该代码工作正常,因为它将文本旋转到正确的角度,但我想知道是否有办法提高旋转文本的准确性和清晰度。在我的显示器上,旋转的文本看起来像是“阶梯式”而不是平滑的。

PFont f;
String message = "abcdefghijklmnopqrstuvwxyz";
float theta, x;

void setup() {
  size(800, 200);
  f = createFont("Arial",20,true);
}

void draw() { 
 // background(255);
  fill(0);
  textFont(f);    // Set the font
  translate(x,height/2);  // Translate to the center
  rotate(theta);                // Rotate by theta
  textAlign(LEFT);            
  text(message,0,0);            
  theta += 0.1;                // Increase rotation
  x += textWidth(message);
  if (x>800){noLoop(); }
}

我已经通过示例进行了修改以帮助显示差异。在新代码中,我将文本更改为一串下划线,并用红色绘制了一条参考线。如果它在您的机器上运行相同,您应该会在下划线创建的黑线上看到惊人的效果。

String message = "________";
float theta, x;
PFont f;

void setup() {
  size(800, 200);
  f = loadFont("ArialMT-20.vlw");
  smooth();
}

void draw() { 
  fill(0);
  textFont(f);    // Set the font

  translate(x,height/2);  // Translate to the center
  rotate(theta);                // Rotate by theta

  text(message,0,0);

  stroke(255,0,0);
  strokeWeight(2);
  line(0,0,textWidth(message),0);

  theta += 0.1;                // Increase rotation
  x += textWidth(message);
  if (x>800){noLoop(); }
}

对我来说,它提供了以下输出,但我知道如果在 Mac 上运行这会有所不同:

在此处输入图像描述

4

2 回答 2

1

尝试调整RenderingHints

于 2012-09-20T16:20:08.520 回答
0

一种方法是在 BufferedImage 中绘制文本(未旋转),然后旋转图像。像这样的东西:

BufferedImage buff = getGraphicsConfiguration().createCompatibleImage(textWidth, textHeight); //create an image with the dimensions of the text
Graphics2D g2d = buff.createGraphics();
g2d.drawString(yourText); //draw the text without transformations
g2d.dispose();

//apply the rotation transform to g, the Graphics from your component
g.drawImage(buff, textPosX, textPosY, null); //there you go
于 2012-09-20T16:21:38.930 回答