2009-10-16 32 views
2

我將JPanel的背景顏色設置爲白色。但是,當我將它保存爲JPG或其他圖像格式時,背景爲黑色。我已經把這個代碼TYPE_INT_ARGB,但它不起作用。我怎樣才能將背景設置爲其他顏色?例如藍色,白色等當我將圖像保存爲JPG格式時,爲什麼會出現黑色背景?

public void paintComponent(Graphics g) { 
     int width = getWidth(); 
     int height = getHeight(); 

     // Create a buffered image in which to draw 
     BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 

     // Create a graphics contents on the buffered image 
     Graphics2D g2d = bufferedImage.createGraphics();  
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     g2d.setStroke(new BasicStroke(1)); // set the thickness of polygon line 
     g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.00f)); 
     g2d.setPaint(Color.black);//color of the polygon line 
     g2d.setBackground(Color.WHITE); 

     //draw polygon 
     for (Polygon triangle : triangles) 
     g2d.drawPolygon(triangle); 

     try { 
      File file = new File("newimage.jpg"); 
      ImageIO.write(bufferedImage, "jpg", file); 
     } catch (IOException e) { 
     }   
}//public void paint(Graphics g) 
+0

使用帶'JPEG的'TYPE_INT_ARGB'沒什麼意義。 「'A」代表「alpha」或「transparency」,但JPEG不具有透明度。嘗試使用PNG代替。 – wchargin 2012-06-11 03:23:22

回答

0

你給你的問題的解決方案。您將面板的背景設置爲白色,而不是BufferedImage。您將圖像保存爲JPEG,而不是面板,因此JPEG具有默認背景,顯示爲黑色。

0

保存爲JPEG時,您希望作爲背景有什麼作用? JPEG是用於拍攝的,它不能有透明區域,所以這些必須轉換成某種顏色,這就是爲什麼你有黑色(我想)。爲什麼不把圖像保存爲PNG?或者,如果你想堅持使用白色的JPEG第一個填充區域,然後開始繪製它...

0

如果你問我,你的創建圖像的方法是倒退。所有其他問題都是關於在面板上繪製多邊形的。現在您正在更改代碼以在圖像上繪製?

當你擴展JPanel並調用super.paintComponent()時會發生什麼?背景被繪製!然後你做你的自定義多邊形繪畫。在上面的代碼中,您只需創建圖像,然後繪製多邊形。

更簡單的方法是創建一個例程,將面板繪製到圖像上,然後可以重用代碼而不必重寫每個組件的paintComponent方法。

ScreenImage類爲你做這個。

4

我意識到這是一個非常古老的問題,但我自己也有類似的問題,因爲我找到了答案(它在javadoc中),我想我會在這裏發佈它。

當您在圖形對象上設置背景色時,這隻會在您清除區域時起作用。因此,只需立即清除整個區域,您就可以使用您喜歡的顏色背景:

graphics.clearRect(0, 0, width, height); 
相關問題