【问题标题】:draw darkened bufferedimage without touching it绘制变暗的缓冲图像而不触摸它
【发布时间】:2015-09-03 10:46:19
【问题描述】:

我目前正在制作一个基于图块的策略游戏,其地图由java.awt.Graphics.drawimage(..) 绘制的一堆精灵 (BufferedImages) 组成

如果玩家离它们太远,我想要的是能够将这些精灵绘制成更暗的色调。 我见过很多类似的问题,但没有找到我想要的。有没有办法在不接触原始精灵的情况下做到这一点?也许其他一些绘图功能?还是我绝对需要复制每个精灵?可悲的是,这会让我的游戏一团糟......

【问题讨论】:

    标签: java image awt


    【解决方案1】:

    您可以在绘制图像时使用Graphics2D.drawImage(BufferedImage image, BufferedImageOp op, int x, int y)RescaleOp 更改颜色:

    g2.drawImage(image, new RescaleOp(
            new float[]{0.5f, 0.5f, 0.5f, 1f}, // scale factors for red, green, blue, alpha
            new float[]{0, 0, 0, 0}, // offsets for red, green, blue, alpha
            null), // You can supply RenderingHints here if you want to
        0, 0);
    

    请注意,您需要多少比例因子/偏移量以及它们操作的波段取决于您的图像类型,上述内容会使 ARGB 类型的 BufferedImage 变暗,但可能会为不同类型的图像产生其他结果(或如果图像没有 4 个波段,则抛出异常。

    【讨论】:

    • 就像一个魅力,除了它似乎 rescaleOp 与 RGBA 一起工作,而不是 ARGB,所以它是 {0.5f, 0.5f, 0.5f, 1f}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    相关资源
    最近更新 更多