[英]Overlay a transparent color on top of a PNG with alpha channel
我正在尋找一種在Java中繪制PNG圖像(帶有Alpha通道)的方法,該圖像為灰度顏色,然后在其之上疊加一種透明顏色(例如,不透明度為75%的綠色)以更改顏色。 需要明確的是,所得圖像將是在其頂部放置透明顏色的直接結果,而不是任何特殊類型的混合的結果。
例如,我將繪制以下圖像:
然后在圖像頂部疊加RGB顏色(102、255、0,alpha):
在圖像上繪制顏色的方法將需要使得它不會干擾屏幕上緊鄰的其他圖像。 這將類似於Adobe Photoshop的顏色疊加功能。 兩個圖像可以具有單獨的顏色疊加,但是單獨的疊加不會相互沖突。
多虧了leonbloy,我相信使用“ SRC_OVER”的AlphaComposit可以解決此問題,然后我可以使用一種方法將結果保存為新的BufferedImage,這將防止覆蓋影響屏幕上的任何其他圖像對象。
我將在測試時發布結果。
我能夠使用AlphaComposite,Graphics2D和BufferedImage獲得所需的效果。
@Override
public void paintComponent(Graphics g) {
BufferedImage result = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D gbi = result.createGraphics();
BufferedImage x = null;
try {
x = ImageIO.read(getClass().getResource("/resources/someimage.png"));
} catch (IOException ex) {
Logger.getLogger(CanvasPanel.class.getName()).log(Level.SEVERE, null, ex);
}
gbi.drawImage(x, 0, 0, this);
gbi.setColor(selectedColor);
gbi.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.75f));
gbi.fillRect(0, 0, width, height);
g.drawImage(result, 0, 0, this);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.