【问题标题】:How does image transparency work and how do I implement it?图像透明度如何工作以及如何实现它?
【发布时间】:2015-09-20 19:12:29
【问题描述】:

我打算制作一个彩色叠加层来覆盖我所在城市的地图。但是我希望叠加层只是半透明的。

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

【问题讨论】:

  • 请接受或解释原因。

标签: java image png rgb


【解决方案1】:

像这样修改 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多