Неправильные цвета в JLabel при использовании строки HTML

Я пытаюсь использовать стили HTML в JLabel и преобразовать 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), но в этом случае цвет фона стал розовым.

введите описание изображения здесь

Как я могу исправить эту проблему?


person burak emre    schedule 18.08.2013    source источник


Ответы (1)


цвет фона в этом случае станет розовым.

Не уверен, какой JDK / JRE вы используете, но похоже, что с JPEGImageWriter что-то не так, особенно с тем, как он обрабатывает альфа-канал.

Попробуйте использовать BufferedImage из TYPE_INT_RGB или TYPE_3BYTE_RGB вместо TYPE_INT_ARGB в качестве обходного пути или, в качестве альтернативы, запишите изображение как PNG.

Затем используйте setOpaque(true), чтобы убедиться, что фон закрашен, и setBackground(Color.WHITE), чтобы установить правильный цвет фона. Теперь у вас должно быть правильно окрашенное выходное изображение.

person Harald K    schedule 18.08.2013
comment
Я действительно пробовал другие варианты, но не мог подумать, что TYPE_INT_RGB сработает. Теперь все работает нормально, спасибо! - person burak emre; 18.08.2013