2013-08-18 32 views
1

我試圖在JLabel中使用HTML樣式並將BufferedImage轉換爲jpg。然而,顏色與我所期望的完全不同。使用HTML字符串時JLabel中顏色錯誤

下面是代碼:

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),但在這種情況下背景顏色變爲粉紅色。

enter image description here

我怎樣才能解決這個問題?

回答

3

在這種情況下背景顏色變成粉紅色。

不知道你在使用什麼JDK/JRE,但似乎在JPEGImageWriter有什麼問題,特別是它處理alpha的方式。

嘗試使用TYPE_INT_RGB的或TYPE_3BYTE_RGB代替BufferedImageTYPE_INT_ARGB作爲一種解決方法,或者可替換地寫入圖像爲PNG。

然後,使用setOpaque(true)確保背景已塗漆,並使用setBackground(Color.WHITE)設置正確的背景顏色。你應該現在有一個正確的彩色輸出圖像。

+0

我其實嘗試了其他選擇,但我不認爲TYPE_INT_RGB可以工作。現在工作正常,謝謝! –