2011-01-13 53 views
6

現在我的目標是在我的標籤上使用反鋸齒文字。如果我的研究是正確的,SWT標籤本身不支持文本上的抗鋸齒,所以我目前的解決方法是嘗試創建一個圖像,打開文本消除鋸齒,將文本繪製到該圖像,然後將該圖像提供給標籤。使用SWT GC繪製文本時,爲什麼文本抗鋸齒工作不正常?

我當前圖像的繪製代碼如下:

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; 

我曾在兩個不同的計算機上不一致的結果: 在工作中,所產生的圖像的文本顯示爲ever-彷彿文本作爲防震盪 - 平滑甚至沒有。但在家裏,通過遠程桌面連接到我的工作電腦,我看到了我想要的結果。

很顯然,我希望事情能夠在兩臺計算機上正常工作,但我目前難以理解它們爲什麼不是。每臺電腦都運行Windows 7,Eclipse v3.6。

可能是導致這種不一致的問題?如果我的解決方法是荒謬的,我完全錯過了一個更簡單的方法,那是什麼方式?感謝您的任何幫助!

+0

也許兩臺機器正在試圖消除鋸齒兩種不同的字體? – MusiGenesis 2011-01-13 20:09:31

+0

他們都應該使用「Tahoma」字體。 – Dylan 2011-01-13 20:39:07

回答

0

如果你不能在SWT中工作,也許你可以嘗試渲染一個Swing圖像並複製結果像素。