我正计划制作一个彩色叠加层,以覆盖我的城市地图。但是我只希望覆盖层是半透明的。

我知道rgba值以及如何确定透明度的值,但是当使用BufferedImage类时,我只能将一种颜色分配给一个像素。假设您获得了两张相同大小的图像。我将如何使用仅具有原始图像一半不透明度的覆盖层覆盖另一个覆盖层。

最佳答案

像这样修改Alpha通道(不透明度从0到255):

BufferedImage changeOpacity(BufferedImage img, int opacity) {
    final BufferedImage ret = new BufferedImage(img.getWidth(),
                                                img.getHeight(),
                                                BufferedImage.TYPE_INT_ARGB);
    final RescaleOp ro = new RescaleOp(new float[] {1f, 1f, 1f, ((float)opacity)/255f},
                                       new float[] {0f, 0f, 0f, 0f},
                                       null);
    ro.filter(img, ret);
    return ret;
}


然后使用以下Alpha通道叠加两个图像:

BufferedImage overlay(BufferedImage img1, BufferedImage img2) {
    final BufferedImage combined = new BufferedImage(img1.getWidth(),
                                                     img1.getHeight(),
                                                     BufferedImage.TYPE_INT_ARGB);
    final Graphics g = combined.getGraphics();
    g.drawImage(img1, 0, 0, null);
    g.drawImage(img2, 0, 0, null);
    return combined;
}

10-07 19:12
查看更多