2

我将 aJPanel的背景颜色设置为白色。但是,当我将其保存为 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

4 回答 4

4

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

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

graphics.clearRect(0, 0, width, height);
于 2012-03-31T22:29:10.293 回答
0

当另存为 JPEG 时,您希望有什么作为背景?JPEG适用于摄影,它不能有透明区域,所以必须将它们转换为某种颜色,这就是为什么你有黑色(我想)。为什么不将图像保存为PNG?或者,如果您想坚持使用 JPEG 首先用白色填充区域,然后开始在其上绘图...

于 2009-10-16T07:41:07.323 回答
0

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

于 2009-10-16T06:30:16.420 回答
0

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

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

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

ScreenImage类为您执行此操作

于 2009-10-16T14:57:18.507 回答