2011-07-03 50 views
2

我需要在Java中模擬С#的字體繪圖。其結果是:在c#和Java中字體的等效外觀

Graphics g =this.CreateGraphics(); 
    Font f = new Font("Courier New", 24, FontStyle.Regular, GraphicsUnit.Document); 
    g.FillRectangle(new SolidBrush(Color.White),0,0,400,400); 
    g.DrawLine(new Pen(Color.Black), 0, 100, 200, 100); 
    g.DrawString("Hey go!", f, new SolidBrush(Color.Black), 0, 100); 

我已經重新計算字體大小但Java的字體看起來有點destorted。

  Font f = new Font("Courier New", Font.PLAIN, 24 * 120/300).deriveFont((float) (24 * 120./300.)); 
      FontRenderContext fontRenderContext = new FontRenderContext(null, false, true); 
      TextLayout textLayout = new TextLayout("Hey go!", f, fontRenderContext); 
      Graphics graphics = contentPane.getGraphics(); 
      graphics.setColor(new Color(255, 255, 255)); 
      graphics.fillRect(0, 0, 400, 400); 
      graphics.setColor(new Color(0, 0, 0)); 
      graphics.drawLine(0, 100, 200, 100); 
      graphics.setFont(f); 
      Color c = new Color(0, 0, 0); 
      graphics.setColor(c); 
      textLayout.draw((Graphics2D) graphics, 0, 100); 

我能做些什麼,使輸出看起來是一樣的? PS:我已經更新了代碼,因爲我發現了一個錯誤。 右鍵單擊圖像以在瀏覽器中查看它們的像素到像素。

+0

您是否在系統上使用大字體? (我猜是基於標題欄中超大的「X」圖標;上一次我看到它們變得格格不入時,就是在使用Large Fonts的系統上。這些似乎破壞了很多程序中的脆弱假設......) – sarnold

+0

我是使用大字體。切換到標準並不能解決問題,雖然改變了C#的外觀。 –

+0

現在,更改底部圖像看起來像關閉了抗鋸齒。 – Howard

回答

1

這只是你呈現文本兩次有一些小的差異。

textLayout.draw((Graphics2D) graphics, 0, 100); 
graphics.drawString("Hey go!", 0, 100); 

您第一次使用TextLayout並第二次直接繪製字符串。 TextLayout使用fractionalMetrics,如drawString方法不包含的構造函數中的最後一個參數所指定的那樣。

因此,您用不同的設置繪製了兩次字符串,結果是字符串顯示了這個微弱的陰影。

刪除第二個電話drawString,選擇你是否喜歡fractionalMetrics或不,你會很好。

​​

+0

謝謝,我已經找到了。但像素到像素等效性的問題呈現:( –