Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.12.2014, 12:50
DA54 DA54 вне форума
Прохожий
 
Регистрация: 13.05.2007
Сообщения: 37
Репутация: 10
По умолчанию ZooM картинки

Всем привет.
Есть в файрмонкей такой компонент как ImageViewer. У него есть свойство BitmapScale. Суть в том что когда увеличиваешь картинку путем изменения свойства BitmapScale, то стандартно позиция области видимости центрируется. Это несовсем правильно, т.к. если увеличивать картинку предварительно сместив область видимости то получается что картинка будет центроваться не туда куда человек смотрел до увеличения, а тупо к центру всей картинки. Так вот задача переписать обработчик так чтобы центрировалась картинка после увеличения в тот же центр который был до увеличения. Если удалить центрование в стандартном обработчике, то при увеличении картинкисмещение области видимости остается на том же месте а сама картинка растягивается вниз впрао. Возможно я описал проблему немного путано, но как смог. Сначала задача кажется тривиальной и способов решения ее даже несколько, но все они оказываются на практике несостоятельными.

Вот один из примеров:

Код:
      x1 := ( ViewportPosition.X ) + (( (HScrollBar.ViewportSize/oldvalue) - (HScrollBar.ViewportSize/NewValue) )/2);
      y1 := ( ViewportPosition.Y ) + (( (VScrollBar.ViewportSize/oldvalue) - (VScrollBar.ViewportSize/NewValue) )/2);

ViewportPosition - текущее смещение
HScrollBar.ViewportSize - ширина области видимости
oldvalue - коэффициент увеличения картинки (BitmapScale) до изменения
newvalue - коэффициент увеличения картинки (BitmapScale) после изменения
Ответить с цитированием
  #2  
Старый 17.12.2014, 12:56
DA54 DA54 вне форума
Прохожий
 
Регистрация: 13.05.2007
Сообщения: 37
Репутация: 10
По умолчанию

Пробовал через центры, тоже неверные результаты.
Вот так находятся центры картинки (проверено, правильно).
центр до:
Код:
      x0 := (ViewportPosition.X / OldValue) + (HScrollBar.ViewportSize / (OldValue*2));
      y0 := (ViewportPosition.Y / OldValue) + (VScrollBar.ViewportSize / (OldValue*2));
центр после:
Код:
      x02 := (ViewportPosition.X / NewValue) + (HScrollBar.ViewportSize / (NewValue*2));
      y02 := (ViewportPosition.Y / NewValue) + (VScrollBar.ViewportSize / (NewValue*2));
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:21.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter