2012-09-25 44 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

相关问题