我希望生成与JLabel标签相同的文本图像,而不显示JLabel。
我尝试了相同的Font,相同的绘图方法
但生成的图像与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的]
[生成的图像]
与JLabel的捕获相比,生成的图像略微变薄
如何生成与JLabel标签相同的文本图像?
谢谢您的考虑。
答案 0 :(得分:2)
BasicHTML.createView
相同,为什么要使用JLabel
?JLabel
(如果您只想要文字而非背景,请将opaque
设为false
,将border
设为null
)g2d.drawString()
答案 1 :(得分: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);
这至少可以让您在用于渲染到屏幕的图形时结束
您可能还想使用rendering quality付费
Kleopatra在一段时间前就类似的问题发了一篇文章,你可能会尝试追捕它