Java 使用HTML字符串时JLabel中的颜色错误

Java 使用HTML字符串时JLabel中的颜色错误,java,swing,awt,bufferedimage,javax.imageio,Java,Swing,Awt,Bufferedimage,Javax.imageio,我试图在JLabel中使用HTML样式,并将BuffereImage转换为jpg。然而,颜色与我预期的大不相同 代码如下: val html = "<html><body style='width: 400px; padding: 5px; margin:0; color:#000;'>" + "<h1>teststring1</h1>" + key + " <h2>teststring</h2><body>&l

我试图在JLabel中使用HTML样式,并将BuffereImage转换为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)
val html=”“+“teststring1”+键+“teststring”
val textlab=new JLabel(html)
textlab.setSize(textlab.getPreferredSize)
val d:Dimension=textlab.getPreferredSize
val bi:BufferedImage=新的BufferedImage(d.WITH、d.height、BufferedImage.TYPE_INT_ARGB)
val g=bi.createGraphics
文本标签油漆(g)
val a=新的ByteArrayOutputStream()
ImageIO.write(bi,“jpg”,a)
正如您所看到的,文本颜色不是黑色,背景是黑色而不是白色。我试图设置setForeground(Colors.white)、setBackground(Colors.white)和setOpaque(true),但在本例中背景色变成粉红色

我如何解决这个问题

在这种情况下,背景色将变为粉红色

不确定您使用的是什么JDK/JRE,但JPEGImageWriter似乎有问题,特别是它处理alpha的方式

尝试使用
TYPE_INT_RGB
TYPE_3BYTE_RGB
buffereImage
而不是
TYPE_INT_ARGB
作为解决方法,或者将图像作为PNG写入


然后,使用
setOpaque(true)
确保已绘制背景,并使用
setBackground(Color.WHITE)
设置正确的背景颜色。您现在应该有一个正确颜色的输出图像。

我实际上尝试了其他选项,但我认为那种类型的\u INT\u RGB不起作用。现在很好,谢谢!