使用SWT GC绘制文本时,为什么文本抗锯齿不起作用?

时间:2011-01-13 20:04:13

标签: java text swt antialiasing graphicscontext

现在我的目标是在我的标签上添加消除锯齿的文字。如果我的研究是正确的,SWT Labels本身不支持对文本进行抗锯齿,因此我目前的解决方法是创建图像,打开文本消除锯齿,将文本绘制到该图像,然后将该图像提供给Label

我当前的图像绘制代码如下:

Image image = new Image(Display.getDefault(), width, height);
GC gc = new GC(image);

gc.setAntialias(SWT.ON);
gc.setTextAntialias(SWT.ON);

gc.setBackground(background);
gc.fillRectangle(0, 0, width, height);

gc.setFont(font);
gc.setForeground(foreground);

int yPos = offset.y;
for (String rawLine : lines)
{
    String line = rawLine.trim();
    Point lineSize = gc.textExtent(line);
    int xPos = offset.x;
    switch (alignment)
    {
    case SWT.RIGHT:
        xPos += width - lineSize.x;
        break;
    case SWT.CENTER:
        xPos += width / 2 - lineSize.x / 2;
        break;
    case SWT.LEFT:
    default:
        xPos += 0;
    }
    gc.drawText(line, xPos, yPos, true);
    yPos += lineSize.y;
}

gc.dispose();
return image;

我在两台不同的计算机上遇到了不一致的结果: 在工作中,生成的图像中的文本看起来像以前一样波动 - 好像文本消除锯齿甚至没有打开。但是在家里,通过远程桌面连接到我的工作电脑,我看到了我想要的结果。

显然我希望在两台计算机上都能正常工作,但我目前难以理解它们为什么不能正常工作。每台计算机都运行Windows 7,Eclipse v3.6。

导致这种不一致的问题是什么?如果我的解决方法只是荒谬而且我完全错过了一种更简单的方法,那是什么方式?谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

检查“控制面板”中两台计算机上的抗锯齿文本支持是否配置不同。在XP中,您需要确保启用ClearType。

http://www.microsoft.com/typography/cleartype/tuner/step1.aspx

您也可以查看这篇文章。它可能正在发挥作用。

http://www.ytechie.com/2008/12/cleartype-in-remote-desktop-with-xp.html

答案 1 :(得分:0)

如果你无法在SWT中使用它,也许你可以尝试渲染到Swing图像并复制结果像素。