在不触碰的情况下画出暗色的bufferedimage

时间:2015-06-18 00:06:31

标签: java image awt

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

绘制

如果玩家离他们太远,我想要的是能够将这些精灵画得更暗。 我已经看过很多类似的问题,但是找不到我想要的东西。有没有办法在不触及原始精灵的情况下执行此操作?或许其他一些绘图功能?或者我绝对需要制作每个精灵的副本?遗憾的是,这让我的游戏搞得一团糟......

1 个答案:

答案 0 :(得分: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个波段,则抛出异常)。