天天看點

jfreechart 生成JPEG格式圖檔出現不正常的背景色

版本1:jfreechart-1.0.9

生成圖檔代碼如下:

Java代碼 

jfreechart 生成JPEG格式圖檔出現不正常的背景色
  1. ChartUtilities.writeChartAsJPEG(out, chart, 500, 400);  

得到的圖檔顯示如下,出現不正常的紅色背景

jfreechart 生成JPEG格式圖檔出現不正常的背景色

jfreechart-1.0.9生成圖檔各主要代碼如下:

JFreeChart類

Java代碼 

jfreechart 生成JPEG格式圖檔出現不正常的背景色
  1. public BufferedImage createBufferedImage(int width, int height, ChartRenderingInfo info)  
  2. {  
  3.      return createBufferedImage(width, height, 2, info);  
  4. }  
  5. public BufferedImage createBufferedImage(int width, int height, int imageType, ChartRenderingInfo info)  
  6. {  
  7.      BufferedImage image = new BufferedImage(width, height, imageType);  
  8.      Graphics2D g2 = image.createGraphics();  
  9.      draw(g2, new Rectangle2D.Double(0.0D, 0.0D, width, height), null, info);  
  10.      g2.dispose();  
  11.      return image;  
  12. }  

如上所述,建立BufferedImage的時候,使用的iamgeType是2,也就是BufferedImage.TYPE_INT_ARGB格式。

解決方法一:手動設定imageType為1(即BufferedImage.TYPE_INT_RGB),如下代碼:

Java代碼 

jfreechart 生成JPEG格式圖檔出現不正常的背景色
  1. BufferedImage bi = chart.createBufferedImage(500, 400, 1, null);  
  2. ImageIO.write(bi, "jpeg", out);  

解決方法二:更新jfreechart到1.0.10,該版本中JFreeChart中的createBufferedImage代碼如下:

Java代碼 

jfreechart 生成JPEG格式圖檔出現不正常的背景色
  1. public static void writeChartAsJPEG(OutputStream out, float quality, JFreeChart chart, int width, int height, ChartRenderingInfo info)  
  2.   throws IOException                                                                                                                    
  3. {                                                                                                                                       
  4.   if (chart == null) {                                                                                                                  
  5.     throw new IllegalArgumentException("Null 'chart' argument.");                                                                       
  6.   }                                                                                                                                     
  7.   BufferedImage image = chart.createBufferedImage(width, height, 1, info);                                                                                                                                          
  8.   EncoderUtil.writeBufferedImage(image, "jpeg", out, quality);                                                                          
  9. }  

 1.0.10版本在調用JFreeChart的createBufferedImage預設使用了imageType為BufferedImage.TYPE_INT_RGB

調整後生成的圖檔如下:

jfreechart 生成JPEG格式圖檔出現不正常的背景色

繼續閱讀