Рисование части изображения (Java) - PullRequest
1 голос
/ 13 марта 2012

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

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

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

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

Спасибо

Ответы [ 3 ]

1 голос
/ 13 марта 2012

Вы можете сделать это с помощью метода 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 может потребоваться определить по-другому, но вы можете проверить документ для этого.

1 голос
/ 13 марта 2012

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

Примерно так:

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

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

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

0 голосов
/ 13 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...