Java 组合多个图形2D组合?
如何将2个复合材料组合成一个?让我解释一下:Java 组合多个图形2D组合?,java,transparency,bufferedimage,graphics2d,Java,Transparency,Bufferedimage,Graphics2d,如何将2个复合材料组合成一个?让我解释一下: BufferedImage copy = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = copy.createGraphics(); g2d.setComposite(AlphaComposite.Clear); g2d.fillRect(0, 0, img.getWidth(), img.getHei
BufferedImage copy = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = copy.createGraphics();
g2d.setComposite(AlphaComposite.Clear);
g2d.fillRect(0, 0, img.getWidth(), img.getHeight());
现在我们有了一个透明的图像
g2d.setComposite(AlphaComposite.Src);
g2d.drawImage(img, 0, 0, null);
现在我们有了“img”的精确副本,包括透明区域
g2d.setComposite(BlendComposite.getInstance(BlendingMode.MULTIPLY));
g2d.setColor(overlayColor);
g2d.fillRect(0, 0, img.getWidth(), img.getHeight());
(从中混合合成)
此时,乘法合成为图像提供了一种漂亮的颜色(叠加颜色)
但现在透明区域的颜色与叠加颜色相同
我如何防止透明区域的颜色重叠?@haraldK为我指出了一个很好的解决方案: 将原件(img)绘制在副本上(使用现有g2d),并使用 字母复合材料 在乘法步骤之后,我尝试了一下:
g2d.setComposite(AlphaComposite.DstIn);
g2d.drawImage(img, 0, 0, null);
现在它工作了,我的透明度回来了
对于有相同问题的任何人: AlphaComposite.DstIn: 如果源和目标中的像素重叠,则源的alpha将应用于重叠区域中的目标像素。如果alpha=1.0,则重叠区域中的像素不变;如果alpha为0.0,则重叠区域中的像素将被清除
@haraldK为我指出了一个很好的工作解决方案: 将原件(img)绘制在副本上(使用现有g2d),并使用 字母复合材料 在乘法步骤之后,我尝试了一下:
g2d.setComposite(AlphaComposite.DstIn);
g2d.drawImage(img, 0, 0, null);
现在它工作了,我的透明度回来了
对于有相同问题的任何人: AlphaComposite.DstIn: 如果源和目标中的像素重叠,则源的alpha将应用于重叠区域中的目标像素。如果alpha=1.0,则重叠区域中的像素不变;如果alpha为0.0,则重叠区域中的像素将被清除
我想你不能。但是你可以通过使用一个步骤,从原来的“恢复”阿尔法来解决这个问题。@haraldK,最大的问题是如何?;-)如果我知道或找到了一种方法,我会非常高兴。用
DstIn
AlphaComposite
?@haraldK将原始(img
)绘制在副本上(使用现有的g2d
)!不知道为什么,但我会读更多关于AlphaComposite的内容。谢谢你的帮助!对于具有相同问题的任何人:如果源和目标中的像素重叠,则源的alpha将应用于重叠区域中的目标像素。如果alpha=1.0,则重叠区域中的像素不变;如果alpha为0.0,则重叠区域中的像素将被清除。我想你不能。但是你可以通过使用一个步骤,从原来的“恢复”阿尔法来解决这个问题。@haraldK,最大的问题是如何?;-)如果我知道或找到了一种方法,我会非常高兴。用DstIn
AlphaComposite
?@haraldK将原始(img
)绘制在副本上(使用现有的g2d
)!不知道为什么,但我会读更多关于AlphaComposite的内容。谢谢你的帮助!对于具有相同问题的任何人:如果源和目标中的像素重叠,则源的alpha将应用于重叠区域中的目标像素。如果alpha=1.0,则重叠区域中的像素不变;如果alpha为0.0,则重叠区域中的像素将被清除。