Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我将图像保存为JPG时会得到黑色背景?_Java_Background_Save_Jpanel - Fatal编程技术网

Java 为什么我将图像保存为JPG时会得到黑色背景?

Java 为什么我将图像保存为JPG时会得到黑色背景?,java,background,save,jpanel,Java,Background,Save,Jpanel,我将JPanel的背景色设置为白色。但是,当我将其保存为JPG或其他图像格式时,背景是黑色的。我已经输入了这个代码TYPE\u INT\u ARGB,但它不起作用。如何将背景设置为其他颜色?e、 蓝色、白色等 public void paintComponent(Graphics g) { int width = getWidth(); int height = getHeight(); // Create a buffered image i

我将
JPanel
的背景色设置为白色。但是,当我将其保存为JPG或其他图像格式时,背景是黑色的。我已经输入了这个代码
TYPE\u INT\u ARGB
,但它不起作用。如何将背景设置为其他颜色?e、 蓝色、白色等

    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)   

你在问题中给出了答案。将面板背景设置为白色,而不是BuffereImage。将图像另存为JPEG,而不是面板,因此JPEG具有默认背景,显示为黑色

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

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

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

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


这门课是为你做的。

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

当您在图形对象上设置背景色时,只有在清除某个区域时,背景色才会起作用。因此,只需立即清除整个区域,您就可以使用首选颜色的背景:

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

TYPE\u INT\u ARGB
与JPEG一起使用是没有意义的。“
A
”代表“alpha”或“透明度”,但JPEG没有透明度。尝试使用PNG代替。