Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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 在BG为JPEG的情况下组合图像会导致意外结果_Java_Image_Javax.imageio - Fatal编程技术网

Java 在BG为JPEG的情况下组合图像会导致意外结果

Java 在BG为JPEG的情况下组合图像会导致意外结果,java,image,javax.imageio,Java,Image,Javax.imageio,为什么组合BG为JPEG的图像会导致意外结果 这是我在本报告中回答的后续问题。发布在那里的源(使用内存中创建的BG映像)如下所示: BG图像在左边 FG图像(具有透明度的PNG)在中间。 组合图像位于右侧 到目前为止,一切顺利。但后来问这个问题的人评论说,如果BG是JPEG,它就失败了。认为他们错了,我修改了我的示例,将BG图像编码为JPEG。现在,如果我使用BufferedImage.TYPE_INT_ARGB或BufferedImage.TYPE_INT_RGB作为最终图像,我会得到

为什么组合BG为JPEG的图像会导致意外结果

这是我在本报告中回答的后续问题。发布在那里的源(使用内存中创建的BG映像)如下所示:

  • BG图像在左边
  • FG图像(具有透明度的PNG)在中间。
  • 组合图像位于右侧
到目前为止,一切顺利。但后来问这个问题的人评论说,如果BG是JPEG,它就失败了。认为他们错了,我修改了我的示例,将BG图像编码为JPEG。现在,如果我使用
BufferedImage.TYPE_INT_ARGB
BufferedImage.TYPE_INT_RGB
作为最终图像,我会得到他们所指的:

TYPE\u INT\u ARGB

TYPE\u INT\u RGB

我希望至少其中一个的结果与原始结果相同(更重要的是
ARGB
变体)

gui.repaint()

因为在构造joptionpane时有效地绘制了面板和组件,所以请稍后再试,但是,即使如此,因为构造线程匹配可见性调用也不会成立,所以无论如何,在joptionpane调用之后,您应该在绘制覆盖方法中调用g.drawImage


它无法绘制屏幕上还不存在的东西,但是调用是可以容忍的,因为理论上它是作为一组对象存在的,足够用于该方法。

看起来这是由于输入错误造成的

在您的引用中,构成组合图像的代码是

Graphics2D g = finalImage.createGraphics();
g.drawImage(bgImage, 0, 0, null);
g.drawImage(fgImage, 0, 0, null);
但在这个问题上,它被改为

Graphics2D g = finalImage.createGraphics();
g.drawImage(bgImageJpeg, w, h, null);
g.drawImage(fgImage, w, h, null);
后者从右下角开始绘制,这恰好是图像的右下角,因此没有真正绘制任何内容。然而,前者如预期的那样绘制了整个图像。

您完全正确。我不知道那个错误是怎么发生的,但是谢谢你发现了我(愚蠢的)错误P
Graphics2D g = finalImage.createGraphics();
g.drawImage(bgImageJpeg, w, h, null);
g.drawImage(fgImage, w, h, null);