Отображение части ImageIcon

1

Bonjour, я пытаюсь сыграть свою руку в анимации, и обнаружил, что на одном изображении подряд появилась серия взрывов. Я хочу, чтобы они последовательно показывали друг за другом, чтобы оживить взрыв. Естественно, я думаю, что ImageIcon на JLabel, но когда я посмотрел спецификацию JLabel я нашел эту строку:

JLabel(Icon icon) - создает экземпляр JLabel с указанным изображением. Метка центрирована по вертикали и горизонтали в области отображения.

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

Есть ли способ сделать это, не сокращая изображение и загружая каждый отдельно?

Теги:
swing
jlabel
imageicon

3 ответа

4

Сначала вы можете загрузить изображение с использованием BufferedImage, благодаря чему вы можете вызвать getSubimage для получения обрезанной копии Image, сохраняя исходное Image

  • 0
    Кроме того, вы захотите пройтись по изображениям, обрезать их до нужного размера, прежде чем выполнять какой-либо рендеринг (из соображений производительности).
2

Вы также можете нарисовать изображение, используя этот метод drawImage из класса Graphics чтобы обрезать изображение, которое рисуется

public abstract boolean drawImage(Image img,
                              int dx1,
                              int dy1,
                              int dx2,
                              int dy2,
                              int sx1,
                              int sy1,
                              int sx2,
                              int sy2,
                              ImageObserver observer)

Рисует большую часть указанной области указанного изображения, которая доступна в данный момент, масштабируя ее на лету, чтобы она помещалась внутри указанной области целевой поверхности назначения. Прозрачные пиксели не влияют на все пиксели.

Параметры:

  • img - указанное изображение для рисования. Этот метод ничего не делает, если img равно null.
  • dx1 - координата x первого угла прямоугольника назначения.
  • dy1 - координата y первого угла прямоугольника назначения.
  • dx2 - координата x второго угла прямоугольника назначения.
  • dy2 - координата y второго угла прямоугольника назначения.
  • sx1 - координата x первого угла исходного прямоугольника.
  • sy1 - координата y первого угла исходного прямоугольника.
  • sx2 - координата x второго угла исходного прямоугольника.
  • sy2 - координата y второго угла исходного прямоугольника.
  • observer - объект, который должен быть уведомлен, поскольку больше изображения масштабируется и преобразуется.

Смотрите пример здесь, который использует один анимационный спрайт выбрать другое расположение изображения, чтобы рисовать.

Изображение 174551

Изображение 174551

До 20JAN15 примерная программа, указанная в этом ответе (которая использовалась для создания анимированного отображения взрыва выше), имела логические ошибки и показывала только 2 строки изображений. (Обратите внимание, что в примере не отображается последняя строка взрыва...)

См. Дополнительный ответ на указанной странице, содержащий исправления для программы. Приветствия. Уоррен К.

1
  1. Добавьте метку в JScrollPane и установите размер прокрутки как ширину отдельного изображения. Вы также можете удалить boder из scrollpane и убедиться, что в scrollpane не отображаются полосы прокрутки.

  2. Используйте таймер Swing для планирования анимации.

  3. Каждый раз, когда срабатывает таймер, вы можете изменить положение видовой области прокрутки, используя метод setViewPosition для окна просмотра.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню