Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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 使用alpha通道在PNG顶部覆盖透明颜色_Java_Image_Transparency - Fatal编程技术网

Java 使用alpha通道在PNG顶部覆盖透明颜色

Java 使用alpha通道在PNG顶部覆盖透明颜色,java,image,transparency,Java,Image,Transparency,我正在寻找一种方法,在Java中绘制一个灰度的PNG图像(带有alpha通道),然后在上面覆盖一个透明的颜色,比如75%不透明度的绿色,以改变颜色为了清晰起见,生成的图像将是在其顶部放置透明颜色的直接结果,而不是任何特殊类型混合的结果。 例如,我将绘制以下图像: 然后在图像顶部覆盖RGB颜色(102、255、0、alpha): 在图像上绘制颜色的方法需要确保不会干扰屏幕上近距离的其他图像。这将类似于Adobe Photoshop的颜色覆盖功能。两幅图像可以有单独的彩色叠加,但单独的叠加不会相

我正在寻找一种方法,在Java中绘制一个灰度的PNG图像(带有alpha通道),然后在上面覆盖一个透明的颜色,比如75%不透明度的绿色,以改变颜色为了清晰起见,生成的图像将是在其顶部放置透明颜色的直接结果,而不是任何特殊类型混合的结果。

例如,我将绘制以下图像:

然后在图像顶部覆盖RGB颜色(102、255、0、alpha):

在图像上绘制颜色的方法需要确保不会干扰屏幕上近距离的其他图像。这将类似于Adobe Photoshop的颜色覆盖功能。两幅图像可以有单独的彩色叠加,但单独的叠加不会相互冲突

感谢leonbloy,我相信AlphaComposit使用“SRC_OVER”可以解决这个问题,然后我可以使用一种方法将结果保存为新的BuffereImage,这将防止覆盖影响屏幕上的任何其他图像对象


我将在测试时发布结果。

我能够使用AlphaComposite、Graphics2D和BuffereImage获得所需的效果

@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);
}

不清楚你想做什么,也不清楚你试过什么。您正在使用BuffereImage吗?你读了-说-?您是想根据顶部图像的透射率进行“普通”覆盖,还是想实现特殊的混合/覆盖?你看了吗?对不起,我会尽量说清楚的。我的意图是按照透明度进行正常覆盖。我对任何混合方式都不感兴趣。我不知道AlphaComposite类,因为我对Java中的2D图形编程还不熟悉,在我最初的搜索中没有找到它。我看了AlphaComposite上的页面,看起来好像“SOURCE_OVER”就是我想要使用的。好的,如果你解决了你的问题,你可以自己添加你的解决方案作为答案并接受它。顺便说一句,这不是特别相关的PNG,我删除了该标记。