【问题标题】:how to apply transparency to a bufferd image java如何将透明度应用于缓冲图像java
【发布时间】:2012-11-17 17:33:22
【问题描述】:

我正在尝试绘制一个方法,该方法采用缓冲图像,使其半透明,然后返回结果缓冲图像。从那里我可以稍后画它。但是我的代码无法绘制任何东西。认为我很接近......

public BufferedImage ApplyTransparency(BufferedImage image)
{
    BufferedImage dest = new BufferedImage(overlay1.getWidth(), overlay1.getHeight(),
            BufferedImage.TYPE_INT_ARGB);

    Graphics2D g3 = dest.createGraphics(); 
    AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.DST_IN, 0.9F);
    g3.setComposite(ac);
    g3.drawImage(overlay1, 0, 0, null);

    return dest;
}

【问题讨论】:

    标签: java transparency bufferedimage


    【解决方案1】:

    您可以将图像绘制到新图像上,如下调整其透明度

    public Raster transform(Image img, float alpha) {
        BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
        bi.getGraphics().drawImage(img, 0, 0, null);
        RasterOp rop = new RescaleOp(new float[] { 1.0f, 1.0f, 1.0f, alpha }, new float[] { 0.0f, 0.0f, 0.0f, 0.0f }, null);
        Raster result = rop.filter(bi.getData(), null);
        return result;
    }
    

    【讨论】:

    • 谢谢奥利弗。我设法弄清楚为什么我的代码不起作用。它需要 AlphaComposite 标志为 DST_OVER 或 SRC_OVER 而不是 DST_IN。不知道使用 Raster 与 BufferedImage 相比有什么优势,因为我自己从未使用过。但是很高兴看到 RescaleOp。
    猜你喜欢
    • 2012-03-25
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多