绘制图像的一部分(Java)

时间:2012-03-13 02:36:14

标签: java graphics

这是我的问题 - 我正在尝试绘制单个图像的圆形部分。

我正在做一些自上而下的地牢爬虫类游戏,我试图在玩家周围做出一个轻微的半径。地板是单个图像,我只需绘制一个小的圆形部分。我一直在看这个方法:

drawImage(Image img,
          int dx1, 
          int dy1,
          int dx2,
          int dy2,
          int sx1,
          int sy1,
          int sx2,
          int sy2,
          Color bgcolor, 
          ImageObserver observer) 

但是,看起来它只会绘制一个方形子部分。 有没有人碰巧知道一种比绘制大量小方块更简单的方法来给出一个圆圈的错觉?

由于

3 个答案:

答案 0 :(得分:1)

您可以使用Graphics中的setClip()方法执行此操作。

它还需要其他一些工作,但是:

import java.awt.Graphics;
import java.awt.geom.QuadCurve2D;
//...

  g.setClip(new QuadCurve()); // Set the bounding curve for the image.
  g.drawImage(...);

正如我所说,它需要更多的工作,这意味着QuadCurve2D对象可能需要以不同的方式定义,但你可以check the doc

答案 1 :(得分:1)

光半径的最大效果是在Alpha通道中使用带渐变的叠加。

这样的事情:

// do this once during setup
overlay = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGBA);
for (int x = 0; x < width; ++x)
{
    for (int y = 0; y < height; ++y)
    {
        double range = 100;
        double distance = Math.sqrt(Math.pow(x - width / 2, 2) + Math.pow(y - height / 2, 2));
        int value = Math.max(100, (int)Math.round(255 - 100 * distance / range));
        overlay.setRGB(x, y, new Color(0, 0, 0, value));
    }
}
....
// do this every frame
gfx.drawImage(overlay, 0, 0, null);

我没有编译这个,所以它可能充满了错误!

如果你想要一些“闪烁”,你可以生成几个地图,并为alpha值添加一些噪音。或者甚至调整颜色,以便获得更温暖的光线。

答案 2 :(得分:0)

这不是一个很好的解决方案,但如果你画了整个楼层,然后是一个中心有透明孔的黑色图像呢?