Рисование поверх BufferedImage.перекрасить () - PullRequest
1 голос
/ 07 апреля 2011

У меня есть компонент, на котором я рисую BufferedImage на всей поверхности. Я хотел бы нарисовать что-то более над ним, следуя за мышью, когда он проходит над областью. Для этого я добавляю MouseMotionListener к компоненту и реализую метод mouseMove. Внутри метода mouseMoved я вызываю repaint() в конце рисования рисунка курсора. Я хотел бы знать, есть ли лучший способ сделать это, потому что изображение, следующее за курсором, действительно маленькое, и я перекрашиваю каждую вещь каждый раз.

Ответы [ 2 ]

1 голос
/ 08 апреля 2011

Поскольку вы знаете координаты вашей мыши и маленькое изображение, которое собираетесь закрасить фон, вы можете оптимизировать следующим образом [псевдокод]:

void mouseMoved(event) {
  lastCoordinates = currentCoordinates;
  currentCoordinates = event.coordinates;

  image.repaint(lastCoordinates.x, lastCoordinates.y, smallImage.width, smallImage.height);
  image.repaint(currentCoordinates.x, currentCoordinates.y, smallImage.width, smallImage.height);
}

таким образом, что вы перерисовываете только две областивы на самом деле заботитесь не о целом фоне.

Также, читая javadoc, кажется, что код выше моего фактически вызывает 2 отдельных вызова для рисования, что было бы неэффективно.Вы можете попытаться передать значение 10 миллисекунд или около того, чтобы убедиться, что 2 краски выполняются вместе.

Проверьте javadoc на repaint (), который принимает 4 и 5 аргументов:

1 голос
/ 07 апреля 2011

Добавьте JLabel, содержащий Icon, на панель с буферизованным изображением.

Затем, когда вы перемещаете мышь, вы просто меняете расположение метки.Swing перекрасит последнее местоположение, чтобы буферизованное изображение просвечивало, затем перекрасит метку в новом месте.Так что пусть Swing управляет перекраской.

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