将图像另存为JPG时,为什么会出现黑色背景?

时间:2009-10-16 06:03:12

标签: java background save jpanel

我将JPanel的背景颜色设置为白色。但是,当我将其保存为JPG或其他图像格式时,背景为黑色。我已经将此代码TYPE_INT_ARGB放了,但它不起作用。如何将背景设置为其他颜色?例如蓝色,白色等。

    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)   

4 个答案:

答案 0 :(得分:4)

我确实意识到这是一个非常古老的问题,但我自己也有类似的问题,因为我找到了答案(这是在javadocs中),我想我会在这里发布它。

在图形对象上设置背景颜色时,只有在清除区域时才会发挥作用。因此,只需立即清除整个区域,您将获得您喜欢的颜色背景:

graphics.clearRect(0, 0, width, height);

答案 1 :(得分:0)

您在问题中提供解决方案。您将面板的背景设置为白色,而不是BufferedImage。您将图像保存为JPEG而不是面板,因此JPEG具有默认背景,显示为黑色。

答案 2 :(得分:0)

在保存为JPEG时,您期望作为背景获得什么? JPEG是用于拍摄的,它不能有透明区域,所以必须将它们转换成某种颜色,这就是为什么你有黑色(我想)。为什么不将图像保存为PNG?或者如果你想坚持使用白色的JPEG第一个填充区域,然后开始绘制它......

答案 3 :(得分:0)

如果你问我,你创建图像的方法是倒退的。所有其他问题都是关于在面板上绘制多边形。现在您要更改代码以在图像上绘制?

当你扩展JPanel并调用super.paintComponent()时会猜到会发生什么?背景画了!然后你做自定义多边形绘画。在上面的代码中,您只需创建图像,然后绘制多边形。

更简单的方法是创建一个例程,将面板绘制到图像中,然后您可以重用代码而不会覆盖每个组件的paintComponent方法。

ScreenImage课程为您完成此任务。