Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么不是';在使用SWT GC绘制文本时,文本抗锯齿是否工作?_Java_Text_Swt_Antialiasing_Graphicscontext - Fatal编程技术网

Java 为什么不是';在使用SWT GC绘制文本时,文本抗锯齿是否工作?

Java 为什么不是';在使用SWT GC绘制文本时,文本抗锯齿是否工作?,java,text,swt,antialiasing,graphicscontext,Java,Text,Swt,Antialiasing,Graphicscontext,现在我的目标是在标签上添加抗锯齿文本。如果我的研究是正确的,SWT标签本机不支持文本抗锯齿,因此我当前的解决方案是创建图像,打开文本抗锯齿,将文本绘制到该图像,然后将该图像交给标签 我当前的图像绘制代码如下: Image image = new Image(Display.getDefault(), width, height); GC gc = new GC(image); gc.setAntialias(SWT.ON); gc.setTextAntialias(SWT.ON); gc.s

现在我的目标是在标签上添加抗锯齿文本。如果我的研究是正确的,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;
我在两台不同的计算机上得到了不一致的结果: 在工作中,生成的图像中的文本像以往一样起伏不平——就好像文本抗锯齿功能甚至没有启用一样。但在家里,通过远程桌面连接到我的工作电脑,我看到了我想要的结果

显然,我希望这两台电脑都能正常工作,但我目前还不明白为什么它们不能正常工作。每台计算机都运行Windows7、EclipseV3.6


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

如果无法在SWT中工作,或许可以尝试渲染到Swing图像并复制生成的像素。

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

你也可以看看这篇文章。它可能在扮演一个角色


可能这两台机器正在尝试对两种不同的字体进行反别名?它们都应该使用“Tahoma”字体。我猜这是因为这两台机器中的图形卡不同。SWT使用操作系统的本机功能,包括操作系统使用的任何硬件特权。因此,如果可能的话,我会考虑在工作中更换显卡。甚至可以查看每台机器的补丁级别,即使它们都使用Windows 7.SWT,但不使用antialias?我在不同的平台上使用过Eclipse,所有正常的平台都默认使用抗锯齿。Eclipse是否为您使用抗锯齿文本?