![]() |
|
|
![]()
|
|
| avorber |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 20.11.2007 Где: Харьков Репутация: нет Всего: нет |
Приветик всем!!!
У меня есть одна проблемка. Создаю векторный редактор, необходимо реализовать масштабирование. Если использовать обычный scale, то объекты расползается либо наплывают :( Слышала есть такая методика, что подбирается плоскость логических координат с большими значениями по х и у так, что при масштабировании при расчете новых координат получаются целые числа и картинка не искажается. Может кто-нибудь чтонить знает где можна найти инфу о этой методике |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Все очень просто. Чтобы масштабировать вектора их все надо умножить их на матрицу преобразования:
Кстати, а что значит "объекты расползаются или наплывают"? Может ты не все вектора умножаешь на коэффициент? |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: нет Всего: 207 |
avorber,
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| avorber |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 20.11.2007 Где: Харьков Репутация: нет Всего: нет |
Дело в том что пишу я под линухой с помощью библиотеки QT. Это по вопросу почему эта тема
Класс QPainter сожержит метод scale, который собственно и масштабирует как растровое изображение так и векторное, в зависимости от того на каком контексте мы рисуем. Этот самый scale и реализован на основе аффинных преобразований, т.е. я сама никакие вектора не умножаю. Результат работы этой функции меня не удовлетворяет. Расползается картинка - это значит, что при 100% два прямоугольника стояли рядом, а при увеличении между ними появился зазор и т.д. и т.п. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
тогда делай масштабирование вручную. для этого нужно просто домножить все координаты всех векторов на коэффициент.
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 7 Всего: 162 |
avorber, а ты антиалиасинг включила (QPainter::setRenderHint)? Может, с ним будет лучше?
|
|||
|
||||
| avorber |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 20.11.2007 Где: Харьков Репутация: нет Всего: нет |
QPainter::setRenderHint - это в какой версии Qt, я использую 3.02 и не нашла таковой...
И что такое антиалиасинг?? По поводу масштабирования вручную: допустим мне надо получить 120% и нарисовать прямоугольник, соответственно я в функцию drawRect(int x, int y, int w, int h) передам x*1.2, y*1.2, ..... но ведь эта функция принимает инты а не доублы, координаты округляться и нарисуются неверно |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
avorber, а иначе никак. На самом деле нарисуется верно, только будут небольшие искажения на 1 пиксель. Иначе можно только увеличив виртуальный масштаб до 200%, нарисовать картинку в буфере, а затем вывести ее с уменьшением на экран. Тогда ты получишь "размазывание", которое сделает иллюзию размещения линии между пикселями. Но в этом случае еще надо масштабировать толщину линий.
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 7 Всего: 162 |
старенькая... никак перейти на Qt4? |
|||
|
||||
| avorber |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 20.11.2007 Где: Харьков Репутация: нет Всего: нет |
Я знаю что старенькая, но это не мой выбор. Шо маемо - те маемо
|
|||
|
||||
| Elfebet |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 545 Регистрация: 15.5.2006 Где: Украина. Запорожь е. Репутация: 5 Всего: 14 |
хех... была аналогичная ситуация, достаточно просто юзать drawRect ( const QRectF & rectangle ) , т.е. явно передай double,
или аналогично
p.s. по крайней мере это в qt4 работает Это сообщение отредактировал(а) Elfebet - 22.11.2007, 13:46 -------------------- Программист не должен всё знать... он должен знать где можно посмотреть |
||||
|
|||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 7 Всего: 162 |
в qt4 легче сделать setRenderHint один раз |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |