【问题标题】:Wrong colors in JLabel when using HTML string使用 HTML 字符串时 JLabel 中的颜色错误
【发布时间】:2013-08-20 14:03:38
【问题描述】:

我正在尝试在 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),但在这种情况下背景颜色变成了粉红色。

我该如何解决这个问题?

【问题讨论】:

    标签: java swing awt bufferedimage javax.imageio


    【解决方案1】:

    在这种情况下背景颜色变成粉红色。

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

    尝试使用BufferedImageTYPE_INT_RGBTYPE_3BYTE_RGB 代替TYPE_INT_ARGB 作为解决方法,或者将图像写入PNG。

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

    【讨论】:

    • 我实际上尝试了其他选项,但我不认为 TYPE_INT_RGB 会起作用。现在可以正常使用了,谢谢!
    猜你喜欢
    • 2013-02-23
    • 2016-11-30
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 2018-04-14
    • 2012-03-02
    相关资源
    最近更新 更多