Рисование части изображения (Java)

Вот моя проблема - я пытаюсь нарисовать круглую часть одного изображения.

Я делаю некоторую работу над игрой типа "подземный гусеничный ход" и пытаюсь сделать радиус вокруг игрока. Пол - это одно изображение, и мне нужно нарисовать только маленькую круглую его часть. Я смотрел на этот метод:

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

Но, похоже, это только нарисует квадратный подраздел. Кто-нибудь случайно знает более простой метод, чем рисовать тонны маленьких квадратов, чтобы создать иллюзию круга?

Спасибо

3 ответа

Решение

Вы можете сделать это с setClip() метод в Graphics,

Нужна другая работа, но:

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

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

Как я уже сказал, это требует больше работы, то есть QuadCurve2D объект, возможно, должен быть определен по-другому, но вы можете проверить документ для этого.

Наибольший эффект для светового радиуса заключается в использовании наложения с градиентом в его альфа-канале.

Что-то вроде этого:

// 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);

Я не компилировал это, так что, вероятно, он полон ошибок!

Если вам нужно немного "мерцания", вы можете создать несколько карт и добавить шум к альфа-значениям. Или даже настроить цвета, чтобы получить теплый свет.

Это не очень удачное решение, но что, если вы нарисовали весь пол, а затем черное изображение с прозрачной дырой в центре?

Другие вопросы по тегам