2012-09-25 39 views
1

我想在不顯示JLabel的情況下生成與JLabel標籤相同的文本圖像。如何生成與JLabel標籤相同的文本圖像?

我試過相同的字體,相同的繪圖方法。
但生成的圖像與JLabel不同。

我的源代碼如下。
*'super.paintComponent(g)'已被註釋掉,爲清楚起見,它是相同的方式。輸出圖像相同。
*下圖'View.paint'方法,但我也試過'SwingUtilities2.drawString'。兩個結果是一樣的。

/* Label */ 
    JLabel label = new JLabel(text) { 
     @Override 
     public void paintComponent(Graphics g) { 
      //super.paintComponent(g); 
      View v = BasicHTML.createHTMLView(this, getText()); 
      v.paint(g, new Rectangle(0, 0, getWidth(), getFontMetrics(
          getFont()).getAscent())); 
     } 
    }; 
    label.setFont(new Font("Consolas", Font.PLAIN, 13)); 

    /* Image */ 
    FontMetrics fm = label.getFontMetrics(font); 
    BufferedImage image = new BufferedImage(fm.stringWidth(text), 
       fm.getHeight(), BufferedImage.TYPE_INT_RGB); 
    Graphics2D g2d = image.createGraphics(); 
    g2d.setFont(label.getFont()); 

    // Clear background. 
    g2d.setPaint(label.getBackground()); 
    g2d.fillRect(0, 0, image.getWidth(), image.getHeight()); 

    // Draw string. 
    g2d.setClip(new Rectangle(0, 0, image.getWidth(), image.getHeight())); 
    View v = BasicHTML.createHTMLView(label, text); 
    v.paint(g2d, new Rectangle(0, 0, image.getWidth(), 
      g2d.getFontMetrics().getAscent())); 

    // ... output image to file ... 

結果圖像如下。
[JLabel的]
enter image description here
[生成的圖像]
enter image description here

生成的圖像稍薄面,相比於JLabel的捕獲。
如何生成與JLabel標籤相同的文本圖像?

謝謝您的考慮。

+1

我的rendering quality支付左右我不確定,但在這裏需要查看嗎?通過調用label.paint(g2b)不可能直接在Graphics2D上渲染標籤? –

+0

這很容易,但結果是一樣的。謝謝你的建議。 – Msyk

回答

2

我不知道,但你可能需要創建一個兼容的緩衝圖像(兼容顯示器)

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
GraphicsDevice gs = ge.getDefaultScreenDevice(); 
GraphicsConfiguration gc = gs.getDefaultConfiguration(); 

// Create an image that does not support transparency 
BufferedImage bimage = gc.createCompatibleImage(100, 100, Transparency.OPAQUE); 

這將至少讓你在親密與圖形被用來渲染屏幕

您也可能會喜歡用以及

克列奧帕特拉做了一個類似的問題後一段時間前,你可能嘗試捕捉這一

+0

感謝您的諮詢。我會搜索類似的問題並嘗試任何想法。 – Msyk

+0

我通過RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB解決了我的問題。謝謝! – Msyk

+0

我會在幾個系統上測試它,看看它在不同的顯示器上看起來有什麼不同。但是,否則王牌! – MadProgrammer

2
  • 爲什麼你使用BasicHTML.createView,如果你想擁有一樣JLabel
  • 你可以直接使用的JLabel(如果只想文字,而不是背景,設置opaquefalsebordernull
  • 或者您可以使用g2d.drawString()
+0

我正在創建軟件,即從Web瀏覽器捕獲圖像搜索文本位置。 我想通過生成相同的文本圖像嘗試搜索捕獲圖像。 JLabel顯示與瀏覽器文本相同的文本。因此我沒有使用'g2d.drawString'。我想生成JLabel的文本圖像。 – Msyk

相關問題