我正在尝试在JLabel中使用HTML样式并将BufferedImage转换为jpg。然而,颜色与我的预期完全不同。
以下是代码:
val html = "<html><body style='width: 400px; padding: 5px; margin:0; color:#000;'>" + "<h1>teststring1</h1>" + key + " <h2>teststring</h2><body></html>"
val textLabe = new JLabel(html)
textLabe.setSize(textLabe.getPreferredSize)
val d: Dimension = textLabe.getPreferredSize
val bi: BufferedImage = new BufferedImage(d.width, d.height, BufferedImage.TYPE_INT_ARGB)
val g = bi.createGraphics
textLabe.paint(g)
val a = new ByteArrayOutputStream()
ImageIO.write(bi, "jpg", a)
正如您所看到的,文字颜色不是黑色,背景是黑色而不是白色。我尝试设置setForeground(Colors.white),setBackground(Colors.white)和setOpaque(true),但在这种情况下背景颜色变为粉红色。
如何解决此问题?
答案 0 :(得分:3)
在这种情况下背景颜色变成粉红色。
不确定您使用的是什么JDK / JRE,但JPEGImageWriter
似乎有问题,特别是它处理alpha的方式。
尝试使用BufferedImage
TYPE_INT_RGB
或TYPE_3BYTE_RGB
代替TYPE_INT_ARGB
作为解决方法,或者将图像写为PNG。
然后,使用setOpaque(true)
确保背景被绘制,并setBackground(Color.WHITE)
设置正确的背景颜色。你 现在应该有一个正确着色的输出图像。