【问题标题】:Why isn't text anti-aliasing working, while using a SWT GC to draw text?为什么文本抗锯齿不起作用,而使用 SWT GC 绘制文本?
【发布时间】:2011-06-08 18:03:30
【问题描述】:

现在我的目标是在我的标签上添加抗锯齿文本。如果我的研究是正确的,SWT 标签本身不支持文本抗锯齿,所以我目前的解决方法是创建一个图像,打开文本抗锯齿,将我的文本绘制到该图像,然后将该图像提供给标签.

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

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。

导致这种不一致的问题可能是什么?如果我的解决方法很荒谬,我完全错过了一种更简单的方法,那是什么方法?感谢您的帮助!

【问题讨论】:

  • 也许这两台机器正在尝试对两种不同的字体进行抗锯齿处理?
  • 他们都应该使用“Tahoma”字体。
  • 我的猜测是因为两台机器的显卡不同。 SWT 使用操作系统的本机设施,其中包括操作系统使用的任何硬件特权。因此,如果可能的话,我会考虑在工作中更换显卡。甚至可能查看每台机器的补丁级别,即使它们都使用 Windows 7。
  • SWT 没有抗锯齿?我一直在不同平台上使用 Eclipse,所有正常的平台默认使用抗锯齿。 Eclipse 是否为您使用抗锯齿文本?

标签: java text swt antialiasing graphicscontext


【解决方案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

【讨论】:

    【解决方案2】:

    如果你不能让它在 SWT 中工作,也许你可以尝试渲染到 Swing 图像并复制生成的像素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-16
      • 2011-02-16
      • 1970-01-01
      • 2021-01-07
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      相关资源
      最近更新 更多