我如何將2個複合材料合併爲一個?讓我來解釋:結合多重graphics2d複合材料?
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());
(BlendComposite從http://www.curious-creature.com/2006/09/20/new-blendings-modes-for-java2d/) 此時乘法複合給該圖像的漂亮的顏色(overlayColor)。
但透明區域現在具有與overlayColor相同的顏色。
如何防止透明區域獲取overlayColor?
我懷疑你不能。但是你可以通過使用我猜想的步驟從原始「恢復」alpha來解決它。 – haraldK
@haraldK,最大的問題是如何? ;-)如果我知道或已經找到辦法做到這一點,我會很高興。 –
用'DstIn'' AlphaComposite'在'copy'(使用現有的'g2d')上繪製原始('img')? – haraldK