![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| DimonDimon |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 18.10.2010 Репутация: нет Всего: нет |
Программа - элементарный графический редактор на подобии Pait
Реализация процесса рисования: Есть BufferredImage.
Для того что бы нарисовать линию необходимо нажать левую клавишу мыши (это будет первая точка прямой) и затем не отпуская клавиши протянуть мышь в нужное место. Там где клавишу отпустят будет вторая точка линии. Пока клавиша нажата обработчик событий MouseMotionHandler в методе mouseDragged(MouseEvent e) перерисовывает линию на JPanel. После того как пользователь отпустит клавишу мыши линя записывается в BufferredImage, а затем BufferedImage отрисовывается на панели.
Проблемма в том что есть небольшая разница между тем как отрисовывается объект Line2D на панали, и этот же Line2D сохранённый в BuffererdImage. Начальные и конечные координаты одинаковые а вот промежуточные пиксели немного смещаются. Добавил картинку: ![]() Это сообщение отредактировал(а) DimonDimon - 8.12.2010, 19:11 |
||||||||
|
|||||||||
| Skipy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 4 Всего: 16 |
И чем это мешает? Поставьте Antialiasing и это перестанет Вас волновать.
|
|||
|
||||
| DimonDimon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 18.10.2010 Репутация: нет Всего: нет |
Изображение увеличено в 8 раз. Реальная толщина линий 1 пиксель. Нужно чтобы линии были одинаковыми и без Antialiasing. Применение Antialiasing, в данном случае, не решение проблемы, а способ её не решать.
|
|||
|
||||
| mgarin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 19.8.2009 Где: Санкт-Петербург Репутация: 2 Всего: 3 |
Покопал на данную тему - судя по всему проблемы (если их можно так назвать) закопаны глубоко в sun методах отвечающих за отрисовку стандартных форм (таких как например линия). Плюс, если вы посмотрите, Graphics2D у BufferedImage и в методе paint() компонента немного отличаются, например Surface'ом. Вобщем я не буду гадать, ибо точно не знаю.
На вашем месте, если вам просто до "немогу" критично поправить данное несхождение, сделал бы еще 1 BufferedImage для хранения рисуемых форм. Я так сделал в своем редакторе, но по другим причинам (надо было рисовать новые элементы на экземпляре, а не на исходнике) Вот как-то так:
|
|||
|
||||
| DimonDimon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 18.10.2010 Репутация: нет Всего: нет |
mgarin thnx.
В принципе что-то такое я и предполагал. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |